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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构重点总结.docx

1、数据结构重点总结第一章 绪论数据所有输入计算机中并被计算机处理的符号。数据元素数据的基本单位,通常作为一个整体。数据对象性质相同的数据元素的集合。数据结构数据元素以及之间存在的关系。1 、线性结构;2、集合结构3、树形结构; 4、图结构数据结构的形式定义:Data-Structure=(D,S) D数据元素集合 S关系集合数据的逻辑结构用形式化方式描述数据元素间的关系。数据的物理结构数据在计算机中的具体表示。数据类型一种数据结构和定义在其上的一组操作。可以形式化定义为:Data-Type=(D,S,P)算法的定义 是对特定问题求解步骤的一种描述, 是指令的有限序列。算法的特性有穷性算法必须在执

2、行有穷步之后结束,而且每一步都可在有穷时间内完成。确定性每条指令无二义性。可行性算法中描述的每一操作,都可以通过已经实现的基本运算来实现。输入算法有零至多个输入。输出算法有一个至多个输出。时间复杂度的等级O(1)O(log n)O(n)O(nlog n)O (n2)O (nK)O(Xn )第2章 线性表重点:1、链式和线性表两种方式的插入与删除2、单双链表的定义线性表的定义#define List-Init-Size 100#define Listincrement 10typedef struct Elemtype *elem; int length; int listsize; Sqlis

3、t;线性表定位插入Status Listinsert_Sq(Sqlist &L,int i, Elemtype e) if (iL.length+1) return ERROR; if (L.length=L.listsize) newbase=追加分配新空间 L.elem=newbase; L.listsize+=Listincrement; for (j=L.length-1;j=i-1;-j) L.elemj+1=L.elemj); L.elemi-1=e; +L.length; return OK;线性表定位删除Status Listdelete_Sq(Sqlist &L,int i,

4、 Elemtype &e) if (iL.length) return ERROR; e= L.elemi-1); for (j=i;jL.length;+j) L.elemj-1=L.elemj); -L.length; return OK;单链表定义:typedef struct Lnode Elemtype data; struct Lnode *next; Lnode, *Linklist;链式定位插入Status Listinsert_L(Linklist &L,int i,Elemtype e) p=L; j=0; while (p&jnext;+j if ( !p ji-1) r

5、eturn ERROR; new(s); s-data=e; s-next=p-next; p-next=s; return OK;链式定位删除 Status Listdelete_L(Linklist &L,int i,Elemtype &e) p=L; j=0; while (p-next&jnext; +j if ( !(p-next) ji-1) return ERROR; q= p-next ; p-next=q -next; e=q -data; free(q); return OK;双向链表结点的存储结构定义typedef struct Dublnode Elemtype dat

6、a; struct Dublnode *prior ; struct Dublnode *next ;Dublnode,*Dublinklist ;了解:有序表的合并void Mergelist_L(Linklist &La, Linklist &Lb, Linklist &Lc) pa=La-next; pb=Lb-next; Lc=pc=La; while (pa&pb) if ( pa-datadata) pc-next=pa;pc=pa;pa=pa-next; else pc-next=pb;pc=pb;pb=pb-next; pc-next =pa?pa:pb; free(Lb);

7、第3章、栈与队列重点:1、栈的插入,删除,和取栈顶 2、队列的取对头,插入,删除(循环队列)栈的存储结构定义: #define Stack_init_size 100; #define Stackincrement 10; typedef struct Selemtype *base; 指向第一个元素(有数) Selemtype *top; 指向最后一个元素的下一位(为空) int stacksize; Sqstack;栈的取栈顶Status Gettop(Sqstack s,Selemtype &e) if (s.top=s.base )return ERROR; e=*(s.top-1);

8、 return Ok栈的插入Status Push(Sqstack &s,Selemtype e) if (s.top-s.base=s.stacksize) s.base=追加分配空间; s.stacksize+=Stackincrement; *s.top+=e; return Ok栈的删除栈顶Status Pop(Sqstack &s,Selemtype &e) if (s.top=s.base) return ERROR; e=*-s.top return Ok 队列的顺序存储表示与实现typedef struct Qelemtype *base; int front; 指向第一个元素

9、(有数) int rear; 指向最后一个元素的下一位(为空)Sqqueue;队空条件: Q.front = Q.rear队满条件: (Q.rear+1) % Maxsize= Q.front队列长度:(Q.rear-Q.front+Maxsise)%Maxsize队的插入:Status Enqueue(sqqueue &Q,Qelemtype e) if (Q.rear+1)%Maxsize=Q.front) return ERROR; Q.baseQ.rear=e; Q.rear=(Q.rear+1)%Maxsize; return OK;队的删除Status Dequeue(sqqueu

10、e &Q,Qelemtype &e) if (Q.front = Q.rear ) return ERROR; e=Q.baseQ.front; Q.front=(Q.front+1)%Maxsize; return OK;取对头Status GetHead(sqqueue &Q,Qelemtype &e) if (Q.front = Q.rear ) return ERROR;return Q.baseQ.front;第四章 串重点:串的比较、连接,了解串的插入,删除定义typedef struct char *ch; int length; Hstring ;比较status strcom

11、pare(S,T) for (i=0;iS.length &i=j)或 k=j(j+1)/2+i(i1 则双亲为 parent(i) = i / 2 ; (2) 若 2in 则 i 无孩子,为叶结点 否则 lchild(i)=2 i ; (3) 若 2i+1n 则 i 无右孩子 否则 rchild(i)=2 i+1。遍历的访问顺序有三种:1 先序访问: 根 左子树 右子树2 中序访问: 左子树 根 右子树3 后序访问: 左子树 右子树 根递归遍历:中序Void inorder(bt) if (bt) inorder(bt-lchild); visit(bt-data); inorder(bt-

12、rchild); 先序Void preorder(bt) if (bt) visit(bt-data); preorder(bt-lchild); preorder(bt-rchild); 后序Void postorder(bt) if (bt) postorder(bt-lchild); postorder(bt-rchild); visit(bt-data); 树的存储结构(书上P135) 1 双亲表示法: 用一组连续的空间存放结点,每个结点用一个域表示该结点的双亲. 2 孩子表示法: (1)多叉链表表示法(2)多重线性链表表示法:把每个结点的孩子组成一个线性链表. 3 孩子兄弟表示法:用

13、二叉树的左指针指向该结点的第一个孩子,右指针指向该结点的下一个兄弟.哈夫曼树(最优二叉树)概念路径: 从一结点到另一结点上的分支路径长度: 路径上的分支数目树的路径长度: 从根到所有结点的路径长度之和结点的带权路径长度: 从该结点到树根之间的路径长度与结点上权值的乘积.树的带权路径长度: 树中所有叶子结点的带权路径长度之和.定义: 设有n 个权值 w1,w2,.wn,任意构造有 n 个叶结点的二叉树,每个叶结点权值为wi 。则其中带权路径长度最小的二叉树称为哈夫曼树(最优二叉树)。构造方法 (1) 根据给定的 w1,w2,.wn, 生成 n 棵树的森林, F= T1,T2,.Tm;根结点值为权

14、值; (2) 在 F 中选择两棵根结点值最小的树 Ti ,Tj 作为左右子树,构成一棵新二叉树Tk , Tk根结点值为Ti ,Tj根结点权值之和; (3) 在 F 中删除Ti ,Tj ,并把 Tk 加到 F中; (4) 重复 (2) (3),直到 F中只含一棵树。第7章 图重点:图的定义,数组表示法,邻接表表示法 深度优先遍历,广度优先遍历,生成树图的定义: Graph=(V,E), V为顶点集; E 为边集。 若 E 为有向边,称为有向图; 若 E 为无向边,称为无向图。 边一般由顶点对表示:; 若 为有向边,则称 vi 为尾, vj 为头. 有向边也可以表示为: vi vj 无向完全图:

15、如果在无向图G中,任何两顶点都有一条边相连,边的数目为:n(n-1)/2 有向完全图:如果在有向图G中,任何两顶点都有两条方向相反的边相连,边的数目为:n(n-1) 连通图:无向图中,任意两点 Vi,Vj 都有路径相连,称该无向图为连通图. 连通分量: 无向图中极大连通子图.数组(矩阵)表示法: 设 G=(V,E) V= V1,V2,.Vn Ai,j= 1 若 E , ij0 否则A 为一 nn 矩阵,称为 G 的邻接矩阵若 G=(V,E) 为网,则邻接矩阵可以表示为:数组表示法定义:#define Max_V_num 20 /最大顶点数typedef enum DG,DN,UDG,UDN G

16、raphkind; /有向无向图网 typedef struct / 图结构 Vextype vexsMax_V_num; / 顶点数组 Arctype arcsMax_V_num Max_V_num; /边矩阵 /0,1或权值wij int vexnum,arcnum; /顶点数,边数 Graphkind kind; /图种类 graph邻接表表示法: 每个顶点用一个链表表示(P164)#define Max_V_num 20 /最大顶点数typedef struct Arcnode /边结点类型 int vjpos; /vj的位置 struct Arcnode *nextarc; Arcn

17、ode;typedef struct Vnode /顶点结点类型 vextype data; Arcnode *firsttarc; Vnode,AdjlistMax_V_num ;typedef struct Adjlist vexs; int vexnum,arcnum; Graphkind kind; graph十字链表:用来表示有向图. 有向图中,每一条边用一个结点表示,每个顶点也用一个结点表示.(了解)深度优先遍历( dfs) 算法思想: 1) 访问给定结点; 2) 重复对第一个未被访问的邻接点进行深度优先遍历,直到不存在未被访问的邻接点结束.可以用一个数组标识顶点是否被访问过.vo

18、id DFStraverse(Graph G) for (v=0;vG.vexnum;+v) visitedv=FALSE; for (v=0;vG.vexnum;+v) /保证非连通图的遍历 if (!visitedv) DFS(G,v);void DFS(Graph G,int v) /连通图的遍历 visit(v);visitedv=TRUE; for (w= First_Adj(G,V);w;w=Next_Adj(G,v,w) if (!visitedw) DFS(G,w);广度优先遍历( bfs) 算法思想: 1) 访问给定结点v; 2) 由近至远,依次访问和 v 有路径相连且长度为

19、 1,2,3.的顶点.可以用一个数组标识顶点是否被访问过.用一个队列存放刚访问过的结点.void BFStraverse(Graph G) for (v=0;vG.vexnum;+v) visitedv=FALSE; iniqueue(Q); /建立空队列Q for (v=0;vG.vexnum;+v) /保证非连通图的遍历 if (!visitedv) visit(v);visitedv=TRUE;Enqueue(Q,v); /入队 while(!Queueempty(Q) Dequeue(Q,u); /出队 for (w= First_Adj(G,u);w;w=Next_Adj(G,u,w

20、) if (!visitedw) visit(w);visitedw=TRUE;Enqueue(Q,w); /再入队 例如: 深度优先遍历: a b d h e c f g广度优先遍历: a b c d e f g h 生成树:一个连通图的生成树是由 n-1 条边且包含 G 的所有顶点的树组成. 可按深度或广度优先遍历来创建生成树. 最小生成树:对具有 n 个结点的网,如何选择 n-1 条边构成的生成树,其权值和最小.权值 和最小的生成树即为最小生成树.最小生成树的性质(MST): 假设 N=(V,E) 是连通网,U V若 是一条具有最小权值的边,uU,v V-U,则必然存在一棵包含边 的最小

21、生成树.prim 算法: 1 设U=u0,T= ; 2 重复执行如下操作: 在所有 uU,v V-U的边 E中找一条代价最小的边 ,并入 T中, U=U+v,直到 U=V 或 T 中有n-1条边.kruscal 算法:(结果也如上图) 1 设 G=(V,E);T=(v, ); 2 从 E中选一条最小权值的边,并从 E 中消除此边 3 若 属于T中不同的连通分量,则将加入到 T 中,重复 2 ,直到T 中有n-1条边.最短路径:设V0,V1,V2,.Vn -1为n个顶点序列,求V0到各顶点的最短路径. Dijkstra 算法: 令 disti 表示已经求出的 v0 到 vi 的最短路径,S 表示

22、已求出最短路径的顶点. 1)令 distv0 =0; disti= | i v0 ;S=v0; 2)求下一条最短路径: distj=Mindisti+costi,k | viS,vk V-S 3)令 S=S+vj; 重复2) 直到 S=V. Dijkstra 算法的中心思想是采用路径长度递增产生最短路径.第8章 查找重点:折半查找,了解顺序、索引查找, 二叉排序树的插入删除(算法思路) 哈希表元素类型定义:typedef struct keytype key; 其它域定义elemtype顺序存储结构 typedef struct elemtype *elem; int length; SSta

23、ble顺序查找算法 int search(SStable ST,key) ST.elem0.key=key; /0 位置本身为空单元 for(i=ST.length;!EQ(ST.elemi.key,key);- -i); return i; /若存在返回在静态表中的位置 i ,否则 i=0折半查找( 1 ) 折半查找思想 ( 2 )折半查找算法 int search(SStable ST,key) low=1; high=ST.length; while (low左子树任意结点的值小于根结点值; 2右子树任意结点的值大于根结点值; 3左右子树仍然为二叉排序树.查找:Status SearchBST(BTree T ,keytype key, BTree f, BTree &p)/ f 为 T的父结点, /p 返回查找到的结点或/未查找到的叶结点(待插入的位置) if (!T) p=f;return False; else if EQ(key,T-

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

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