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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构讲义Word格式.docx

1、 森林和二叉树的转换(A) 遍历树和森林(A)7. 图图的有关概念熟练掌握图的各种存储结构图的遍历:深度优先、广度优先(A)最小生成树算法(两个)及其特点(A)拓扑排序(A)关键路径算法(A)最短路径算法(两个)(A,O:时间复杂度)8. 查找表查找的有关概念,ASL等顺序查找(A,P)熟练掌握有序表的折半查找算法(A,P,C)了解索引顺序表熟练掌握二叉排序树的概念,建立(A),查找(A,P),删除(A),计算ASL(C)平衡二叉排序树的概念,建立(A),判断失去平衡的类型,平衡化(A),计算ASL(C)了解B_树,B+树的概念和特点知道键树(数字查找树)哈希表的概念、特点、构造哈希表(A),

2、计算ASL和装填因子(C)了解各种查找表的性能(O)9. 内部排序直接插入排序(A)折半插入排序(A,P)希尔排序(A)起泡排序(A)快速排序(A,P,O)简单选择排序(P,A,O)堆的概念,调整成堆(A),堆排序(A,O)归并排序(A,O)链式基数排序(A,O)各种排序算法的对比结论(O)第2章 绪论一、基础知识概念和术语(黑体字部分)。另外,注意:1、数据元素是数据的基本单位。P42、数据项是数据不可分割的最小单位。P53、数据结构及其形式定义。 四种基本结构:集合线性结构树形结构图(网)状结构4、数据结构的 逻辑结构(抽象的,与实现无关) 物理结构(存储结构) 顺序映像(顺序存储结构)位

3、置“相邻” 非顺序映像(链式存储结构)指针表示关系P65、数据类型 P7 抽象数据类型(ADT)P7 ADT=(数据对象,数据关系,基本操作) ADT细分为原子类型,固定聚合,可变聚合类型。P86、算法的概念 P137、算法的五个特征 有穷性 确定性 可行性 输入(0个或多个) 输出(1个或多个)8、算法设计的要求:正确性可读性健壮性效率与低存储量 其中正确性的四个层次(通常要求达到C层)。9、算法的时间复杂度 P15 常见有: O(1),O(n),O(n2),O(log2n),O(n log2n),O(2n) 语句频度,用归纳法计算。10、算法的空间复杂度 P17二、算法起泡排序。P16另一

4、种形式void BubbleSort ( DataType a, int n ) for ( i=0; in-1; i+ ) for ( j=0; jaj+1 ) ajaj+1;或 for ( i=1;n;n-i; if( aj i+ ) change = fasle;aj+1 ) change = true; if ( !change ) break;说明:a) 考试中要求写算法时,可用类C,也可用C程序。b) 尽量书写算法说明,言简意赅。c) 技巧:用“边界值验证法”检查下标越界错误。 如上第一个: 第二个循环条件若写作jn-i,则当i=0时 aj+1会越界。d) 时间复杂度为O(n2),

5、第3个在最好情况下(待排记录有序),时间复杂度为O(n)。三、习题1.1 编写冒泡排序算法,使结果从大到小排列。1.2 计算下面语句段中指定语句的频度: 1) for ( i=1;=n; for ( j=i; x+; / 2) i = 1; while ( i=n ) i = i*2;第3章 线性表一、基础知识和算法线性表及其特点 线性表是n个数据元素的有限序列。 线性结构的特点: “第一个” “最后一个” 前驱 后继。1. 顺序表线性表的顺序存储结构特点a) 逻辑上相邻的元素在物理位置上相邻。b) 随机访问。类型定义简而言之,“数组+长度”。const int MAXSIZE = 线性表最大

6、长度;typedef struct DataType elemMAXSIZE; int length; SqList;注:a) SqList为类型名,可换用其他写法。 b) DataType是数据元素的类型,根据需要确定。 c) MAXSIZE根据需要确定。如 const int MAXSIZE=64; d) 课本上的SqList类型可在需要时增加存储空间,在上面这种定义下不可以。(这样做避免了动态内存分配,明显减少了算法的复杂程度,容易理解。而且,原来Pascal版本的数据结构(严蔚敏)就是这样做的。) e) 课本上的SqList类型定义中listsize表示已经分配的空间大小(容纳数据元素

7、的个数)。当插入元素而遇到L.length=L.listsize时,用realloc (L.elem, L.listsize+增量) 重新分配内存,而realloc()函数在必要的时候自动复制原来的元素到新分配的空间中。基本形态顺序表空0L.lengthMAXSIZE条件 L.length=0不允许删除操作顺序表满条件 L.length=MAXSIZE不允许插入操作不空也不满可以插入,删除基本算法遍历顺序访问所有元素for ( i=0;L.length; visit ( L.elemi );查找元素x if ( L.elemi=x ) break;if ( iL.length ) 找到;els

8、e 未找到;插入算法 ListInsert(&L,i,x)前提:表不满合理的插入范围:1iL.length+1位序i在C/C+中对应于下标i-1。步骤 第i至最后所有元素后移一个元素 在第i个位置插入元素x 表长增1算法bool ListInsert ( SqList& L, int i, DataType x ) if ( L.length=MAXSIZE | iL.length+1 ) return false; / 失败 / 元素后移 for ( j=L.length-1; j=i-1; j- ) / 这里j为下标,从L.length-1到i-1 L.elemj+1 = L.elemj;

9、 / 若作为位序,有如何修改? / 插入x L.elemi-1 = x; / 表长增1 L.length+; return true; / 插入成功删除算法 ListDelete(&L,i,&x)表非空合理的删除范围:1iL.length取出第i个元素第i个元素之后的元素向前移动一个位置表长减1bool ListDelete ( SqList& L, int i, DataType& x ) if ( L.length=0 | inext = 0单链表不空L-next != 0基本算法 (遍历)借助指针,“顺藤摸瓜”(沿着链表访问结点)。p = L-next; / 注意起始位置的考虑while

10、 ( p!=NULL ) / 判表尾,另外 (p!=0)或(p)均可 visit( p-data ); / 访问:可以换成各种操作 p = p- / 指针沿着链表向后移动例:打印单链表中的数据。void PrintLinkList ( LinkList L ) p = L- while ( p!=NULL ) print ( p- / 访问:打印数据域/ 在单链表L中查找元素x/ 若找到,返回指向该结点的指针;否则返回空指针LinkList Find ( LinkList L, DataType x ) if ( p-data = x ) return p; / 找到x return NULL

11、; / 未找到/ 若找到,返回该元素的位序;否则返回0int Find ( LinkList L, DataType x ) j = 1;data = x ) return j; j+; / 计数器随指针改变 return 0;前一个算法的另一种写法:while ( p & p-data!=x )if ( p &data=x ) return p;else return 0;或者=x ) p = p-return p; / 为什么查找第i个元素LinkList Get ( LinkList L, int i ) while ( p &i ) if ( p & j=i ) return p; e

12、lse return 0;查找第i-1个元素p = L; j = 0;i-1 ) j=i-1 ) return p;技巧:画图辅助分析。思路: 先查找第i-1个元素 若找到,在其后插入新结点bool ListInsert ( LinkList &L, int i, DataType x ) / 查找第i-1个元素p p = L; / 若找到,在p后插入x j=i-1 ) s = (LinkList) malloc(sizeof(LNode); s-data = x;next = p- / next = s; / else return false; / 插入失败注意: a) 要让p指向第i-1

13、个而不是第i个元素(否则,不容易找到前驱以便插入)。 b) 能够插入的条件: p & j=i-1 。即使第i个元素不存在,只要存在第i-1个元素,仍然可以插入第i个元素。 c) 新建结点时需要动态分配内存。 若检查是否分配成功,可用 if ( s=NULL ) exit(1); / 分配失败则终止程序 d) 完成插入的步骤:。先修改新结点的指针域。 若找到且其后存在第i个元素,则用x返回数据,并删除之bool ListDelete ( LinkList &L, int i, int &x ) /若存在第i个元素,则用x返回数据,并删除之 j=i-1 &next ) / 可以删除 s = p-n

14、ext = s- x = s-data; free (s); a) 要求p找到第i-1个而非第i个元素。为什么? b) 能够进行删除的条件:next 。条件中的p-next就是要保证第i个元素存在,否则无法删除。若写成p-next & j=i-1也不妥,因为此时(循环结束时)可能有p=NULL,所以必须先确定p不空。将条件中的“大前提”放在前面。该条件也不可以写成p- j=i-1,因为先有p!=0才有p-next,上式颠倒了这一关系。 c) 释放结点的方法。 free(s); d) 完成删除的步骤:建立链表的两种方法 建立空表(头结点); 依次插入数据结点(每次插入表尾得(a1,a2,an),

15、每次插入表头得(an,a2,a1)。顺序建表void CreateLinkList ( LinkList &L, int n) / 建立空表 L = (LinkList) malloc(sizeof(LNode);next = NULL; / 空表 / 用p指向表尾 / 插入元素 scanf ( x ); / 插入表尾 p = s; / 新的表尾逆序建表 / 空表 / 插入表头next = L-3. 循环链表最后一个结点的指针指向头结点。L同单链表。空表:next = L。非空表。与单链表的联系判断表尾的方法不同:单链表用p=NULL;循环链表用p=L。其余操作相同。4. 双向循环链表一个结点

16、包含指向后继(next)和指向前驱(prior)两个指针,两个方向又分别构成循环链表。typedef struct DuLNode struct DuLNode *prior, *next; / 两个指针 DuLNode, *DuLinkList;用后向指针判断L-next = L,或者用前向指针判断L-prior = L。. .与单链表和循环链表的联系最大不同:前驱容易求得,可以向前遍历。判断表尾的方法与循环链表相同:p=L。插入和删除时需要修改两个方向的指针。插入和删除需要修改两个方向的指针。例如:(见下表)表 2.2 双向循环链表的插入和删除p之后插入sp之前插入s删除p之后继s删除ps

17、-p-prior = p;next-prior = s;prior = p-prior;next = p;prior-s = p-5. 顺序表与单链表的比较表 2.3 顺序表和单链表的比较顺序表单链表以地址相邻表示关系用指针表示关系随机访问,取元素O(1)顺序访问,取元素O(n)插入、删除需要移动元素O(n)插入、删除不用移动元素O(n)(用于查找位置)总结:需要反复插入、删除,宜采用链表;反复提取,很少插入、删除,宜采用顺序表。二、习题2.1 将顺序表中的元素反转顺序。2.2 在非递减有序的顺序表中插入元素x,并保持有序。2.3 删除顺序表中所有等于x的元素。2.4 编写算法实现顺序表元素唯

18、一化(即使顺序表中重复的元素只保留一个),给出算法的时间复杂度。2.5 非递减有序的顺序表元素唯一化(参见习题2.4),要求算法的时间复杂度为O(n)。2.6 将单链表就地逆置,即不另外开辟结点空间,而将链表元素翻转顺序。2.7 采用插入法将单链表中的元素排序。2.8 采用选择法将单链表中的元素排序。2.9 将两个非递减有序的单链表归并成一个,仍并保持非递减有序。第4章 栈和队列1. 栈栈,栈顶,栈底,空栈,后进先出(LIFO),入栈(Push),出栈(Pop)。顺序栈:栈的顺序存储结构;链栈:栈的链式存储结构。2. 链栈(1) 存储结构用不带头结点的单链表实现。(2) 类型定义(3) 基本形态/栈空条件: S = NULL栈非空栈满(一般不出现)(4) 基本算法入栈 Push (&s, x)bool Push ( LinkList &s, DataType x ) / 新建结点 p = (LinkList) malloc (sizeof(LNode);p ) return false; / 插入栈顶 s = p;出栈 Pop (&s, &栈非空。bool Pop ( LinkList &s, DataType & if ( s=NULL ) return fals

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

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