1、数据结构指导书附源代码1、计算二叉树叶子节点数.cpp#include#includetypedef struct Bitreeint data;Bitree *lchild,*rchild;BiNode;BiNode *root;int sum=0;int m=sizeof(Bitree);void insert_data(int x) Bitree *p,*q,*s; s=(Bitree*)malloc(m); s-data=x; s-lchild=NULL; s-rchild=NULL; if(!root) root=s;return; p=root; while(p) q=p; if(
2、p-data=x) printf(data already exist!n);return; else if(xdata) p=p-rchild; else p=p-rchild; if(xdata) q-lchild=s; else q-rchild=s;DLR(Bitree *root) if(root!=NULL) if(root-lchild=NULL)&(root-rchild=NULL) sum+; printf(%dn,root-data); DLR(root-lchild); DLR(root-rchild); return 0;main() int i=1,x; root=N
3、ULL; do printf(please input data%dn,i); i+; scanf(%d,&x); if(x=-9999) DLR(root); printf(nNow output count value:%dn,sum); return 0; else insert_data(x); while(x!=-9999); return(0);2、二叉排序树及遍历.cpp#include#include#include#define ERROR 0;#define FALSE 0;#define OK 1;#define TRUE 1;#define EQ(a,b)(a)=(b)
4、#define LT(a,b)(a)(b)#define LQ(a,b)(a)data) if(PreOrderTraverse(T-l,Visit) if(PreOrderTraverse(T-r,Visit) return OK; return ERROR; else return OK;Status PostOrderTraverse(BiTree T,int(*Visit)(int d) if(T) if(PostOrderTraverse(T-l,Visit) if(PostOrderTraverse(T-r,Visit) if(Visit(T-data) return OK; re
5、turn ERROR; else return 1;Status printelem(int d) printf(%4d,d); return OK; Status InOrderTraverse(BiTree T,int(*Visit)(int d) if(T) if(InOrderTraverse(T-l,Visit) if(Visit(T-data) if(InOrderTraverse(T-r,Visit) return OK; return ERROR; else return OK;Status SearchBST(BiTree T,KeyType key,BiTree f,BiT
6、ree *p) if(!T)*p=f;return FALSE; else if EQ(key,T-data)*p=T;return TRUE; else if LT(key,T-data) SearchBST(T-l,key,T,p); else SearchBST(T-r,key,T,p); Status InsertBST(BiTree *T,ElemType e) BiTree p,s; if(!SearchBST(*T,e,NULL,&p) s=(BiTree)malloc(sizeof(BiNode); s-data=e; s-l=s-r=NULL; if(!p) *T=s; el
7、se if(LT(e,p-data) p-l=s; else p-r=s; return TRUE; else return FALSE;void Delete(BiTree *p) BiTree q,s; if(!(*p)-r) q=(*p);(*p)=(*p)-l; free(q); else if(!(*p)-l)q=(*p);(*p)=(*p)-r; free(q); else /* q=(*p);s=(*p)-l; s=(*p)-l; while(s-r)q=s;s=s-r; (*p)-data=s-data; if(q!=(*p) q-r=s-l; else q-l=s-l; fr
8、ee(s); */ q=s=(*p)-l; while(s-r) s=s-r; s-r=(*p)-r; free(*p); (*p)=q; Status DeleteBST(BiTree *T,KeyType key) if(!(*T) return FALSE; else if(EQ(key,(*T)-data) Delete(T); else if(LT(key,(*T)-data) DeleteBST(&(*T)-l),key); else DeleteBST(&(*T)-r),key); return TRUE; void main() BiTree sroot=NULL; int i
9、; int a10=45,23,12,3,33,27,56,90,120,62; system(cls); for(i=0;i10;i+) InsertBST(&sroot,ai); printf(InorderTraverse:n); InOrderTraverse(sroot,printelem); printf(nNow PreOrdern); PreOrderTraverse(sroot,printelem); printf(nNowPostOrdern); PostOrderTraverse(sroot,printelem); for(i=0;i3;i+) DeleteBST(&sr
10、oot,ai); printf(nNow sroot has nodes:n); InOrderTraverse(sroot,printelem); printf(nNow PreOrdern); PreOrderTraverse(sroot,printelem); printf(nNow PostOrdern); PostOrderTraverse(sroot,printelem);3、查找.cpp#include#includetypedef int KeyType;typedef struct KeyType key; int maths,english;ElemType;#define
11、 EQ(a,b)(a)=(b)#define LT(a,b)(a)=(b)typedef struct ElemType *elem; int length;SSTable;int Search_Seq(SSTable ST,KeyType key) int i; ST.elem0.key=key; for(i=ST.length; !EQ(ST.elemi.key,key); -i); return i;int Search_Bin(SSTable ST,KeyType key) int low,mid,high; low=1; high=ST.length; while(lowlength
12、); while(ilength) fscanf(fp,%d%d%d,&(t-elemi.key),&(t-elemi.maths),&(t-elemi.english); i+; fclose(fp);main() ElemType stu50; SSTable class1; int i,j,k; long time; class1.elem=stu; getdata(&class1); printf(This class has %d students.n,class1.length); printf(Input stuNo you want search:n); scanf(%d,&k
13、); i=Search_Seq(class1,k); j=Search_Bin(class1,k); printf(Now use Search_Seq:n); printf(Maths Englishn); printf( %d %dn,class1.elemi.maths,class1.elemi.english); printf(n); printf(Now use Search_Bin:n); printf(Maths Englishn); printf( %d %dn,class1.elemj.maths,class1.elemj.english);Stu.txt61 89 302
14、56 883 57 774 89 995 96 336 88 954、二叉排序树的查找算法.cpp#include#include#include#define ERROR 0;#define FALSE 0;#define OK 1;#define TRUE 1;#define EQ(a,b)(a)=(b)#define LT(a,b)(a)(b)#define LQ(a,b)(a)data) if(PreOrderTraverse(T-l,Visit) if(PreOrderTraverse(T-r,Visit) return OK; return ERROR; else return O
15、K;Status PostOrderTraverse(BiTree T,int(*Visit)(int d) if(T) if(PostOrderTraverse(T-l,Visit) if(PostOrderTraverse(T-r,Visit) if(Visit(T-data) return OK; return ERROR; else return 1;Status printelem(int d) printf(%4d,d); return OK; Status InOrderTraverse(BiTree T,int(*Visit)(int d) if(T) if(InOrderTr
16、averse(T-l,Visit) if(Visit(T-data) if(InOrderTraverse(T-r,Visit) return OK; return ERROR; else return OK;Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree *p) if(!T)*p=f;return FALSE; else if EQ(key,T-data)*p=T;return TRUE; else if LT(key,T-data) SearchBST(T-l,key,T,p); else SearchBST(T-r,key,T,
17、p); Status InsertBST(BiTree *T,ElemType e) BiTree p,s; if(!SearchBST(*T,e,NULL,&p) s=(BiTree)malloc(sizeof(BiNode); s-data=e; s-l=s-r=NULL; if(!p) *T=s; else if(LT(e,p-data) p-l=s; else p-r=s; return TRUE; else return FALSE;void Delete(BiTree *p) BiTree q,s; if(!(*p)-r) q=(*p);(*p)=(*p)-l; free(q);
18、else if(!(*p)-l)q=(*p);(*p)=(*p)-r; free(q); else /* q=(*p);s=(*p)-l; s=(*p)-l; while(s-r)q=s;s=s-r; (*p)-data=s-data; if(q!=(*p) q-r=s-l; else q-l=s-l; free(s); */ q=s=(*p)-l; while(s-r) s=s-r; s-r=(*p)-r; free(*p); (*p)=q; Status DeleteBST(BiTree *T,KeyType key) if(!(*T) return FALSE; else if(EQ(k
19、ey,(*T)-data) Delete(T); else if(LT(key,(*T)-data) DeleteBST(&(*T)-l),key); else DeleteBST(&(*T)-r),key); return TRUE; void main() BiTree sroot=NULL; int i; int a10=45,23,12,3,33,27,56,90,120,62; system(cls); for(i=0;i10;i+) InsertBST(&sroot,ai); printf(InorderTraverse:n); InOrderTraverse(sroot,prin
20、telem); printf(nNow PreOrdern); PreOrderTraverse(sroot,printelem); printf(nNowPostOrdern); PostOrderTraverse(sroot,printelem);/ for(i=0;i6;i-) DeleteBST(&sroot,ai); printf(nNow sroot has nodes:n); InOrderTraverse(sroot,printelem); printf(nNow PreOrdern); PreOrderTraverse(sroot,printelem); printf(nNo
21、w PostOrdern); PostOrderTraverse(sroot,printelem); 5、排序算法实例.cpp#include#include#include#define MAXSIZE 20#define LT(a,b) (a)=(b)typedef int InfoType;typedef int KeyType;typedef struct KeyType key; InfoType Otherinfo;RedType;typedef struct RedType rMAXSIZE+1; int length;SqList;void InsertSort(SqList
22、*L,int n) int i,j; for(i=1;ilength;+i) if(LT(L-ri.key,L-ri-1.key) L-r0=L-ri; L-ri=L-ri-1; for(j=i-1;LT(L-r0.key,L-rj.key);-j) L-rj+1=L-rj; L-rj+1=L-r0; printf(nThe records be sorted by %d function:n,n); for(i=1;iri.key); /*直接插入排序/void BInsertSort(SqList *L) int i,j; int low,high,m; for(i=2;ilength;+
23、i) L-r0=L-ri; low=1;high=i-1; while(lowr0.key,L-rm.key) high=m-1; else low=m+1; for(j=i-1;j=high+1;-j) L-rj+1=L-rj; L-rhigh+1=L-r0; /*折半插入排序*/int Partition(SqList *L,int low,int high) int pivotkey; L-r0=L-rlow; pivotkey=L-rlow.key; while(lowhigh) while(lowrhigh.key=pivotkey) -high; L-rlow=L-rhigh; while(lowrlow.keyrhigh=L-rlow; L-rlow=L-r0; return low;void QSort(SqList *L,int low,int high) int pivotloc; if(lowhigh) pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1