![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
昂昂累世士
这个作者很懒,什么都没留下…
展开
-
第十一章:串
第十一章:串ADT长度小于字符串长度的前缀和后缀分别叫做真前缀和真后缀。串匹配文本串T:长度为n;模式串P:长度为m。一般情况下n远大于m,判断T中是否存在某一子串与P相同,如果存在则返回该子串在T中的起始位置,这一过程叫做串匹配。为了评估串匹配算法的性能,如果随机生成T和P,P有2^m种不同的情况,而T中长度为m的子串只有n – m + 1种情况,...原创 2019-11-25 13:11:11 · 373 阅读 · 0 评论 -
第十章:优先级队列
第十章:优先级队列需求与动机基本实现使用向量实现复杂度偏高使用有序向量尽管获得和删除最大元素很快,多少插入操作却仍要线性的时间。列表和有序列表也均不呢高效的实现所有的接口。而采用BBST实现优先级队列,功能太过复杂,PQ只需维护偏序关系即可,需要一种各类操作复杂度都不超过logn的数据结构。完全二叉堆:结构完全二叉堆在逻辑上等同于...原创 2019-11-21 18:41:04 · 429 阅读 · 0 评论 -
第九章:词典
第九章:词典散列:循值访问散列:原理用数组来存储电话号码,可能需要R = 10^8的空间来存储仅仅25000个电话号码,空间利用率很低。采用散列表将N个数映射到容量为M的空间。定址也就是散列,装填因子 = N / M,即存放的词条 / 桶数组容量。当两个不同的key能够映射到同一个hash值的时候,称这两个key为同义词,此时发生了冲突。...原创 2019-11-20 21:08:36 · 352 阅读 · 0 评论 -
第八章:高级搜索树
第八章:高级搜索树伸展树:逐层伸展根据局部性原理,刚被访问过的节点,极有可能很快再次接受访问,所以节点一旦被访问,不妨立即调整至树根。一旦v被访问,立刻对其父节点做旋转,使得v顶替其父节点的位置,这样自下而上,逐层单旋,直至v成为树根节点。伸展树的效率取决于伸展树的初始形态以及节点的访问次序。最坏情况是树的初始形态是一条单链,而每次访问的节点都是叶节点,这会导致每次...原创 2019-11-19 21:42:04 · 282 阅读 · 0 评论 -
第七章:二叉搜索树
第七章:二叉搜索树概述循关键码访问顺序性:BST中任一节点均不小于其左后代,不大于其右后代。满足上述顺序性的二叉树就是BST,然而虽然BST的任一节点均不小于其左孩子,不大于其右孩子,然而满足这个条件的二叉树却未必是BST。比如一棵二叉树,根结点是2,左孩子是1,1的右孩子是3,尽管满足父结点与孩子结点之间的顺序性,却不满足祖先与后代间的顺序性,故不是BST。BST的充...原创 2019-11-17 11:18:57 · 224 阅读 · 0 评论 -
第六章:图
第六章:图概述邻接矩阵也就是说,邻接矩阵行列都表示顶点,第i行第j列表示i到j边的权值。而关联矩阵的行表示顶点,列表示边,若某一列元素中有两个顶点值为1,则说明该边由这两行对应的顶点构成。实现:typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; //顶点状态typedef enu...原创 2019-11-13 20:15:53 · 215 阅读 · 0 评论 -
第五章:二叉树
第五章:二叉树树向量便于静态操作比如查找,列表便于动态操作插入删除,而树兼顾了二者的优点。树是一种半线性结构,在确定某种次序后,具有线性特征。常应用于层次结构的表达,比如之前的中缀表达式就可以用树形结构来表示。某节点孩子的数目称为该节点的(出)度,树的度的总和 = 边数 = 顶点数 – 1。如果约定了树孩子节点的次序关系,则这棵树被称为有序树。树中k ...原创 2019-11-11 20:50:38 · 259 阅读 · 0 评论 -
第四章:栈与队列
第四章:栈与队列栈接口与实现栈:只能在栈顶插入和删除的后进先出的数据结构。由向量派生出的栈的实现:#include "../Vector/Vector.h" //以向量为基类,派生出栈模板类template <typename T> class Stack: public Vector<T> { //将向量的首/末端作为栈底/顶public: //si...原创 2019-11-08 21:28:38 · 414 阅读 · 0 评论 -
第三章:列表
第三章:列表接口与实现数据结构操作:静态:仅读取,不修改数据结构,比如get,search操作。动态:需写入,数据结构内容会改变,比如insert,remove。与操作对应的数据结构存储方式同样有两种:静态:数据元素的逻辑地址和物理地址一一对应,支持高效的静态操作,比如向量。动态:动态分配元素的内存,逻辑上连续,物理可能不连续,支持高效的动态操作,比如列表。向量...原创 2019-11-05 22:50:02 · 325 阅读 · 0 评论 -
第二章:向量
第二章:向量抽象数据类型ADTADT = 数据模型 + 操作数据结构 = 用某种语言实现ADT的一整套算法。vector-寻秩访问,元素与秩一一对应ADT接口:注:disordered()函数返回向量中紧邻逆序对的数目。模板类可扩充向量:静态空间管理:向量容量从最开始就固定不变,存在很大的不足。空间效率:上溢(overflow):...原创 2019-11-05 15:45:32 · 560 阅读 · 0 评论 -
第一章:绪论
第一章:绪论大O记号T(n) = O(f(n))等价于存在c>0,当n达到一定值之后,有T(n) < c * f(n);通俗而言,O(f(n))表示f(n)是T(n)的上界。大O记号的两个特点:其一,常系数可以忽略。即O(c*f(n)) = O(f(n)).其二,低次项可忽略。比如O(n^2 + logn + n! + n^n) = O(n^n)。其他记号:...原创 2019-11-02 12:14:10 · 2002 阅读 · 0 评论