数据结构指导书附源代码.docx

上传人:b****7 文档编号:9392424 上传时间:2023-02-04 格式:DOCX 页数:71 大小:28.20KB
下载 相关 举报
数据结构指导书附源代码.docx_第1页
第1页 / 共71页
数据结构指导书附源代码.docx_第2页
第2页 / 共71页
数据结构指导书附源代码.docx_第3页
第3页 / 共71页
数据结构指导书附源代码.docx_第4页
第4页 / 共71页
数据结构指导书附源代码.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

数据结构指导书附源代码.docx

《数据结构指导书附源代码.docx》由会员分享,可在线阅读,更多相关《数据结构指导书附源代码.docx(71页珍藏版)》请在冰豆网上搜索。

数据结构指导书附源代码.docx

数据结构指导书附源代码

1、计算二叉树叶子节点数.cpp

#include

#include

typedefstructBitree{intdata;Bitree*lchild,*rchild;}BiNode;

BiNode*root;

intsum=0;intm=sizeof(Bitree);

voidinsert_data(intx)

{

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(p->data==x)

{printf("dataalreadyexist!

\n");return;}

elseif(xdata)p=p->rchild;

elsep=p->rchild;

}

if(xdata)q->lchild=s;

elseq->rchild=s;

}

DLR(Bitree*root)

{

if(root!

=NULL)

{if((root->lchild==NULL)&&(root->rchild==NULL))

{sum++;

printf("%d\n",root->data);

}

DLR(root->lchild);

DLR(root->rchild);

}

return0;

}

main()

{

inti=1,x;

root=NULL;

do{

printf("pleaseinputdata%d\n",i);

i++;

scanf("%d",&x);

if(x==-9999)

{

DLR(root);

printf("\nNowoutputcountvalue:

%d\n",sum);

return0;

}

elseinsert_data(x);

}while(x!

=-9999);

return(0);

}

2、二叉排序树及遍历.cpp

#include

#include

#include

#defineERROR0;

#defineFALSE0;

#defineOK1;

#defineTRUE1;

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<(b))

#defineLQ(a,b)((a)<=(b))

typedefintElemType;

typedefintStatus;

typedefintKeyType;

typedefstructBinaryTree

{

intdata;

structBinaryTree*l;

structBinaryTree*r;

}*BiTree,BiNode;

StatusPreOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(Visit(T->data))

if(PreOrderTraverse(T->l,Visit))

if(PreOrderTraverse(T->r,Visit))returnOK;

returnERROR;

}

elsereturnOK;

}

StatusPostOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(PostOrderTraverse(T->l,Visit))

if(PostOrderTraverse(T->r,Visit))

if(Visit(T->data))returnOK;

returnERROR;

}

elsereturn1;

}

Statusprintelem(intd)

{

printf("%4d",d);

returnOK;

}

StatusInOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(InOrderTraverse(T->l,Visit))

if(Visit(T->data))

if(InOrderTraverse(T->r,Visit))returnOK;

returnERROR;

}

elsereturnOK;

}

StatusSearchBST(BiTreeT,KeyTypekey,BiTreef,BiTree*p)

{

if(!

T){*p=f;returnFALSE;}

elseifEQ(key,T->data){*p=T;returnTRUE;}

elseifLT(key,T->data)SearchBST(T->l,key,T,p);

elseSearchBST(T->r,key,T,p);

}

StatusInsertBST(BiTree*T,ElemTypee)

{

BiTreep,s;

if(!

SearchBST(*T,e,NULL,&p))

{

s=(BiTree)malloc(sizeof(BiNode));

s->data=e;

s->l=s->r=NULL;

if(!

p)*T=s;

elseif(LT(e,p->data))p->l=s;

elsep->r=s;

returnTRUE;

}

elsereturnFALSE;

}

voidDelete(BiTree*p)

{

BiTreeq,s;

if(!

(*p)->r){q=(*p);(*p)=(*p)->l;free(q);}

elseif(!

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

elseq->l=s->l;

free(s);

*/

q=s=(*p)->l;

while(s->r)s=s->r;

s->r=(*p)->r;

free(*p);

(*p)=q;

}

}

StatusDeleteBST(BiTree*T,KeyTypekey)

{

if(!

(*T)){returnFALSE;}

else{

if(EQ(key,(*T)->data))Delete(T);

elseif(LT(key,(*T)->data))DeleteBST(&((*T)->l),key);

elseDeleteBST(&((*T)->r),key);

returnTRUE;

}

}

voidmain()

{

BiTreesroot=NULL;

inti;

inta[10]={45,23,12,3,33,27,56,90,120,62};

system("cls");

for(i=0;i<10;i++){InsertBST(&sroot,a[i]);}

printf("InorderTraverse:

\n");

InOrderTraverse(sroot,printelem);

printf("\nNowPreOrder\n");

PreOrderTraverse(sroot,printelem);

printf("\nNowPostOrder\n");

PostOrderTraverse(sroot,printelem);

for(i=0;i<3;i++)DeleteBST(&sroot,a[i]);

printf("\nNowsroothasnodes:

\n");

InOrderTraverse(sroot,printelem);

printf("\nNowPreOrder\n");

PreOrderTraverse(sroot,printelem);

printf("\nNowPostOrder\n");

PostOrderTraverse(sroot,printelem);

}

3、查找.cpp

#include

#include

typedefintKeyType;

typedefstruct{

KeyTypekey;

intmaths,english;

}ElemType;

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<(b))

#defineLQ(a,b)((a)>=(b))

typedefstruct{

ElemType*elem;

intlength;

}SSTable;

intSearch_Seq(SSTableST,KeyTypekey)

{

inti;

ST.elem[0].key=key;

for(i=ST.length;!

EQ(ST.elem[i].key,key);--i);

returni;

}

intSearch_Bin(SSTableST,KeyTypekey)

{

intlow,mid,high;

low=1;

high=ST.length;

while(low<=high)

{

mid=(low+high)/2;

ifEQ(key,ST.elem[mid].key)returnmid;

elseifLT(key,ST.elem[mid].key)high=mid-1;

elselow=mid+1;

}

}

getdata(SSTable*t)

{

FILE*fp;

inti=1;

fp=fopen("stu.txt","r");

fscanf(fp,"%d",&(t->length));

while(i<=t->length)

{

fscanf(fp,"%d%d%d",&(t->elem[i].key),&(t->elem[i].maths),&(t->elem[i].english));

i++;

}

fclose(fp);

}

main()

{

ElemTypestu[50];

SSTableclass1;

inti,j,k;

longtime;

class1.elem=stu;

getdata(&class1);

printf("Thisclasshas%dstudents.\n",class1.length);

printf("InputstuNoyouwantsearch:

\n");

scanf("%d",&k);

i=Search_Seq(class1,k);

j=Search_Bin(class1,k);

printf("NowuseSearch_Seq:

\n");

printf("MathsEnglish\n");

printf("%d%d\n",class1.elem[i].maths,class1.elem[i].english);

printf("\n");

printf("NowuseSearch_Bin:

\n");

printf("MathsEnglish\n");

printf("%d%d\n",class1.elem[j].maths,class1.elem[j].english);

}

Stu.txt

6

18930

25688

35777

48999

59633

68895

4、二叉排序树的查找算法.cpp

#include

#include

#include

#defineERROR0;

#defineFALSE0;

#defineOK1;

#defineTRUE1;

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<(b))

#defineLQ(a,b)((a)<=(b))

typedefintElemType;

typedefintStatus;

typedefintKeyType;

typedefstructBinaryTree

{

intdata;

structBinaryTree*l;

structBinaryTree*r;

}*BiTree,BiNode;

StatusPreOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(Visit(T->data))

if(PreOrderTraverse(T->l,Visit))

if(PreOrderTraverse(T->r,Visit))returnOK;

returnERROR;

}

elsereturnOK;

}

StatusPostOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(PostOrderTraverse(T->l,Visit))

if(PostOrderTraverse(T->r,Visit))

if(Visit(T->data))returnOK;

returnERROR;

}

elsereturn1;

}

Statusprintelem(intd)

{

printf("%4d",d);

returnOK;

}

StatusInOrderTraverse(BiTreeT,int(*Visit)(intd))

{

if(T){

if(InOrderTraverse(T->l,Visit))

if(Visit(T->data))

if(InOrderTraverse(T->r,Visit))returnOK;

returnERROR;

}

elsereturnOK;

}

StatusSearchBST(BiTreeT,KeyTypekey,BiTreef,BiTree*p)

{

if(!

T){*p=f;returnFALSE;}

elseifEQ(key,T->data){*p=T;returnTRUE;}

elseifLT(key,T->data)SearchBST(T->l,key,T,p);

elseSearchBST(T->r,key,T,p);

}

StatusInsertBST(BiTree*T,ElemTypee)

{

BiTreep,s;

if(!

SearchBST(*T,e,NULL,&p))

{

s=(BiTree)malloc(sizeof(BiNode));

s->data=e;

s->l=s->r=NULL;

if(!

p)*T=s;

elseif(LT(e,p->data))p->l=s;

elsep->r=s;

returnTRUE;

}

elsereturnFALSE;

}

voidDelete(BiTree*p)

{

BiTreeq,s;

if(!

(*p)->r){q=(*p);(*p)=(*p)->l;free(q);}

elseif(!

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

elseq->l=s->l;

free(s);

*/

q=s=(*p)->l;

while(s->r)s=s->r;

s->r=(*p)->r;

free(*p);

(*p)=q;

}

}

StatusDeleteBST(BiTree*T,KeyTypekey)

{

if(!

(*T)){returnFALSE;}

else{

if(EQ(key,(*T)->data))Delete(T);

elseif(LT(key,(*T)->data))DeleteBST(&((*T)->l),key);

elseDeleteBST(&((*T)->r),key);

returnTRUE;

}

}

voidmain()

{

BiTreesroot=NULL;

inti;

inta[10]={45,23,12,3,33,27,56,90,120,62};

system("cls");

for(i=0;i<10;i++){InsertBST(&sroot,a[i]);}

printf("InorderTraverse:

\n");

InOrderTraverse(sroot,printelem);

printf("\nNowPreOrder\n");

PreOrderTraverse(sroot,printelem);

printf("\nNowPostOrder\n");

PostOrderTraverse(sroot,printelem);

//for(i=0;i<3;i++)

for(i=9;i>6;i--)

DeleteBST(&sroot,a[i]);

printf("\nNowsroothasnodes:

\n");

InOrderTraverse(sroot,printelem);

printf("\nNowPreOrder\n");

PreOrderTraverse(sroot,printelem);

printf("\nNowPostOrder\n");

PostOrderTraverse(sroot,printelem);

}

5、排序算法实例.cpp

#include

#include

#include

#defineMAXSIZE20

#defineLT(a,b)((a)<=(b))

typedefintInfoType;

typedefintKeyType;

typedefstruct{

KeyTypekey;

InfoTypeOtherinfo;

}RedType;

typedefstruct

{

RedTyper[MAXSIZE+1];

intlength;

}SqList;

voidInsertSort(SqList*L,intn)

{

inti,j;

for(i=1;i<=L->length;++i)

if(LT(L->r[i].key,L->r[i-1].key))

{L->r[0]=L->r[i];

L->r[i]=L->r[i-1];

for(j=i-1;LT(L->r[0].key,L->r[j].key);--j)

L->r[j+1]=L->r[j];

L->r[j+1]=L->r[0];

}

printf("\nTherecordsbesortedby%dfunction:

\n",n);

for(i=1;i<11;i++)printf("%4d",L->r[i].key);

}///*************************************************************直接插入排序//

voidBInsertSort(SqList*L)

{

inti,j;

intlow,high,m;

for(i=2;i<=L->length;++i)

{

L->r[0]=L->r[i];

low=1;high=i-1;

while(low<=high)

{

m=(low+high)/2;

if(LT(L->r[0].key,L->r[m].key))

high=m-1;

elselow=m+1;

}

for(j=i-1;j>=high+1;--j)

L->r[j+1]=L->r[j];

L->r[high+1]=L->r[0];

}

}//*************************************************************折半插入排序*//

intPartition(SqList*L,intlow,inthigh)

{

intpivotkey;

L->r[0]=L->r[low];

pivotkey=L->r[low].key;

while(low

{

while(lowr[high].key>=pivotkey)--high;

L->r[low]=L->r[high];

while(lowr[low].key<=pivotkey)++low;

L->r[high]=L->r[low];

}

L->r[low]=L->r[0];

returnlow;

}

voidQSort(SqList*L,intlow,inthigh)

{

intpivotloc;

if(low

{

pivotloc=Partition(L,low,high);

QSort(L,low,pivotloc-1)

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

当前位置:首页 > 高等教育 > 文学

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

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