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;iInsertNode(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