数据结构期末复习笔记.pdf
《数据结构期末复习笔记.pdf》由会员分享,可在线阅读,更多相关《数据结构期末复习笔记.pdf(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构期末复习-笔记第一节:高等数据结构(上)数组、字符串/Array&String 链表/Linke d-list 栈/Stack 队列/Que ue 双端队列/De que 树/Tre e数组、字符串力扣242优 点:根据下标随机访问某个元素缺 点:查询某个元素是否存在时需遍历整个数组;删除/添加元素时,需0(n)时间链表力扣25结题技巧利用快慢指针(有时要三个)构建T虚假的链表头栈力扣20、739可以用一个单链表来实现算法基本思想只关心上一次的操作处理完上一次的操作后,能在0(1)时间内查找到更前一次的操作队歹u力扣239用 在:需要一定的顺序处理数据,且处理的数据在不断变化基本实现可
2、以用f双链表来实现Null 在社交网络里,每个人可以用图的顶点表示,人与人直接的关系可以用图的边表示,在地图上,要求解从起始点到目的地,如何行驶会更快捷,需要运用图论里的最短路径算法前维树:出现在面试的难题中,要求能熟练地书写它的实现以及运用线段树和树状数组应用场合比较明确如果要求在一幅图片当中修改像素的颜色,求解任意矩形区间的灰度平均值,则需要采用二维的线段恻优先队列力扣347与普通队列的区别保证每次取出的元素是队列中优先级最高的优先级别可自定义(比如指小的优先级高)最常用的场景从杂乱无章的数据中按照一定的II质序(或者优先级)筛选数据(取出前k大的数)本质0 1 2 3 4 5二叉堆的结构
3、,堆在英文里叫Binary he ap利用一个数组结构来实现完全二叉树特性数组里的第一个元素array 0 拥有最高的优先级给 定 一 下 标i,那么对于元素array【i】而言 父节点对应的元素下标是(i-1)/2 左侧子节点对应的元素下标是2*i+l 右侧子节点对应的元素下标是2*i+2数组中每个元素的优先级都必须要高于它两侧子节点其基本操作为以下两个(都需O(log k)向上筛选(sift up/bubble up)加入新节点时,将节点添加到数的底部(数组最后一个元素),然后根据节点的优先级,顺着树爬上去,直到树稳定向下筛选(sift d own/bubble d own)删除根节点时,
4、用树的最后一个节点代替根节点的位置,然后根据节点的优先级,顺着树向下比较,直到树稳定另一个最重要的时间复杂度:优先队列的初始化看似时间复杂度是O(n*log k),实际上是O(n)图必需熟练掌握的知识点图的存储和表达方式:邻接矩阵、邻接链表图的遍历:深度优先、广度优先二部图的检测(B ip a rtite)、树的检测、环的检测:有向图、无向图拓扑排序联合-查找算法(Union-Find)最短路径:Dijkstra、Be llman-Ford力扣785力扣212也称字典树这种数据结构被广泛地运用在空醺我当中什么是字典杳找?例如:给定一系列构成字典的字符串,要求在字典当中找出所有以ABC 开头的字
5、符串方法一:暴力搜索法时间复杂度:0 (MN)方法二:前缀树时间复杂度:0 (M)重要性质每个节点至少包含两个基本属性child re n:数组或者集合,罗列出每个分支当中包含的所有字符isEnd:布尔值,表示该节点是否为某字符串的结尾根节点是空的除了根节点,其他所有节点都可能是单词的结尾,叶子节点一定都是单词的结尾最基本的操作创建 遍历一遍输入的字符串,对每个字符串的字符进行遍历 从前缀树的根节点开始,将每个字符加入到节点的child re n字符集当中 如果字符集已经包含了这个字符,跳过 如果当前字符是字符串的最后一个,把当前节点的isEnd 标记为真搜索 从前缀树的根节点出发,逐个匹配输
6、入的前缀字符 如果遇到了,继续往下一层搜索 如果没遇到,立即返回线段树力扣315一种按照二叉树的形式存储数据的结构,每个节点保存的都是数组里某一段的总和例如要求一段大区间,则对应是各个小区间的和(不相交)先从一个例题出发假设我们有一个数组array(O.n-1,里面有n 个元素,现在我们要经常对这个数组做两件事:1,更新数组元素的数值 2,求数组任意一段区间里元素的总和(或者平均值)方法一:遍历一遍数组 时间复杂度:0 (n)方法二:线段树 时间复杂度:0 (log n)方法三:树状数组树状数组力扣308 重要的基本特征 利用数组来表示多叉树的结构,和优先队列有些类似 优先队列是用数组来表示完
7、全二叉树,而树状数组是多叉树 树状数组的第一个元素是空节点 如果节点tre e y是 tre e 冈的父节点,那么需要满足y=x-(x&(-x)第三节:排序算法基 本 的 排 序 算 法【简单直接助你迅速写出没有bug的代码】冒泡排序/Bubble Sort 插入排序 Inse rtion Sort常 考 的 排 序 算 法【解决绝大部分涉及排序问题的关键】归并 排 序/Me rge Sort 快速排序/Quick Sort 拓扑排序/Topological Sort其 他 排 序 算 法【掌握好它的解题思想能开阔解题思路】堆排序/He ap Sort 桶排序/Bucke t Sort冒泡算法
8、两两比较void s o rt(in t nums)boole an hasChange =tru e;fo r(in t i =;i num s.le ngth-&hasChange;i+)hasChange =fa ls e;fo r(in t j =;j numsj+)swap(nums,j,j +i);hasChange =tru e;)复杂度空间复杂度:0(1)假设数组的元素个数是 整个排序的过程中,直接在给定的数组里进行元素的两两交换。时间复杂度:0(”2),情 景 一 给定的数组按照顺序已经排好只 需 要 进 行 次 的 比 较,两两交换次数为0,时间复杂度是0(n),这是最好的
9、情况。,情 景 二 给定的数组按照逆序排列需要进行n(n-1)/2次比较,时间复杂度是0(标2),这是最坏的情况。,情 景 三 给定的数组杂乱无章在这种情况下,平均时间复杂度是0(口 人2)。插入排序力扣147待排数据与有序区最外围数据进行比较void sort(int nums)for(int i=,j,current;i=&numsj current;j-)numsj+=numsjnumsj+=current;复杂度空间复杂度:0(1)假设数组的元素个数是m整个排序的过程中,直接在给定的散组里进行元素的两两交换。时间复杂度:0(2 2)情景一:给定的数组按照顺序已经排好只 需 要 进 行
10、次 的 比 较,两两交换次数为0,时间复杂度是0(n),这是最好的情况。,情景二:给定的数组按照逆序排列需要进行n(n-1)/2次比较,时间复杂度是0(2),这是最坏的情况。,情 景 三 给定的数组杂乱无章在这种情况下,平均时间复杂度是0(M 2).归并排序分治的思想归并排序的核心思想是分治,把一个复杂问题拆分成若干个子问题来求解。归并排序的算法思想/把数组从中间划分成两个子数组;递归地把子数组划分成更小的子数组,直到子数组里面只有一个元素;依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好。主体函数/*归并排序的主体函数7void sort(int A,int l
11、o,int hi)if(lo=hi)return;int mid=lo+(hi-lo)/2;sort(A,lo,mid);sort(A,mid+,hi);merge(A,lo,mid,hi);void merge(int nums,int lo,int mid,int hi)int copy=nums.clone();int k=lo,i=lo,j=mid+;while(k mid)numsk+=copyj+;else if(j hi)numsk+=copyi+;else if(copyj=hi)return;int p=partition(nums,lo,hi);sort(nums,lo,p
12、-1);sort(nums,p+,hi);int partition(int nums,int lo,int hi)swap(numsj randRange(10j hi),hi);int i,j;for(i=lo,j=lo;j hi;j+)if(numsj=numshi)swap(nums,i+,j);swap(nums,i,j);return i;复杂度最优情况下的时间复杂度T(n)=2*T(n/2)+0(n)0(n)是怎么得出来的呢?把规模大小为n的问题分解成n/2的两个子问题;和基准值进行n-1次比较,n-1次比较的复杂度就是0(n);快速排序的复杂度也是O(nlogn)。最复杂的情况
13、每次在选择基准值的时候;都不幸选择了子数组里的最大或最小值;其中一个子数组长度为1;另一个长度只比父数组少1。空间复杂度:O(logn)和归并排序不同,快速排序在每次递归的过程中;只需要开辟0(1)的存储空间来完成交换操作实现直接对数组的修改;而递归次数为lo g n,所以它的整体空间复杂度完全取决于压堆栈的次数。拓扑排序应用场合拓扑排序就是要将图论里的顶点按照相连的性质进行排序前提必须是有向图图里没有环先计算入度,删除节点后更新入度代码void sort()Queue q=new LinkedList();for(int v=0;v V;v+)if(indegreev=)q.add(v);w
14、hile(!q.isEmpty()int v=q.poll();print(v);for(int u=;u adjv.length;u+)if(-indegreeu=)q.add(u);)广度优先搜索队列q保存入度为0的顶点复杂度时间复杂度:O(n)统计顶点的入度需要0(n)的时间;接下来每个顶点被遍历一次,同样需要0(n)的时间。数据结构时间复杂度线性表顺序表插 入,删 除:0(n)直接插入排序、简单选择排序、快速排序的算法以及时间复杂度直接插入排序、简单选择排序的平均时间复杂度:T(n)=O(n 2)快速排序时间复杂度平均情况(每次总是选到中间值作枢轴)T(n)=O(n l o g 2 n
15、)最坏情况(每次总是选到最小或最大元素作枢轴)T(n)=O(M)排序 1.数据结构和算法的基本概念(1)数据、数据元素、数据逻辑结构、数据存储结构、数据类型、抽象数据类型等数 据:集合存储数据时,不仅要存储各元素的值,而且要存储数据元素之间的关系数据元素:数据的基本单位数据项:构成数据元素的最小单位一个学生就是个数据元素,数据项包含学号、姓名等数据结构定义了一组按某些关系组合起来的数据元素三要素数据逻辑结构指数据元素间的逻辑关系,与存储结构无关数据存储结构指数据结构在计算机中的映像(存储方式)顺序存储逻辑上相连的元素存储在物理位置上也连续的单元中链式存储利用地址链接各元素,不要求物理位置连续散
16、列存储(哈希存储)根据元素关键字计算出元素的存储地址索引存储 建立索引表 索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)其优点是检索速度快,缺点是索引表额外耗费空间运算集扩展 数据的逻辑结构抽象于(独立于)存储结构 如III好 表、哈希表、单链表,即表示逻辑结构,又表示存储结构 而有序表只表示逻辑结构栈是一种抽象数据类型,可采用顺序存储戳链式存储,只表示逻辑结构而循环队列是用II同序表表示的队列数据类型不仅定义了一组带结构的数据元素,还在其上定义了一组操作扩展 1)原子类型。其值不可再分的数据类型 2)结构类型。其值可以再分解为若干成分(分量)的数据类型。3)抽象数据类型。抽象数
17、据组织及与之相关的操作抽象数据类型(ADT)描述了数据的逻辑结构和抽象运算仅仅是一组逻辑特性的描述与其在计算机内的实现无关用三元组(数据对象,数据关系,基本操作集)来表示,从而构成一个完整的数据结构定义(2)算法、算法设计的要求、算法效率的度量、算法存储空间的需求等算法概念算法是对特定问题的求解步骤算法的计算量大小称为计算的:复杂性算法设计的要求正确性:每一个步骤有确定的含义健壮性:对非法数据能进行处理算法效率的度量 用 f(n)计算时间复杂度,T(n)为频度之和,0(n)是 T(n)的数量级(n 为问题的规模)时间复杂度为。(标2),说明算法的执行时间与M 2 成正比 最内层语句被执行的次数
18、常见的渐近时间复杂度为0(1)O(log2n)O(n)O(nlog2n)0(n2)O(n3)0(2)O(n!)next=head判断是否尾节点:p-next=head双向链表插入过程PP1 Fbciau-ru-.s s T|口 e|I Il图2 9 双向链表的插入 _先右后左 s-next=p-next p-next-prior=s p-next=s s-prior=p循环链表和双向链表从任意节点出发都可访问任意节点栈顺序栈结构 top:指向栈顶 bottom:指向栈底操作判断空栈:top=bottom top指向位置有兀涝动态J I同学栈可以根据需要增大栈的空间 botte m指向位置有元素
19、 top指向位置不放元素共享栈 利用了栈底位置不变,栈顶位置动态变化的特性 栈底在两端(0和M-1)top0和to p l是两个栈顶指示器链栈top-Atop空栈链栈存储形式非空栈多栈运算队列顺序队列 插 入:rear位置插入元素,后+1 删 除:front位置删除,后+1 初始化:front=rear=0队 空:rear=front 队 满:rear=MAX_QUEUE_SIZE-1循环队列 队满:front=(rear+1)%MAX_QUEUE_SIZE链队列 rear指向元素的后一链队列结点示意图 结构 front:队头指针,在此删除元素 rear:队尾指针,在此添加元素操作队空:fro
20、nt=rear添加/删除元素(a空从药(b)xAfk(c)y再入队同 x出队队雉作及指针变化(2)栈、队列和线性表的实现,包括顺序和链式存储结构(3)栈、队列和线性表的应用线性表已知元素个数时,使用III页序存储更节省时间,因为链式存储需要存储额外的指针删除单链表中值相同的节点48 删除单链表中值相同的节点49 void Delete_Node_value(LNode*L)50 LNode*p=L-next,*q,*ptr;51(p!=NULL)5253545556575859606162636465)66)q=p;ptr=p-next;(ptr!=NULL)(ptr-data=p-data)
21、q-next=ptr-next;free(ptr);ptr=q-next;elseq=ptr;ptr=ptr-next;p=p-next;串串;字符的有限序列空 串:长度为0的串空串所任意串的子串 空白串(空格串):所有字符都是空格的串 串长:所含字符长度 串的存储方式 定长存储:字符数组 堆分配:长度动态变化的字符数组 块链存储:链式存储,一个块包含若干个字符在串未填上不属于串值的特殊字符,表示串的总结串的模式匹配算法 模式匹配:指子串值主串中的定位,匹配成功表在主串S中能找到模式串T BF*求串的next函数值I 0123456789 10 11abcaabbabcabnext|4 000
22、11201234rmtvalU-1 0 0-1 1 0 2-1 0 0-1 I 4|next数组首字符从-1开始若从答案从0开 始,则整体数组+1得结果匹配第i个字符,看0 i-1的字符间(头和尾)是否有相同子串有:写上子串长度无:写0 nextval数组 辅助步骤:先根据next数组值,写下对应的字符 首字符从-1开始 比对第i位字符和辅助字符是否相同不 同:nextval的值即为next的值相 同:看next的值为多少,为k则取nextvalk.数组定义的下标从1开始数组的存储两种类型:按行存储/按列存储三角矩阵分上三角、下三角带状矩阵以对角线为中心,三条元素稀疏矩阵三元组表示法十字链表
23、3.排序基础(1)排序的概念与分类内部排序插入排序直接插入排序直接插入排序1typedef int D a t a T y p e;2直接插3void I n s e r t S o r t(D a t a T y p e L ,int l e n)4inti,3;5D a t a T y p e t e m p;6f o r(i=l;i =0;j-)9i f(t e m p L j )L j+1 =L j ;1 0e l s e b r e a k;数据移位1 11 2L j+1 =t e m p;1 31 4思 想:数据分为两个区一有序区和无序区;每次都取最靠近有序区的数插入到有序区中(没
24、有选择的过程!)插入排序过程30。5。40 2520i=l203050I402550i=2203015040i2540i=32030I-405025_ i25i=42025304050初始时,有序区元素个数为1直插是稳定排序直接插入排序、简单选择排序的平均时间复杂度:T(n)=O(n2)折半插入排序希尔排序思想序列增量作为分组间隔,分为若干组,组内进行直接插入排序一般第一次取的增量为n/2不断缩小增量,直到为1步骤楙而而第轮组耦*了仙讨郴布时”和精魄段T为推而楙tH tiifft 播耀2 ttfttitfi交换排序冒泡排序冒泡排序/冒泡排序:对n个数,要排n-1趟,第j趟要交换向次vo id
25、b u b b le _ s o rt(in t a ,in t n)in t te mp=0;fo r(in t i=0;i n;i+)fo r(in t j=0;j a j+l)交换te mp=a j;a j =a j+1;a j+1 =te m p;?快速排序快速排序1 typedef int DataType;2/快速排序3 void Quicksort(DataType R,int s,int e)4 int low=s,high=e;DataType x=Rs;6?.hile(low high)(low=x)high-;Rlow=Rhigh;(lowhigh&Rlowx)low+;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 期末 复习 笔记
限制150内