ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:25.10KB ,
资源ID:10774626      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10774626.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构笔记 含代码.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构笔记 含代码.docx

1、数据结构笔记 含代码1.二分查找的算法: int BinSearch(LineList R,int n,KeyType k) int i,low=0,high=n-1,mid; int find=0; while (low=high & !find) mid=(low+high)/2; if (kRmid.key) low=mid+1; else i=mid; find=1; if (find=0) return(-1); else return(i); 2.分块查找的算法: int BlkSearch(LineList R,IDXType idx,int m,KeyType k) int l

2、ow=0,high=m-1,mid,i,j,find=0; while (low=high & !find) mid=(low+high)/2; if (kidxmid.key) low=mid+1; else high=mid-1; find=1; if (lowm) i=idxlow.low; j=idxlow.high; while (i=j) return (-1); else return (i); 3.二叉排序树的类型定义 typedef struct tnode KeyType key; ElemType data; struct tnode *lchild,*rchild; B

3、STNode;4.二叉排序树的基本运算如下 1.查找结点 BSTNode *BSTSearch(BSTNode *bt,KeyType k) BSTNode *p=bt; while (p!=NULL & p-key!=k) if(kkey) p=p-lchild; else p=p-rchild; return (p); 2.插入结点BSTInsert(bt,k) int BSTInsert(BSTNode *&bt,KeyNode k) BSTNode *f,*p=bt; while(p!=NULL) if(p-key=k) return(0); f=p; if(p-keyk) p=p-l

4、child; else p=p-rchild; p=(BSTNode *)malloc(sizeof(BSTNode); p-key=k; p-lchild=p-rchild=NULL; if (bt=NULL) bt=p; else if(kkey) f-lchild=p; return(1); 3.创建二叉排序树CreateBST(bt,str,n) void CreateBST(BSTNode *&bt,KeyType str,int n) bt=NULL; int i=0; while(in) BSTInsert(bt,stri); i+; 4.输出二叉排序树 void DispBST

5、(BSTNode *bt) if (bt!=NULL) coutkey; if (bt-lchild!=NULL | bt-rchild!=NULL) coutlchild); if(bt-rchild!=NULL) coutrchild); cout); 1.插入排序: void InsertSort(SqList R,int n) int i,j; SqList tmp; for (i=1;i=0 & tmp.key0) for(i=gap;i=0 & tmp.keyRj.key) Rj+gap=Rj; j=j-gap; Rj+gap=tmp; j=j-gap; gap=gap/2; 3.

6、选择排序 void SelectSort(SqList R,int n) int i,j,k; SqList tmp; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(Rj.key=1;i-) Sift(R,i,n); for(i=n;i=2;i-) tmp=Ri; R1=Ri; Ri=tmp; Sift(R,1,i-1); void Sift(SqList R,int low,int high) int i=low,j=2*i; SqList tmp=Ri; while (j=high) if(jhigh & Rj.keyRj+1.key) j+; if

7、(tmp.keyRj.key) Ri=Rj; i=j; j=2*i; else break; Ri=tmp; 5.冒泡排序 void BubbleSort(SqList R,int n) int i,j,exchange; SqList tmp; for(i=0;ii;j-) if(Rj.keyRj-1.key) tmp=Rj; Rj=Rj-1; Rj-1=tmp; exchange=1; if(exchange=0) return; 6.快速排序 void QuickSort(SqList R,int s,int t) int i=s,j=t; SqList tmp; if (si & Rj

8、.keytmp.key) j-; if (ij) Ri=Rj; i+; while(ij & Ri.keytmp.key) i+; if(ij) Rj=Ri; j-; Ri=tmp; QuickSort(R,s,i-1); QuickSort(R,i+1,t); 7.二路归并排序 void MergeSort(SqList R,int n) int length; for(length=1;lengthn;length=2*length) MergePass(R,length,n); void MergePass(SqList R,int length,int n) int i; for(i=

9、0;i+2*length-1n;i=i+2*length) Merge(R,i,i+length-1,i+2*length-1); if(i+length-1n) Merge(R,i,i+length-1,n-1); void Merge(SqList R,int low,int mid,int high) SqList *R1; int i=low,j=mid+1,k=0; R1=(SqList *)malloc(high-low+1)*sizeof(SqList); while (i=mid & j=high) if(Ri.key=Rj.key) R1k=Ri; i+;k+; else R

10、1k=Rj; j+;k+; while(i=mid) R1k=Ri; i+;k+; while(j=high) R1k=Rj; j+;k+; for(k=0,i=low;i=0;i-) for(j=0;jr;j+) headj=tailj=NULL; while (p!=NULL) k=p-datai-0; if(headk=NULL) headk=p; tailk=p; else tailk-next=p; tailk=p; p=p-next; p=NULL; for(j=0;jnext=headj; t=tailj; t-next=NULL; 1.树的定义: 树包含n个结点,当n=0时,称

11、为空树。树的定义如下: T=(D,R) 其中,D为树中结点的有限集合,关系R满足一下条件: 1.有且仅有一个结点k0属于D,它对于关系R来说没有前趋结点,结点k0称作树的根结点。 2.除根结点k0外,D中的每个结点有且仅有一个前趋结点,但可以由多个后继结点。 3.D中可以有多个终端结点。2.树的基本术语 1.结点的度:树中每个结点具有的子树个数或者后继结点个数称为该结点的度。 2.树的度:树中所有结点的度的最大值称之为树的度。 3.分支结点:度大于0的结点称为分支结点或非终端结点。 4.叶子结点:度为0的结点称为叶子结点或终端结点。 5.孩子结点:一个结点的后继称之为该结点的孩子结点。 6.双

12、亲结点:一个结点称为其后继结点的双亲结点。 7.子孙结点:一个结点的所有子树中的结点称之为该结点的子孙结点。 8.祖先结点:从树根结点到达某个结点的路径上通过的所有结点称为该结点的祖先结点。 9.兄弟结点:具有同一双亲的结点互相称之为兄弟结点。 10.结点层数:树具有一种层次结构,根结点为第一层,其孩子结点为第二层,如此类推得到每个结点的层数。 11.树的深度:树中结点的最大层数称为树的深度或高度。 12.有序树和无序树:如果一棵树中各结点的各子树从左到右是有次序的,即若交换了某结点各子树的相对位置则构成了不同的树,那么称这棵树为有序树,反之则为无序树。 13.森林:0个或多个不相交的树的集合

13、称为森林。3.二叉树的定义:二叉树是指树的度为2的有序树。4.二叉树的性质: 二叉树上叶子结点数等于度为2的结点数加1。 二叉树上第i层上至多有2的(i-1)次方个结点。 深度为h的二叉树至多有2的h次方-1个结点。 对完全二叉树中编号为i(1=i=1,n为结点数)的结点有: 1.若2idata=ch;p-lchild=p-rchild=NULL; if (bt=NULL) bt=p; else switch(k) case 1:Sttop-lchild=p;break; case 2:Sttop-rchild=p;break; j+; ch=strj; 2.求二叉树的高度运算算法: int

14、BTHeight(BTNode *bt) int lchilddep,rchilddep; if (bt=NULL) return(0); else lchilddep=BTHeight(bt-lchild); rchilddep=BTHeight(bt-rchild); return(lchilddeprchilddep)?(lchilddep+1):(rchilddep+1); 3.求二叉树结点个数运算算法 int NodeCount(BTNode *bt) int num1,num2; if (bt=NULL) return 0; else num1=NodeCount(bt-lchil

15、d); num2=NodeCount(bt-rchild); return (num1+num2+1); 4.求二叉树叶子结点个数运算算法 int LeafCount(BTNode *bt) int num1,num2; if (bt=NULL) return 0; else if(btlchild=NULL & bt-rchild=NULL) return 1; else num1=LeafCount(bt-lchild); num2=LeafCount(bt-rchild); return (num1+num2); 5.以括号表示法输出二叉树运算算法 过程:对于非空二叉树bt,先输出其元素

16、值,当存在左孩子结点或右孩子结点时,输出一个“(”符号,然后递归处理左子树,输出一个“,”符号,递归处理右子树,最后输出一个“)”符号。 void DispBTree (BTNode *bt) if (bt!=NULL) coutdata; if (bt-lchild!=NULL | btrchild!=NULL) coutlchild); if (bt-rchild!=NULL) coutrchild); cout-1) p=Sttop; /退栈并凹入显示该结点值 n=Leveltop0; switch(Leveltop1) case 0:type=L;break; /左节点之后输出(L)

17、case 1:type=R;break; /右结点之后输出(R) case 2:type=B;break; /根结点之后输出(B) for (i=1;i=n;i+) /其中n为显示长宽,字符以右对其显示 cout ; coutdata(type); for (i=n+1;i=MaxWidth;i+=2) cout-; coutrchild!=NULL) /将右子树根结点入栈 top+; Sttop=p-rchild; Leveltop0=n+width; /长宽增width,即缩width格后再输出 Leveltop1=1; if (p-lchild!=NULL) /将左子树根结点入栈 top

18、+; Sttop=p-lchild; Leveltop0=n+width; /显示长宽增width Leveltop1=0; /0表示是左子树 8.二叉树遍历: 1.先序遍历 1.访问根结点 2.先序遍历左子树 3.先序遍历右子树 void PreOrder(BTNode *bt) if (bt!=NULL) coutdata; PreOrder(bt-lchild); PreOrder(bt-rchild); 采用先序遍历得到的访问结点序列称为先序遍历序列,先序编列的特点是:其第一个元素值为二叉树中跟结点的数据值 2.中序遍历 1.中序遍历左子树 2.访问根结点 3.中序遍历右子树 void

19、 InOrder (BTNode *bt) if (bt!=NULL) InOrder (bt-lchild); coutdata; InOrder(bt-rchild); 采用中序遍历得到的访问结点序列成为中序遍历序列,中序遍历序列的特点是:若已知二叉树的根结点数值,以该数据值为界,将中序遍历序列分为两部分,前半部分为左子树的中序遍历序列,后半部分为右子树的中序遍历序列。 3.后序遍历 1.后序遍历左子树 2.后序遍历右子树 3.访问根结点 void PostOrder(BTNode *bt) if(bt!=NULL) PostOrder(bt-lchild); PostOrder(bt-rchild); coutdata; 特点是最后一个元素值为二叉树中根结点的数据值9.假设以二叉链作为储存结构,设计一个算法求二叉树的宽度。宽度是指二叉树中各层上具有结点个数最多的那一层上的结点总数 先采用先序遍历求出每层的宽度,放在a数组中,然后再求出最大宽度即二叉树的宽度 void

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

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