数据结构与算法分析C++
文章平均质量分 76
roockiet
这个作者很懒,什么都没留下…
展开
-
数据结构与算法分析笔记(c++)_查找树ADT-二叉查找树
二叉树的一个重要的应用是它们在查找中的应用假设树中的每个结点存储一项数据假设它们是些整数,我们还将假设,所有的项都是互异的。使二叉树成为二叉查找树的性质是,对于树中的每个结点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于x中的项。注意,这意味着,该树所有的元素都可以用某种一致的方式排序。右边的树在其项是6的结点(该结点正好是根结点)的左子树中,有一个结点的项是7。现在给出通常对二叉查找树进行的操作的简要描述。注意,由于树的递归定义,通常是递归地编写这些操作的例程。因为二叉查找原创 2021-01-19 20:31:17 · 218 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_二叉树
4.2二叉树二叉树(binary tree)是一棵每个结点都不能有多于两个儿子的树。叉树的个性质是平均二义树的深度要比结点个数N小得多分析表明,这个平均深度为O(√N),而对于特殊类型的二叉树,即二叉查找树(binary search tree),其深度的平均值是O(logn)。遗憾的是,这个深度也可以大到N-1。4.2.1实现因为个二义树结点最多有两个儿子,所以可以直接链接到它们。树结点的声明在结构上类似于双向链表的声明。在声明中,个结点就是由 element(元素)的信息加上两个到其他结点的原创 2021-01-12 20:21:10 · 203 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_树_预备知识
对于大量的输入数据,链表的线性访问时间太长,不宜使用。本章我们介绍一种简单的数据结构,其大部分操作的运行时间平均为O(logN)。我们涉及的这种数据结构叫作二叉查找树(binary search tree)。二叉查找树是在很多应用程序中都有使用的两个库集合类set和map的实现基础。在计算机科学中树(tree是非常有用的抽象概念,因此,我们将讨论树在其他更一般的应用中的使用。在这一章,我们将·了解树是如何用于实现几个流行的操作系统中的文件系统的。·了解树如何用来计算算术表达式的值。·指出如何利用树支原创 2021-01-06 15:54:58 · 161 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_队列ADT
像栈一样,队列(queue)也是表。然而,使用队列时插入是在一端进行的,而删除则是在另一端进行的。队列的基本操作是 enqueue(入队),它是在表的末端(称为队尾)插入一个元素;dequeue(出队),它是删除(并返回)表的开头(叫作队头)的元素。对于每一个队列数据结构,我们保留一个数组 theRay以及位置 front和back,它们代表队列的两端。我们还要记录实际存在于队列中的元素的个数 currentsize。操作应该是清楚的。要 enqueue元素x,可将 currentsize和back原创 2021-01-05 22:19:56 · 188 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_栈ADT
3.6 栈ADT栈(stack)是限制插入和删除操作只能在一个位置上进行的表,该位置是表的末端,称为栈的顶(top)。对栈的基本操作是push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行访问。栈有时又称为LIFO(后进先出)表。普通的清空栈的操作和判断是否空栈的测试都是栈的操作指令系统的一部分,但是,对栈所能够做的所有操作基本上就是push和pop操作一般的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素。3.原创 2021-01-05 10:22:45 · 277 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_双向链表(list)的实现
回顾一下,前面提到的ist类将要作为双向链表来实现,并且我们需要修改指向表两端的指针。只要操作是发生在已知位置,这样做就可以保证每个操作的时间消耗为常量。这个已知位置可以是末尾,也可以是迭代器指定的位置。考虑到设计需要,我们需要提供下面的4个类:(1)List类本身。包含连接到表两端的链接、表的大小以及一系列的方法(2)Node类。该类看起来像是私有的嵌套类。一个结点包含数据和用来指向其前和其后的结点的指针,以及适当的构造函数。(3)const iterator类。该类抽象了位置的概念,是一个公有的原创 2020-12-28 21:24:52 · 206 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_向量(vector)的实现
3.4向量的实现在本节中,给出了一个可用的 vector类模板的实现。vector是基本类类型,这意味着不同于C++中的基本数组,vecto可以复制并且其占用的内存可以自动回收(通过其析构函数)。我们已经讨论了C+基本数组的一些重要特性数组就是指向一块内存的指针变量:实际的数组的大小必须由程序员单独确定。内存块可以通过new[]来分配,但是相应地也就必须用 delete[]来释放。内存块的大小不能改变(但是可以定义一个新的具有更大内存块的数组,并且用原来的数组来将其初始化,然后原来的内存块就可以释原创 2020-12-23 19:28:08 · 333 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_抽象数据类型(ADT)、表ADT、STL中的向量和表
第三章 表、栈和队列本章讨论最简单和最基本的三种数据结构。实际上,每一个有意义的程序都将明晰地至少使用一个这样的数据结构,而栈则在程序中总是要间接地用到,而不管你在程序中是否进行了声明。本章将:介绍抽象数据类型(ADT)的概念。阐述如何对表进行高效的操作。●介绍栈ADT及其在实现递归方面的应用。●介绍队列ADT及其在操作系统和算法设计中的应用。在本章中,给出了两个库类 vector和1ist的重要子集的实现代码。3.1抽象数据类型(ADT)抽象数据类型(abstract data type,原创 2020-12-22 12:42:34 · 1029 阅读 · 0 评论 -
数据结构与算法分析笔记(c++)_chapter2算法分析_数学基础、模型、分析的问题、运行时间计算
第二章 算法分析算法(algorithm)是为求解一个问题需要遵循的、被清楚地指定的简单指令的集合。本章将讨论·如何估计一个程序所需要的时间。·如何将一个程序的运行时间从天或年降低到不足一秒。·粗心地使用递归的后果。·用于将一个数自乘得到其幂以及计算两个数的最大公因数的非常有效的算法。2.1数学基础我们比较它们的相对增长率(relative rates of growth)。如果我们用传统的不等式来比较增长率,那么第一个定义是说T(N)的增长率小于等于(≤)f(N)的增长率。第二个定义T原创 2020-12-21 21:00:40 · 555 阅读 · 0 评论 -
数据结构与算法分析笔记(C++)_模板、使用矩阵
1.6模板与许多算法的典型特征一样,顺序扫描算法是类型无关的。所谓类型无关,就是说这种算法的逻辑与存储在数组中的项的类型无关。相同的逻辑可以适用于整数、浮点数或者具有可比性的任何类型。本书描述的算法和数据结构都是类型无关的。本节论述在C++中如何用模板(template)来写类型无关的算法(也称为泛型算法)。我们先讨论函数模板,然后是类模板。1.6.1函数模板函数模板(function template)不是真正的函数,而是一个用以产生函数的公式。template声明的行显示Comparab1e原创 2020-12-17 11:04:27 · 387 阅读 · 2 评论 -
数据结构与算法分析笔记(C++)_c++类、c++细节
1.4C++类本书中提供了许多数据结构。所有的这些数据结构都是用来存储数据(通常是相同类型项的集合)的对象,并且提供处理这些集合的函数。在C++(或者其他编程语言)中,这通过使用类完成。本节讨论C++类。1.4.1基本class语法在C++中类由成员(member)构成。成员可以是数据,也可以是函数,其中函数称为成员函数(member function)。类中的每一个实例都是一个对象。每一个对象包含类中指定的数据成员(除非这些数据成员是static,否则这是一个可以暂时安全忽略的细节)。成员函数作用于原创 2020-12-15 16:04:04 · 467 阅读 · 0 评论