数据结构知识点全面总结.docx
《数据结构知识点全面总结.docx》由会员分享,可在线阅读,更多相关《数据结构知识点全面总结.docx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1章绪论内容提要:数据结构研究的内容。操作对象以及它们之间的关系和操作。针对非数值计算的程序设计问题,研究计算机的 数据结构涵盖的内容:钱进结构(建性表、栈、务太、串、数纽非线性结掏树结构图结构数据结构鞭疼结构遂式结构紊引结构散列结构耻除运翳数据运算)修改运算查找运算 排序运算基本概念:数据、数据元素、数据对象、数据结构、数据类型、抽象数据类型。数据一一所有能被计算机识别、 存储和处理的符号的集合。数据元素一一是数据的基本单位,具有完整确定的实际意义。数据对象一一具有相同性质的数据元素的集合,是数据的一个子集。数据结构一一是相互之间存在一种或多种特定关系的数据元素的集合,表示为:Data_S
2、tructure= ( D, R)数据类型一一是一个值的集合和定义在该值上的一组操作的总称。抽象数据类型一一由用户定义的一个数学模型与定义在该模型上的一组操作, 它由基本的数据类型构成。算法的定义及五个特征。算法是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。算法的基本特性:输入、输出、有穷性、确定性、可行性算法设计要求。 正确性、可读性、健壮性、效率与低存储量需求算法分析。时间复杂度、空间复杂度、稳定性学习重点:数据结构的“三要素”:逻辑结构、物理(存储)结构 及在这种结构上所定义的操作(运算)。用计算语句频度来估算算法的时间复杂度。循环队列:队空条件:
3、front = rear(初始化时 front = rear)队满条件:front = (rear+1) % N(N=maxsize)队列长度(即数据元素个数):L=( N+ rear- front) % N1)初始化一个空队列Status InitQueue ( Sueue &q ) / 初始化空循环队列q(q . base=(QEIemType *)malloc(sizeof(QEIemType)* QUEUE_MAXSIZE);/ 分配空间if (Iq.base) exit(OVERFLOW);/内存分配失败,退出程序q.front =q.rear=0; / 置空队歹 Ureturn O
4、K; /Ini tQueue;2)入队操作Status En Queue(Sueue &q, QEIemType e)向循环队列q的队尾加入一个元素eif (q.rear+1)% QUEUE_MAXSIZE = = q.fro nt)return ERROR ; 队满则上溢,无法再入队q.rear = ( q . rear + 1 )% QUEUE_MAXSIZE;q.base q.rear = e;新元素 e 入队return OK;/ En Queue;3)出队操作Status DeQueue ( Sueue &q, QEIemType &e)若队列不空,删除循环队列q的队头元素,由e返回
5、其值,并返回0Kif ( q.front = = q.rear) return ERROR;/ 队列空q.fron t=(q.fro nt+1) % QUEUE_MAXSIZE ;e = q.base q.front ;return OK;/ DeQueue链队列空的条件是首尾指针相等,而循环队列满的条件的判定,则有队尾加和设标记两种方法。1等于队头补充重点:1 .为什么要设计堆栈?它有什么独特用途?调用函数或子程序非它莫属; 递归运算的有力工具; 用于保护现场和恢复现场; 简化了程序设计的问题。2 .为什么要设计队列?它有什么独特用途? 离散事件的模拟(模拟事件发生的先后顺序,例如CPU芯片
6、中的指令译码队列); 操作系统中的作业调度(一个CPU执行多个作业); 简化程序设计。3 .什么叫“假溢出”?如何解决?答:在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。解决假溢出的途径采用循环队列。4 .在一个循环队列中,若约定队首指针指向队首元素的前一个位置。那么,从循环队列中IW 除一个元素时,其操作是先移动队首位置,后取出元素。5 .线性表、栈、队的异同点:相同点:逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。不同点:运算规则不同: 线性表为随机存取
7、; 而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO ;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、OS作业调度 和简化设计等。第四章串内容提要:串是数据元素为字符的线性表,串的定义及操作。串即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。串比较:int strcmp(char *s1 ,char *s2);求串长:int strle n( char *s);串连接:char strcat(char *to,char *from) 子串
8、T 定位:char strchr(char *s,char *c);串的存储结构,因串是数据元素为字符的线性表,所以存在“结点大小”的问题。模式匹配算法。串有三种机内表示方法:耐一一用一组地址连续的存储单元存储串垃的字存诸称序列,属ifr态存储方式.堆令少存储表示-用-组连续的存储单元存储串垃的字符序列,但存瞎空同是在程序执祎过程中彩吉 分配而得* 鹫善串的块雒捽储表示仔临链式方式存储模式匹配算法:算法目的:确定主串中所含子串第一次出现的位置(定位)定位问题称为串的模式匹配,典型函数为In dex(S,T,pos)BF算法的实现一即编写 lndex(S, T, pos)函数BF算法设计思想:将
9、主串S的第pos个字符和模式T的第1个字符比较,若相等,继续逐个比较后续字符;若不等,从主串S的下一字符(pos+1)起,重新与T第一个字符比较。直到主串S的一个连续子串字符序列与模式T相等。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。否则,匹配失败,返回值 0。Int In dex_BP(SStri ng S, SStri ng T, i nt pos)返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0.其中,T 非空,1 posw StrLength(S)i=pos; j=1;while (i=S0 & jf(jTO) return i-T0;/T 子串指针
10、正常到尾,说明匹配成功,else return 0;/否则属于iS情况,i先到尾就不正常 /I ndex_BP补充重点:1 空串和空白串有无区别?答:有区别。空串(Null String)是指长度为零的串;而空白串(Blank String),是指包含一个或多个空白字符(空格键)的字符串2 .“空串是任意串的子串;任意串S都是S本身的子串,S本身外,S的其他子串称为S的真子串。f运建吉枪s =* uijua*定长顺序存储结构串T有储留吾构-堆存情结构二若干函数的实现1模式匹配算法模式匹配即子串定位运算即如何实现lDd1时,其余的结点分为 m (m 0)个互不相交的有限集合T1,T2 , , ,
11、 Tm。每个集合本身又是棵树,被称作这个根的子树。二叉树:是n (n0)个结点的有限集合,由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树 组成。术语:P88 二叉树的性质,存储结构。性质1:在二叉树的第i层上至多有2i1个结点(i0 )。性质2:深度为k的二叉树至多有2k个结点(k0 )。性质3:对于任何一棵二叉树,若2度的结点数有n2个,则叶子数(n0)必定为n2 + 1性质4:具有n个结点的完全二叉树的深度必为性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i的结点,其左孩子编号必为2i,其右孩子编号为2i + 1 ;其双亲的编号必为i/2 (i= 1时为根,除外)
12、。二叉树的存储结构:一、顺序存储结构按二叉树的结点“自上而下、从左至右”编号,用一组连续的存储单元存储。若是完全/满二叉树则可以做到唯一复 原。不是完全二叉树:一律转为完全二叉树!方法很简单,将各层空缺处统统补上“虚结点”,其内容为空。缺点:浪费空间;插入、删除不便二、链式存储结构用二叉链表即可方便表示。一般从根结点开始存储。irlt Cbtdngbt (hldd优点:不浪费空间;插入、删除方便 二叉树的遍历。指按照某种次序访问二叉树的所有结点,并且每个结点仅访问一次,得到一个线性序列。遍历规则二叉树由根、左子树、右子树构成,定义为D、 L、R若限定先左后右,则有三种实现方案:中序遍历后序遍历
13、DLRLDR LRD先序遍历树的存储结构,树、森林的遍历及和二叉树的相互转换。回顾2 :二叉树怎样还原为树?要点:逆操作,把所有右孩子变为兄弟!讨论1 :森林如何转为二叉树?法一:各森林先各自转为二叉树;依次连到前一个二叉树的右子树上。法二:森林直接变兄弟,再转为二叉树讨论2 :二叉树如何还原为森林?要点:把最右边的子树变为森林,其余右子树变为兄弟树和森林的存储方式:树有三种常用存储方式:双亲表示法孩子表示法孩子一兄弟表示法问:树t二叉树的“连线一抹线一旋转”如何由计算机自动实现?答:用“左孩子右兄弟”表示法来存储即可。存储的过程就是树转换为二叉树的过程!树、森林的遍历:探度优先第历(先月底怎
14、和需鹫蹩?皿1广度忧去遁历(层执】 先根遍历:访问根结点;依次先根遍历根结点的每棵子树。 后根遍历:依次后根遍历根结点的每棵子树;访问根结点。讨论: 树若采用“先转换,后遍历”方式,结果是否一样?1 .树的先根遍历与二叉树的先序遍历相同;2 .树的后根遍历相当于二叉树的中序遍历;3 .树没有中序遍历,因为子树无左右之分。淼林的逼历先序遍历深度优先遍历先序、申序)广度优先遍历层次1若森林为空,返回;访问森林中第一棵树的根结点; 先根遍历第一棵树的根结点的子树森林; 先根遍历除去第一棵树之后剩余的树构成的森林。中序遍历若森林为空,返回;中根遍历森林中第一棵树的根结点的子树森林;访问第一棵树的根结点
15、; 中根遍历除去第一棵树之后剩余的树构成的森林。二叉树的应用:哈夫曼树和哈夫曼编码。Huffman树:最优二叉树(带权路径长度最短的树) Huffman编码:不等长编码。树的带权路径长度:(树中所有叶子结点的带权路径长度之和)构造Huffman树的基本思想:权值大的结点用短 路径,权值小的结点用长路径。构造Huffman树的步骤(即Huffman算法):(1)由给定的n个权值 w1, w2, , , wn 构成n棵二叉树的集合F = T1,T2, , ,Tn)(即森林),其中每棵 二叉树Ti中只有一个带权为wi的根结点,其左右子树均空。(2)在F中选取两棵根结点权值最小的树做为左右子树构造一棵
16、新的二叉树,且让新二叉树根结点的权值等于其左右子树的根结点权值之和。(3)在F中删去这两棵树,同时将新得到的二叉树加入F中。重复和,直到F只含一棵树为止。这棵树便是Huffman树。具体操作步骤:stepl:对权值进行合并、删除与替换在权值束合忡,52 4中,总是合井当的最小的两个权。.初始令并国同吐合井(7) (11FH7K11Ft 11田回团b.合并2 4Ft(7)(5)(6step2:按左“(T右F对Htlffman树的所有分支编号将Huffman树与Huffman八码挂钩a 21 ri nHuffinan 编码结果:d=: , i= t a- JO, n=WFL=lbitX7+2MtX
17、5+3bitQ+4 ) =35 (小干尊长码的 ffFL=36)学习重点:(本章内容是本课程的重点)二叉树性质及证明方法,并能把这种方法推广到K叉树。二叉树遍历,遍历是基础,由此导出许多实用的算法,如求二叉树的高度、各结点的层次数、度为0、1、2的结 点数。由二叉树遍历的前序和中序序列或后序和中序序列可以唯一构造一棵二叉树。由前序和后序序列不能唯一确定一棵 二叉树。完全二叉树的性质。树、森林和二叉树间的相互转换。哈夫曼树的定义、构造及求哈夫曼编码。补充:1-满二叉树和完全二叉树有什么区别?k-1层是满的,但最底层却允许答:满二叉树是叶子一个也不少的树,而完全二叉树虽然前在右边缺少连续若干个结点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 知识点 全面 总结
限制150内