数据结构分析与管理讲义.docx
《数据结构分析与管理讲义.docx》由会员分享,可在线阅读,更多相关《数据结构分析与管理讲义.docx(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、前言缘起数据结构是一门计算机专业基础课,各类计算机考试都禁不住要考它,专升本考试自然也不例外。我给学生辅导这门课程已经有几个年头了,讲稿换了几次,逐渐丰富起来。加之看到学生们埋头记笔记时辛苦的样子,就产生了写一本小册子的想法。另外,还有一层意思就是对数次辅导进行总结,以便交流之用。说明首先,需要说明的是这本书在语言风格上不太讲究,常有些不严谨的表达,或调侃,或土得掉渣,难登大雅之堂,请勿在正规场合引用这些说法。这样做的目的,仅仅是为了更简练、更直接地描述思想,方便理解、记忆和使用。凡是这种情况,往往都用引号括起来,并加以脚注说明。还有,本书需配合数据结构(严蔚敏)教材使用。由于篇幅有限,多数概
2、念、术语没有详释。 另外,每章之后都配有习题,或多或少,难度不一,并没有局限于专升本的要求。对所有习题都提供了参考答案。致谢我要感谢所有给予我帮助的人。张志老师的大力支持和帮助使得本书得以面世,他还提供了近年专升本试题。李永干老师的帮助使得本书顺利印刷。谭业武老师给了我很大支持,还提出了很多建议。最后,我要感谢隆坤,她总是给我最大的支持,使那些本来只在我想象中的事情变成现实。庄波于滨州学院第0章 复习提示1一、 教材内容1二、 复习提示11. 经典算法12. 绪论13. 线性表14. 栈和队列25. 串26. 树和二叉树27. 图28. 查找表39. 内部排序3第1章 绪论5一、 基础知识5二
3、、 算法5三、 习题6第2章 线性表7一、 基础知识和算法71. 线性表及其特点72. 顺序表线性表的顺序存储结构73. 单链表线性表的链式存储结构之一104. 循环链表155. 双向循环链表156. 顺序表与单链表的比较16二、 习题16第3章 栈和队列17一、 基础知识和算法171. 栈172. 链栈173. 顺序栈184. 队列195. 链队列206. 循环队列207. 栈和队列比较228. 简化的栈和队列结构239. 栈和队列的应用23二、 习题24第4章 串25一、 基础知识和算法251. 概念252. 串的基本操作253. 串的存储结构25二、 习题25第6章 树和二叉树27一、
4、基础知识和算法271. 树及有关概念272. 二叉树273. 二叉树的性质274. 二叉树的存储结构285. 二叉树的五种基本形态286. 遍历二叉树297. 遍历二叉树的应用338. 线索二叉树349. 树和森林3510. 赫夫曼树及其应用36二、 习题37第7章 图39一、 基础知识和算法391. 图的有关概念392. 图的存储结构393. 图的遍历424. 最小生成树445. 拓扑排序466. 关键路径467. 最短路径47二、 习题49第9章 查找51一、 基础知识和算法511. 有关概念512. 顺序查找513. 折半查找524. 索引顺序表545. 二叉排序树546. 平衡二叉树5
5、77. B-树和B+树588. 键树599. 哈希表59二、 习题61第10章 内部排序63一、 基础知识和算法631. 排序的有关概念632. 直接插入排序633. 折半插入排序644. 希尔排序(缩小增量排序)645. 起泡排序656. 快速排序667. 简单选择排序678. 堆排序689. 归并排序7110. 基数排序7211. 各种排序方法比较73第0章 复习提示一、 教材内容l 使用教材数据结构C语言版 严蔚敏,清华大学出版社。l 章节 去掉 第5、8、11、12章 去掉 *部分 去掉1.3,2.4,4.4二、 复习提示1. 经典算法单链表:遍历、插入、删除循环队列:队列空、队列满的
6、条件二叉树:递归遍历及应用有序表的二分法查找快速排序简单选择排序2. 绪论掌握几个重要概念数据结构、抽象数据类型、算法时间复杂度的简单计算(C 记号C,表示要求掌握计算方法,会计算。本节下同。)掌握几种说法数据元素是,数据项是数据结构中关系的四种基本结构数据结构的形式定义算法的五个特征3. 线性表线性表的概念和四个特征顺序表和单链表的类型定义在顺序表中查找、插入、删除,灵活运用在单链表中查找、插入、删除,灵活运用循环链表及双向链表的定义、插入、删除算法:单链表的算法,灵活运用、会编程(P 记号P,要求达到编写算法和程序的能力。本节下同。)4. 栈和队列栈和队列的概念、特点入栈、出栈操作,灵活掌
7、握了解栈的实现:链栈和顺序栈(A 记号A,要求掌握算法思想,会演算。本节下同。算法,P)了解队列的实现,链队列和循环队列,注意链队列中的出队列操作算法:注意循环队列空和满的条件(A,P)会运用栈和队列5. 串掌握相关概念会运用串的基本操作(C),特别是Concat(),Substring(),Index()和Replace()知道串的三种存储结构及其特点6. 树和二叉树树和二叉树的有关概念二叉树的性质熟练掌握遍历二叉树的递归算法,并灵活运用知道线索二叉树,会对二叉树进行线索化树、森林和二叉树的转化,会遍历树和森林赫夫曼树及其应用算法: 递归遍历二叉树及其应用(P) 构造赫夫曼树和赫夫曼编码(A
8、) 树和二叉树的转换(A) 森林和二叉树的转换(A) 遍历树和森林(A)7. 图图的有关概念熟练掌握图的各种存储结构图的遍历:深度优先、广度优先(A)最小生成树算法(两个)及其特点(A)拓扑排序(A)关键路径算法(A)最短路径算法(两个)(A,O 记号O,要求掌握算法的时间复杂度。本节下同。:时间复杂度)8. 查找表查找的有关概念,ASL等顺序查找(A,P)熟练掌握有序表的折半查找算法(A,P,C)了解索引顺序表熟练掌握二叉排序树的概念,建立(A),查找(A,P),删除(A),计算ASL(C)平衡二叉排序树的概念,建立(A),判断失去平衡的类型,平衡化(A),计算ASL(C)了解B_树,B+树
9、的概念和特点知道键树(数字查找树)哈希表的概念、特点、构造哈希表(A),计算ASL和装填因子(C)了解各种查找表的性能(O)9. 内部排序直接插入排序(A)折半插入排序(A,P)希尔排序(A)起泡排序(A)快速排序(A,P,O)简单选择排序(P,A,O)堆的概念,调整成堆(A),堆排序(A,O)归并排序(A,O)链式基数排序(A,O)各种排序算法的对比结论(O)第1章 绪论一、 基础知识概念和术语(黑体字部分)。另外,注意:1、数据元素是数据的基本单位。P42、数据项是数据不可分割的最小单位。P53、数据结构及其形式定义。P5四种基本结构:集合线性结构树形结构图(网)状结构4、数据结构的逻辑结
10、构(抽象的,与实现无关)物理结构(存储结构) 顺序映像(顺序存储结构)位置“相邻” 非顺序映像(链式存储结构)指针表示关系P65、数据类型 P7 抽象数据类型(ADT)P7 ADT=(数据对象,数据关系,基本操作) ADT细分为原子类型,固定聚合,可变聚合类型。P86、算法的概念 P137、算法的五个特征 有穷性 确定性 可行性 输入(0个或多个) 输出(1个或多个)8、算法设计的要求:正确性可读性健壮性效率与低存储量其中正确性的四个层次(通常要求达到C层)。9、算法的时间复杂度 P15 常见有: O(1),O(n),O(n2),O(log2n) 分析算法的时间复杂度时,log2n常简单记作l
11、og n。,O(n log2n),O(2n) 语句频度,用归纳法计算。10、算法的空间复杂度 P17二、 算法起泡排序。P16另一种形式void BubbleSort ( DataType a, int n ) for ( i=0; in-1; i+ ) for ( j=0; jaj+1 ) ajaj+1;或void BubbleSort ( DataType a, int n ) for ( i=1; in; i+ ) for ( j=0; jaj+1 ) ajaj+1;或void BubbleSort ( DataType a, int n ) for ( i=0; in-1; i+ )
12、change = fasle; for ( j=0; jaj+1 ) ajaj+1; change = true; if ( !change ) break; 说明:a) 考试中要求写算法时,可用类C,也可用C程序。b) 尽量书写算法说明,言简意赅。c) 技巧:用“边界值验证法”检查下标越界错误。 如上第一个: 第二个循环条件若写作jn-i,则当i=0时 aj+1会越界。d) 时间复杂度为O(n2),第3个在最好情况下(待排记录有序),时间复杂度为O(n)。三、 习题1.1 编写冒泡排序算法,使结果从大到小排列。1.2 计算下面语句段中指定语句的频度: 1) for ( i=1; i=n; i
13、+ ) for ( j=i; j=n; j+ ) x+;/ 2) i = 1; while ( i=n ) i = i*2;/ 第2章 线性表一、 基础知识和算法1. 线性表及其特点线性表是n个数据元素的有限序列。线性结构的特点: “第一个” “最后一个” 前驱 后继。 这里太简炼了,只是为了便于记忆。2. 顺序表线性表的顺序存储结构(1) 特点a) 逻辑上相邻的元素在物理位置上相邻。b) 随机访问。(2) 类型定义简而言之,“数组+长度” 不准确的说法,只为便于理解和记忆,不要在正式场合引用。凡此情形,都加引号以示提醒。const int MAXSIZE = 线性表最大长度;typedef
14、structDataType elemMAXSIZE;int length; SqList;注:a) SqList为类型名,可换用其他写法。 b) DataType是数据元素的类型,根据需要确定。 c) MAXSIZE根据需要确定。如const int MAXSIZE=64; d) 课本上的SqList类型可在需要时增加存储空间,在上面这种定义下不可以。(这样做避免了动态内存分配,明显减少了算法的复杂程度,容易理解。而且,原来Pascal版本的数据结构(严蔚敏)就是这样做的。) e) 课本上的SqList类型定义中listsize表示已经分配的空间大小(容纳数据元素的个数)。当插入元素而遇到L
15、.length=L.listsize时,用realloc (L.elem, L.listsize+增量) 重新分配内存,而realloc()函数在必要的时候自动复制原来的元素到新分配的空间中。(3) 基本形态1. 顺序表空01MAXSIZE-1.L.elemL.elemL.elemL.length=0L.length=MAXSIZE0L.lengthMAXSIZE条件 L.length=0不允许删除操作2. 顺序表满条件 L.length=MAXSIZE不允许插入操作3. 不空也不满可以插入,删除(4) 基本算法遍历1. 顺序访问所有元素for ( i=0; iL.length; i+ ) v
16、isit ( L.elemi );2. 查找元素xfor ( i=0; iL.length; i+ ) if ( L.elemi=x ) break;if ( iL.length ) 找到;else 未找到;(5) 插入算法 ListInsert(&L,i,x)1. 前提:表不满2. 合理的插入范围:1iL.length+1注:位序i在C/C+中对应于下标i-1。3. 步骤 第i至最后所有元素后移一个元素 在第i个位置插入元素x 表长增14. 算法bool 这里返回true表示正确插入,返回false表示插入失败。以下常用来区分操作是否正确执行。 ListInsert ( SqList& L,
17、 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; / 若作为位序,有如何修改? / 插入x L.elemi-1 = x; / 表长增1 L.length+; return true; / 插入成功(6) 删除算法 ListDelete(&L,i,&x)1. 前提:表非空2. 合理的删除范围:1iL.length3. 步骤取
18、出第i个元素第i个元素之后的元素向前移动一个位置表长减14. 算法bool ListDelete ( SqList& L, int i, DataType& x ) if ( L.length=0 | iL.length ) return false; / 失败 x = L.elemi-1; for ( j=i; jnext = 02. 单链表不空条件:L-next != 0(5) 基本算法 (遍历)1. 顺序访问所有元素借助指针,“顺藤摸瓜”(沿着链表访问结点)。p = L-next; / 注意起始位置的考虑while ( p!=NULL ) / 判表尾,另外 (p!=0)或(p)均可 vi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 分析 管理 讲义
限制150内