第七次数据结构上机实验报告.docx
- 文档编号:7858740
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:26.70KB
第七次数据结构上机实验报告.docx
《第七次数据结构上机实验报告.docx》由会员分享,可在线阅读,更多相关《第七次数据结构上机实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
第七次数据结构上机实验报告
一、调试成功程序及说明
1、
题目:
1.哈希表设计(习题集P166.6.2)
算法思想:
取关键字或关键字的某个线性函数值为散列地址。
即H(key)=key或H(key)=a·key+b,其中a和b为常数(这种散列函数叫做自身函数)。
若其中H(key)中已经有值了,就往下一个找,直到H(key)中没有值了,就放进去。
源程序:
#include
#include
#include
#defineL50/*定义哈希表长*/
#defineM47/*定义p值*/
#defineN30/*定义名单长*/
charz[22];
structold{char*name;char*py;intk;};
structoldoldlist[L];/*原始表*/
structhterm
{char*name;char*py;
intk;intsi;
};
structhtermhlist[L];/*哈希表*/
inti,adr,sum,d;
charch1;
floataverage;
/**********************************/
voidchash()
{for(i=0;i {hlist[i].name=""; hlist[i].py=""; hlist[i].k=0; hlist[i].si=0; }; for(i=0;i {sum=0; adr=(oldlist[i].k)%M; d=adr; if(hlist[adr].si==0) {hlist[adr].k=oldlist[i].k; hlist[adr].name=oldlist[i].name; hlist[adr].py=oldlist[i].py; hlist[adr].si=1; } else {do {d=(d+((oldlist[i].k))%10+1)%M;/*伪随机*/ sum=sum+1; } while(hlist[d].k! =0); hlist[d].k=oldlist[i].k; hlist[d].name=oldlist[i].name; hlist[d].py=oldlist[i].py; hlist[d].si=sum+1; } } } /***************************************/ voidfindhlist() {ints0;charr,g; clrscr();/*清屏*/ for(r=0;r<20;r++){z[r]=0;}; gotoxy(1,1);printf("RESEARCH....."); gotoxy(5,10);printf("inputthespellofname: "); gotoxy(5,12);scanf("%s",z); s0=0; for(r=0;r<20;r++){s0=z[r]+s0;}; gotoxy(5,13);printf("%d",s0); /*for(i=0;i sum=1; adr=s0%M; d=adr; if(hlist[adr].k==s0) { gotoxy(18,18);printf(""); gotoxy(18,18);printf("%s",hlist[d].name); gotoxy(18,19);printf("%s",hlist[d].py); gotoxy(18,20); printf("find%dtimes",sum); getch(); } else {if(hlist[adr].k==0) {gotoxy(18,18); printf("nothingaboutit! "); getch(); } else {g=0; for(i=0;g==0;i++) {d=(d+s0%10+1)%M;/*伪随机*/ sum=sum+1; if(hlist[d].k==0) {gotoxy(18,18); printf("nothingaboutit! "); g=1;getch(); }; gotoxy(18,18); printf("%s",hlist[d].name); gotoxy(18,19); printf("%s",hlist[d].py); gotoxy(18,20); printf("find%dtimes",sum); getch(); if(hlist[d].k==s0) {g=1; gotoxy(18,21); printf("find%dtimesuntilsuccess! ",sum); getch(); }; }; }; }; } /***************************************/ voidinp()/*输入表*/ { char*f; intr,s0; oldlist[0].name="A";oldlist[0].py="apple"; oldlist[1].name="B";oldlist[1].py="bus"; oldlist[2].name="C";oldlist[2].py="cat"; oldlist[3].name="D";oldlist[3].py="dog"; oldlist[5].name="E";oldlist[5].py="egg"; oldlist[6].name="F";oldlist[6].py="fly"; oldlist[7].name="G";oldlist[7].py="good"; oldlist[8].name="H";oldlist[8].py="hurt"; oldlist[9].name="I";oldlist[9].py="int"; oldlist[10].name="J";oldlist[10].py="joy"; oldlist[11].name="K";oldlist[11].py="keep"; oldlist[12].name="L";oldlist[12].py="long"; oldlist[13].name="M";oldlist[13].py="make"; oldlist[14].name="N";oldlist[14].py="net"; oldlist[15].name="O";oldlist[15].py="out"; oldlist[16].name="P";oldlist[16].py="pour"; oldlist[17].name="Q";oldlist[17].py="queen"; oldlist[18].name="R";oldlist[18].py="run"; oldlist[19].name="S";oldlist[19].py="sun"; oldlist[20].name="T";oldlist[20].py="tea"; oldlist[21].name="U";oldlist[21].py="until"; oldlist[22].name="V";oldlist[22].py="vection"; oldlist[23].name="W";oldlist[23].py="water"; oldlist[24].name="X";oldlist[24].py="xray"; oldlist[25].name="Y";oldlist[25].py="you"; oldlist[26].name="Z";oldlist[26].py="zoo"; oldlist[27].name="AA";oldlist[27].py="aah"; oldlist[28].name="BB";oldlist[28].py="bbc"; oldlist[29].name="CC";oldlist[29].py="cch"; /*请在此输入数据,同时修改程序开头的MLN*/ for(i=0;i { s0=0; f=oldlist[i].py; for(r=0;*(f+r)! ='\0';r++){s0=*(f+r)+s0;}; oldlist[i].k=s0; }; } /****************************************/ voiddhash()/*显示哈希表*/ {charLON=17; clrscr(); if(LON>L){LON=L;}; gotoxy(1,1);printf("HashTable: "); gotoxy(1,2);printf("address: "); for(i=0;i {gotoxy(1,i+3); printf("%-3d",i); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i].k)%M); }; average=0; for(i=0;i {average=average+hlist[i].si;}; average=average/N; gotoxy(10,23); printf("ASL: ASL(%d)=%f",N,average); gotoxy(20,24); printf("anykeytopass"); ch1=getch(); if(L>15) { clrscr(); if(LON>L-15){LON=L-15;}; gotoxy(1,1);printf("HashTable: "); gotoxy(1,2);printf("address: "); for(i=0;i {gotoxy(1,i+3); printf("%-3d",i+15); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i+15].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i+15].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i+15].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i+15].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i+15].k)%M); }; average=0; for(i=0;i {average=average+hlist[i].si;}; average=average/N; gotoxy(10,23); printf("ASL: ASL(%d)=%f",N,average); gotoxy(20,24); printf("anykeytopass"); ch1=getch(); }; if(L>30) { clrscr(); if(LON>L-30){LON=L-30;}; gotoxy(1,1);printf("HashTable: "); gotoxy(1,2);printf("address: "); for(i=0;i {gotoxy(1,i+3); printf("%-3d",i+30); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i+30].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i+30].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i+30].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i+30].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i+30].k)%M); }; average=0; for(i=0;i {average=average+hlist[i].si;}; average=average/N; gotoxy(10,23); printf("ASL: ASL(%d)=%f",N,average); gotoxy(20,24); printf("anykeytopass"); ch1=getch(); }; if(L>45) { clrscr(); if(LON>L-45){LON=L-45;}; gotoxy(1,1);printf("HashTable: "); gotoxy(1,2);printf("address: "); for(i=0;i {gotoxy(1,i+3); printf("%-3d",i+45); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i+45].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i+45].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i+45].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i+45].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i+45].k)%M); }; average=0; for(i=0;i {average=average+hlist[i].si;}; average=average/N; gotoxy(10,23); printf("ASL: ASL(%d)=%f",N,average); gotoxy(20,24); printf("anykeytopass! "); ch1=getch(); }; } /**************************************/ voidmain() {inp();/*输入原表*/ chash();/*建哈希表*/ a: clrscr(); gotoxy(21,2); printf("**************************************\n"); printf("Welcometouse! \n"); printf("\n"); gotoxy(22,4); printf("1.PrinttheHashTable."); printf("\n"); gotoxy(22,6); printf("2.Research."); printf("\n"); gotoxy(22,8); printf("3.Exit"); printf("\n"); gotoxy(22,12); printf("**************************************\n"); printf("\nYourchoiceis: "); printf("\n"); gotoxy(24,14); ch1=getch(); if(ch1==0x33){ printf("Thankyouforyourusing"); printf("\n"); getch(); exit(0);};/*"x": 退出*/ if(ch1==0x31){dhash();};/*表的属性*/ if(ch1==0x32){findhlist();};/*查找*/ gotoa; } 运行结果: 有错误。 2、 题目: 2.编写程序,判断一棵二叉树是否为二叉排序树(习题集P589.31) 算法思想: 若根结点的关键字值等于查找的关键字,成功。 否则,若小于根结点的关键字值,递归查左子树。 若大于根结点的关键字值,递归查右子树。 若子树为空,查找不成功。 源程序: #include #include usingnamespacestd; structNode { intelement; Node*left; Node*right; Node(intele=0,Node*l=NULL,Node*r=NULL) : element(ele),left(l),right(r){} }; //插入结点 voidInsertNode(Node*&root,intelement) { if(NULL==root) root=newNode(element); elseif(element InsertNode(root->left,element); else InsertNode(root->right,element); } //创建二叉搜索树 voidCreateBinSearchTree(Node*&root,intarr[],intn) { for(inti=0;i InsertNode(root,arr[i]); } //中序输出 voidMiddlePrint(Node*root) { if(NULL! =root) { MiddlePrint(root->left); cout< MiddlePrint(root->right); } } //函数功能: 二叉排序树的判定算法 /* 算法思想: 根据二叉树的特点“其中序遍历序列为有序序列”,对二叉树进行中序遍历, 同时检查当前结点与其中前驱关键字值的大小。 */ //中序遍历过程中判定给定的二叉树是否为二叉排序树,入是返会true,否则返回false //pre指向中序前驱结点,初值为NULL boolIsBinSearchTree(Node*root,Node*pre) { if(NULL==root)//空二叉树也是二叉排序树 returntrue; //左子树为二叉排序树且关键字值大于前驱结点关键字值, //此时,是否为二叉树却决于右子树 if(IsBinSearchTree(root->left,pre)) { if((NULL==pre)||(pre->element { pre=root; returnIsBinSearchTree(root->right,pre); } } else returnfalse; } intmain() { constintN=10; int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 数据结构 上机 实验 报告