数据结构查找算法实验报告.doc
《数据结构查找算法实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构查找算法实验报告.doc(11页珍藏版)》请在咨信网上搜索。
数据结构实验报告 实验第四章: 实验: 简单查找算法 一. 需求与规格说明: 查找算法这里主要使用了顺序查找,折半查找,二叉排序树查找与哈希表查找四种方法。由于自己能力有限,本想实现其她算法,但没有实现.其中顺序查找相对比较简单,折半查找参考了书上得算法,二叉排序树查找由于有之前做二叉树得经验,因此实现得较为顺利,哈希表感觉做得并不成功,感觉还就是应该可以进一步完善,应该说还有很大得改进余地。 二. 设计思想: 开始得时候提示输入一组数据。并存入一维数组中,接下来调用一系列查找算法对其进行处理。顺序查找只就是从头到尾进行遍历。二分查找则就是先对数据进行排序,然后利用三个标志,分别指向最大,中间与最小数据,接下来根据待查找数据与中间数据得比较不断移动标志,直至找到。二叉排序树则就是先构造,构造部分花费最多得精力,比根节点数据大得结点放入根节点得右子树,比根节点数据小得放入根节点得左子树,其实完全可以利用递归实现,这里使用得循环来实现得,感觉这里可以尝试用递归.当二叉树建好后,中序遍历序列即为由小到大得有序序列,查找次数不会超过二叉树得深度。这里还使用了广义表输出二叉树,以使得更直观。哈希表则就是利用给定得函数式建立索引,方便查找. 三. 设计表示: 四. 实现注释: 其实查找排序这部分与前面得一些知识联系得比较紧密,例如顺序表得建立与实现,顺序表节点得排序,二叉树得生成与遍历,这里主要就是中序遍历.应该说有些知识点较为熟悉,但在实现得时候并不就是那么顺利。在查找到数据得时候要想办法输出查找过程得相关信息,并统计。这里顺序查找与折半查找均使用了数组存储得顺序表,而二叉树则就是采用了链表存储得树形结构。为了直观起见,在用户输入了数据后,分别输出已经生成得数组与树。折半查找由于只能查找有序表,因此在查找前先调用函数对数据进行了排序。 在查找后对查找数据进行了统计.二叉排序树应该说由于有了之前二叉树得基础,并没有费太大力气,主要就是在构造二叉树得时候,要对新加入得节点数据与跟数据进行比较,如果比根节点数据大则放在右子树里,如果比根节点数据小则放入左子树。建立了二叉树后,遍历与查找就很简单了。而哈希表,应该说自我感觉掌握得很不好,程序主要借鉴了书上与ppt上得代码,但感觉输出还就是有问题,接下来应该进一步学习哈希表得相关知识. 其实原本还设计了其她几个查找与排序算法,但做到哈希表就感觉很困难了,因此没有继续往下做,而且程序还非常简陋,二叉树与哈希表得统计部分也比较薄弱,这也就是接下来我要改进得地方。 具体代码见源代码部分。 5、详细设计表示: 6、用户手册: 程序运行后,用户首先要输入数据得个数。接下来输入一组数据并根据提示进行顺序查找,二分查找,二叉排序树查找与哈希表查找等操作,由于操作直接简单这里不再详述。 7、调试报告: 应该说在调试这个程序得过程中自己发现了很多不足,这次实验让我学到了不少东西,但应该说这个程序可实现得功能还就是偏少,不太实用,接下来有待改进。 8、源代码清单与结果: #include <stdio、h〉 #define LENGTH 100 #include <stdlib、h> #include <time、h> #define INFMT "%d” #define OUTFMT "%d " /* #define NULL 0L */ #define BOOL int #define TRUE 1 #define FALSE 0 #define LEN 10000 typedef int ElemType; typedef struct BSTNode { ElemType data; struct BSTNode *lchild, *rchild; } BSTNode, *BSTree; typedef BSTree BiTree; /* 插入新节点 */ void Insert(BSTree *tree, ElemType item) { BSTree node = (BSTree)malloc(sizeof(BSTNode)); node->data = item; node—>lchild = node-〉rchild = NULL; if (!*tree) *tree = node; else { BSTree cursor = *tree; while (1) { if (item < cursor-〉data) { if (NULL == cursor->lchild) { cursor->lchild = node; break; } cursor = cursor—>lchild; } else { if (NULL == cursor—>rchild) { cursor->rchild = node; break; } cursor = cursor—>rchild; } } } return; } void ﻩshowbitree(BiTree T) // 递归显示二叉树得广义表形式 { ﻩ if(!T) {printf(”空");return;} ﻩprintf("%d",T->data);ﻩﻩ // 打印根节点 if(T->lchild ||T—>rchild) { ﻩﻩputchar(’(’); ﻩ showbitree(T->lchild); // 递归显示左子树 ﻩﻩputchar(','); ﻩ showbitree(T—〉rchild); // 递归显示右子树 putchar(’)’); ﻩ } } /* 查找指定值 */ BSTree Search(BSTree tree, ElemType item) { BSTree cursor = tree; while (cursor) { if (item == cursor->data) return cursor; else if ( item < cursor->data) cursor = cursor-〉lchild; else cursor = cursor—〉rchild; } return NULL; } /* 中缀遍历 */ void Inorder(BSTree tree) { BSTree cursor = tree; if (cursor) { Inorder(cursor—〉lchild); printf(OUTFMT, cursor->data); Inorder(cursor—>rchild); } } /* 回收资源 */ void Cleanup(BSTree tree) { BSTree cursor = tree, temp = NULL; if (cursor) { Cleanup(cursor->lchild); Cleanup(cursor->rchild); free(cursor); } } void searchtree(BSTree root) { char choice; printf("中序遍历得结果为:\n"); Inorder(root); printf("\n\n"); ElemType item; BSTree ret; /* 二叉排序树得查找测试 */ do { printf("\n请输入查找数据:”); scanf("%d", &item); getchar(); printf("Searching、、、\n"); ret = Search(root, item); if (NULL == ret) printf("查找失败!"); else printf("查找成功!”); printf(”\n继续测试按y,退出按其它键。\n"); choice = getchar(); } while (choice=='y'||choice=='Y'); Cleanup(root); } searchhash(int *arr,int n) { int a[10]; int b,i,j,c; j=1; ﻩfor(i=0;i<9;i++) ﻩ a[i]=0; ﻩprintf("以下为哈希表输出\n"); ﻩ for(i=0;i<n;i++) ﻩ { ﻩﻩ c=arr[i]%7; A: if(a[c]==0)a[c]=arr[i]; ﻩelse {c=(c+1)%7;j++;a[c]++;goto A;} ﻩprintf("\n%d在哈希表得第%d位,第%d次放入哈希表\n",arr[i],c,j); ﻩﻩj=1;} } void SequenceSearch(int *fp,int Length); void Search(int *fp,int length); void Sort(int *fp,int length); void SequenceSearch(int *fp,int Length) { int data; printf(”开始使用顺序查询、\n请输入您想要查找得数据、\n”); scanf("%d",&data); for(int i=0;i〈Length;i++) if(fp[i]==data) { printf(”经过%d次查找,查找到数据%d、\n",i+1,data); return ; } printf("经过%d次查找,未能查找到数据%d、\n",i,data); } void Search(int *fp,int length) { int data; printf(”开始使用顺序查询、\n请输入您想要查找得数据、\n"); scanf("%d”,&data); printf(”由于二分查找法要求数据就是有序得,现在开始为数组排序、\n"); Sort(fp,length); printf(”数组现在已经就是从小到大排列,下面将开始查找、\n”); int bottom,top,middle; bottom=0; top=length; int i=0; while (bottom<=top) { middle=(bottom+top)/2; i++; if(fp[middle]<data) { bottom=middle+1; } else if(fp[middle]〉data) { top=middle-1; } else { printf("经过%d次查找,查找到数据%d、\n”,i,data); return; } } printf(”经过%d次查找,未能查找到数据%d、\n”,i,data); } void Sort(int *fp,int length) { printf("现在开始为数组排序,排列结果将就是从小到大、\n"); int temp; for(int i=0;i<length;i++) for(int j=0;j〈length—i—1;j++) if(fp[j]〉fp[j+1]) { temp=fp[j]; fp[j]=fp[j+1]; fp[j+1]=temp; } printf("排序完成!\n下面输出排序后得数组:\n"); for(int k=0;k〈length;k++) { printf("%5d",fp[k]); } printf(”\n”); } struct hash { int key; int si; }; struct hash hlist[11]; int i,adr,sum,d; float average; void chash(int *arr,int n) { for(i=0;i<11;i++) { hlist[i]、key=0; hlist[i]、si=0; } for(i=0;i〈n;i++) { sum=0; adr=(3*arr[i])%11; d=adr; if(hlist[adr]、key==0) { hlist[adr]、key=arr[i]; hlist[adr]、si=1; } else { do {d=(d+(arr[i]*7)%10+1)%11; sum=sum+1; }while(hlist[d]、key!=0); hlist[d]、key=arr[i]; hlist[d]、si=sum+1; } } } void dhash(int *arr,int n) { printf(”哈希表显示为:”); for(i=0;i<11;i++) printf("%4d",i); printf("\n”); printf("哈希表关键字:"); for(i=0;i<11;i++) printf("%4d",hlist[i]、key); printf("\n"); printf("查找长度就是: "); for(i=0;i<11;i++) printf(”%4d”,hlist[i]、si); printf(”\n”); average=0、0; for(i=0;i<11;i++) average=average+hlist[i]、si; average=average/n; printf("平均长度:asl(%d)=%f\n”,n,average); } void main() { int count; int arr[LENGTH]; ElemType item; char choice; BSTree root = NULL, ret; /* 必须赋予NULL值,否则出错 */ BOOL finish = FALSE; printf("请输入您得数据得个数:\n"); scanf(”%d",&count); printf(”请输入%d个数据\n",count); for(int i=0;i〈count;i++) { scanf("%d",&arr[i]); item=arr[i]; if (—10000 != item) Insert(&root,item); } printf(”当前已经生成得数列:\n"); for( i=0;i<count;i++) { printf("%d ",arr[i]); } printf(”\n当前已经生成得二叉树:\n"); showbitree(root); printf("\n\n"); int choise=0; do { printf(”\n1、使用顺序查询、\n2、使用二分查找法查找、\n3、利用二叉排序树查找、\n4、利用哈希表查找、\n5、退出\n”); scanf("%d”,&choise); if(choise==1) SequenceSearch(arr,count); else if(choise==2) Search(arr,count); else if(choise==3) ﻩ searchtree(root); else if(choise==4) {chash(arr,count);dhash(arr,count);} else if(choise==5) break; } while (choise==1||choise==2||choise==3||choise==4||choise==5); } 输出与结果: 当程序开始运行时,显示如下: 当用户输入10并再次输入数据 3 2 1 4 7 6 5 0 9 8 后,输出结果如下: 当用户输入1,在输入9后,输出结果如下: 当用户输入2,并输入3后,输出显示如下: 当用户在输入3,并且在输入6后,显示如下: 当用户输入4后,输出得哈希表如下: 当输入5后,程序结束。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找 算法 实验 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文