第七次数据结构上机实验报告.docx

上传人:b****5 文档编号:7858740 上传时间:2023-01-26 格式:DOCX 页数:16 大小:26.70KB
下载 相关 举报
第七次数据结构上机实验报告.docx_第1页
第1页 / 共16页
第七次数据结构上机实验报告.docx_第2页
第2页 / 共16页
第七次数据结构上机实验报告.docx_第3页
第3页 / 共16页
第七次数据结构上机实验报告.docx_第4页
第4页 / 共16页
第七次数据结构上机实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第七次数据结构上机实验报告.docx

《第七次数据结构上机实验报告.docx》由会员分享,可在线阅读,更多相关《第七次数据结构上机实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

第七次数据结构上机实验报告.docx

第七次数据结构上机实验报告

一、调试成功程序及说明

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(elementelement)

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<element<<"";

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->elementelement))

{

pre=root;

returnIsBinSearchTree(root->right,pre);

}

}

else

returnfalse;

}

intmain()

{

constintN=10;

int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1