1、建立c1.h放程序名;#includectype.hmalloc.hlimits.hstdio.hstdlib.hio.hmath.hprocess.hiostream.h/状态代码#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status;typedef int Boolean;建立文件c9-1.h放静态查找表的顺序存储结构/c9-1.h typedef structElemType *elem; int length; SSTable;建立文件c9.h放对两个
2、数值型关键字的比较约定为如下宏定义/c9.h#define EQ(a,b)(a)=(b)#define LT(a,b)(a)(b)#define LQ(a,b)(a)=(b)建立文件bo9-1.cpp放静态查找表的基本操作Status Creat_Seq(SSTable &ST,int n)int i;ST.elem=(ElemType*)calloc(n+1,sizeof(ElemType);if(!ST.elem) return ERROR;for(i=1;i=n;i+)*(ST.elem+i)=ri-1;ST.length=n;return OK;void Ascend(SSTable
3、&ST)int i,j,k;ST.length;k=i;ST.elem0=ST.elemi;for(j=i+1;j=ST.length;j+)if LT(ST.elemj.key,ST.elem0.key)k=j;ST.elem0=ST.elemj;if(k!=i) ST.elemk=ST.elemi; ST.elemi=ST.elem0;Status Creat_Ord(SSTable &Status f;f=Creat_Seq(ST,n);if(f)Ascend(ST);return f;Status Destroy(SSTable & free(ST.elem); ST.elem=NUL
4、L; ST.length=0; return OK;int Search_Seq(SSTable ST,KeyType key)ST.elem0.key=key;for(i=ST.leng;!EQ(ST.elemi.key,key);-i) return i;int Search_Bin(SSTable ST,KeyType key)int low,high,mid; low=1; high=ST.length; while(lowlchild) DestroyDSTable(DT-lchild);rchild)rchild); free(DT);BiTree SearchBST(BiTree
5、 T,KeyType key) if(!T)|EQ(key,T-data.key) return T; else if LT(key,T- return SearchBST(T-lchild,key);rchild,key);void SearchBST(BiTree &T,KeyType key,BiTree f,BiTree &p,Status &flag)T) p=f; flag=FALSE; else if EQ(key,T- p=T; flag=TRUE; SearchBST(T-lchild,key,T,p,flag);rchild,key,T,p,flag);Status Ins
6、ertBST(BiTree &T,ElemType e) BiTree p,s; Status flag; SearchBST(T,e.key,NULL,p,flag); s=(BiTree)malloc(sizeof(BiTNode); s-data=e;lchild=s-rchild=NULL;p) T=s; else if LT(e.key,p- p-lchild=s;rchild=s; return TRUE; return FALSE;void Delete(BiTree & BiTree q,s;p- q=p; p=p-lchild; free(q); else if(!rchil
7、d; s=p- while(s- q=s; s=s-data=s-data; if(q!=p) q-rchild=s- free(s);Status DeleteBST(BiTree &T,KeyType key)/若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点, /并返回TRUE;否则返回FALSE。算法9.7T)/不存在关键字等于key的数据元素 return FALSE; if EQ(key,T-data.key)/找到关键字等于key的数据元素 Delete(T); else if LT(key,T- DeleteBST(T- else return TRUE;
8、void TraverseDSTable(BiTree DT,void(*Visit)(ElemType)/初始条件:动态查找表DT存在,Visit是对结点操作的应用函数 /操作结果:按关键字的顺序对DT的每一个结点调用函数Visit()一且至多一次 TraverseDSTable(DT-lchild,Visit); Visit(DT-data);rchild,Visit);建立algo9-4.cpp检验bo9-2.cpp的程序/alog9-4.cpp的程序#define N 10 int others;bo9-2.cpp(%d,%d) BiTree dt,p; int i; KeyType
9、j; ElemType rN=45,1,12,2,53,3,3,4,37,5,24,6,100,7,61,8,90,9,78,10; InitDSTable(dt); InsertBSTable(dt,ri); TraverseDSTable(dt,print);请输入待查找的值: scanf(j); p=SearchBST(dt,j); if(p) printf(表中存在此值: DeleteBST(dt,j);删除此值后:TraverseDSTable(dt,print);表中不存在此值n DestroyDSTable(dt);4、实验结果:1、顺序表查找2、有序表查找3、二叉查找树5、实验心得通过本次试验,让我对课堂所学的知识进行了巩固和提高,对顺序表、有序表和二叉树等知识进行了进一步的学习,并学会了设计查找算法。尽管这个程序很长,但进过我们小组同学的认真思考、讨论,以及分工合作,终于完成了实验,也让我们意识到,平时的学习不光要学会书本上的知识,还应以实践为主,只有付诸实践才能体现出程序设计的重要性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1