资源描述:
《数据结构c语言实现顺序查找,折半查找,二叉排序树,哈希表实验原理(实验原理+程序代码+程序截图+实验小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学号:E30814013专业:网络工程姓名:张芸实验日期:2010-6-12教师签字:成绩实验报告实验目的:实现顺序查找,折半查找,二叉排序树,哈希表实验原理:顺序查找intSearch_Seq(SSTableST,KeyTypekey){//算法9.1//在顺序表ST中顺序查找其关键字等于key的数据元素。//若找到,则函数值为该元素在表中的位置,否则为0。inti=0;ST.elem[0].key=key;//"哨兵"for(i=ST.length;ST.elem[i].key!=key;--
2、i);//从后往前找returni;//找不到时,i为0}//Search_Seq二叉排序树 (BinarySortTree)又称二叉查找(搜索)树(BinarySearchTree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;③左、右子树本身又各是一棵二叉排序树。哈希表StatusSearchHash(HashTableH,HKeyTypeK,int&p,in
3、t&c){//算法9.17//在开放定址哈希表H中查找关键码为K的元素,//若查找成功,以p指示待查数据元素在表中位置,并返回SUCCESS;//否则,以p指示插入位置,并返回UNSUCCESS,//c用以计冲突次数,其初值置零,供建表插入时参考p=Hash(K);//求得哈希地址while((H.elem[p].key!=NULLKEY)&&//该位置中填有记录!equal(K,(H.elem[p].key)))//并且关键字不相等collision(p,++c);//求得下一探查地址pif(e
4、qual(K,(H.elem[p].key)))returnSUCCESS;//查找成功,p返回待查数据元素位置elsereturnUNSUCCESS;//查找不成功(H.elem[p].key==NULLKEY),//p返回的是插入位置}//SearchHash顺序查找#includevoidmain(){inta[10]={1,2,3,4,5,6,7,8,9,10};inti,x,y;printf("输入你要查找的数:");scanf("%d",&x);y=0;for(i
5、=0;i<10;i++){if(x==a[i]){y=1;printf("你要查找的数%d在第个%d位置",x,i+1);break;}}if(y==0)printf("无法找到你要查找的数");}折半查找#include#defineN21voidmain(void){inta[N];inti,n,num;inttop,bottom,mid;intflag=1;//如果在表列中找到数字,则值为1,否则为0intloc=-1;//要查找的数在表列中的位置,如果loca=-
6、1表示表列中没有这个数;如果有这个数,则它的值为所在的位置printf("你想在多少个数中进行折半查找,请输入(1--20):");scanf("%d",&n);while(n<1
7、
8、n>20){printf("你输入的数不正确,请重新输入。");printf("你想在多少个数中进行折半查找,请输入(1--20):");scanf("%d",&n);}printf("请你输入一个整数a[1]:");scanf("%d",&a[1]);i=2;while(i<=n)//输入从小到大的表列{pri
9、ntf("请你输入一个整数a[%d]:",i);scanf("%d",&a[i]);if(a[i]>a[i-1])i++;elseprintf("你输入的数不满足要求,请重新输入。");}//输出表列printf("输出表列");for(i=1;i<=n;i++){printf("%6d",a[i]);}printf("");printf("请你输入要查找的数:");scanf("%d",&num);flag=1;//假设输入的数在表列中top=n;bottom=1;mid=(to
10、p+bottom)/2;while(flag){printf("top=%d,bottom=%d,mid=%d,a[%d]=%d",top,bottom,mid,mid,a[mid]);if((num>a[top])
11、
12、(numa[top]或者num