数据结构指导书附源代码.docx
- 文档编号:9392424
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:71
- 大小:28.20KB
数据结构指导书附源代码.docx
《数据结构指导书附源代码.docx》由会员分享,可在线阅读,更多相关《数据结构指导书附源代码.docx(71页珍藏版)》请在冰豆网上搜索。
数据结构指导书附源代码
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(x
elsep=p->rchild;
}
if(x
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(low L->r[low]=L->r[high]; while(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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 指导书 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)