随笔分类 -  数据结构

摘要:一、简述 如何把一个单链表进行反转? 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用 3 个指针遍历单链表,逐个链接点进行反转。 方法3:从第 2 个结点到第 N 个结点,依次逐结点插入到第 1 个结点(head 结点)之后,最后将第一个结点挪到新表的表尾。 方法4: 递 阅读全文
posted @ 2019-09-22 16:18 fengMisaka 阅读(1102) 评论(2) 推荐(0) 编辑
摘要:一、简介 也是一种平衡二叉树,但每个节点有一个存储位表示节点的颜色,可以是红或黑。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL 树的高度 二、性质 如下图所示, 阅读全文
posted @ 2019-09-21 17:24 fengMisaka 阅读(561) 评论(0) 推荐(0) 编辑
摘要:首先是需要定义一个哈希表的结构以及一些相关的常数。其中 HashTable 就是哈希表结构。结构当中的 elem 为一个动态数组。 一、哈希表基本操作 1.1 初始化操作 有了结构的定义,我们可以对哈希表进行初始化: 1.2 构造哈希函数操作 为了插入时计算地址,我们需要定义哈希函数,哈希函数可以根 阅读全文
posted @ 2019-09-21 14:43 fengMisaka 阅读(3808) 评论(1) 推荐(0) 编辑
摘要:一、什么是哈希表? 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字 key 对应一个存储位置 f(key)。 我们把这种对应关系 f 称为 哈希函数 (也叫散列函数)。采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为 哈希表 (Hash ta 阅读全文
posted @ 2019-09-20 17:44 fengMisaka 阅读(1176) 评论(0) 推荐(0) 编辑
摘要:一、什么是平衡二叉树? 平衡二叉树 (Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉排序树退化成链表的问题,把插入,查找,删除的时间 阅读全文
posted @ 2019-01-31 15:39 fengMisaka 阅读(1108) 评论(0) 推荐(0) 编辑
摘要:一、什么是二叉排序树? 对于 普通的顺序存储 来说, 插入、删除操作很简便,效率高 ;而这样的表由于 无序 造成 查找的效率很低 。 对于 有序线性表 来说(顺序存储的), 查找 可用折半、插值、斐波那契等查找算法实现, 效率高 ;而因为要 保持有序 ,在 插入和删除时不得不耗费大量的时间 。 那么 阅读全文
posted @ 2019-01-30 18:57 fengMisaka 阅读(2245) 评论(0) 推荐(0) 编辑
摘要:一、什么是二叉树? 1.1 定义 二叉树 ,是度为二的树,二叉树的每一个节点最多只有二个子节点,且两个子节点有序。 1.2 二叉树的重要特性 (1)二叉树的第 i 层上节点数最多为 2n 1; (2)高度为 k 的二叉树中,最多有 2k 1个节点; (3)在任意一棵二叉树中,如果终端节点的度为 n, 阅读全文
posted @ 2019-01-30 15:10 fengMisaka 阅读(2431) 评论(4) 推荐(0) 编辑
摘要:一、树的定义 1.1 定义 树(Tree)是 n(n =0) 个结点的有限集。 n=0 时称为 空树 。在任意一棵非空树中,有且仅有一个特定的称为 根 的结点。当 n 1 时,其余结点可分为 m (m 0) 个互不相交的有限集 T1、T2、……、Tm。其中每一个集合本身又是一棵树,并且称为根的 子树 阅读全文
posted @ 2019-01-27 20:27 fengMisaka 阅读(692) 评论(0) 推荐(1) 编辑
摘要:一、什么是链队列? 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。 为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向尾结点,如下图所示: 空队列时,front和rear都指向头结点,如下图所示。 链队列的结构为: 二、基本操作 2.1 阅读全文
posted @ 2019-01-27 20:23 fengMisaka 阅读(978) 评论(0) 推荐(0) 编辑
摘要:一、什么是顺序队列? 队列的 顺序储存结构 :用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front 指针指向队头元素,rear 指针指向队尾元素的下一个位置,当 front=rear 时,为空队列,结构如下图所示: 顺序队列的结构代码如下: 假设是长 阅读全文
posted @ 2019-01-27 20:14 fengMisaka 阅读(4220) 评论(0) 推荐(2) 编辑
摘要:一、什么是链栈? 链栈:是指利用链式存储结构实现的栈。 想想看栈只是栈顶来做插入和删除操作,栈顶放在链栈的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它俩合二为一呢,所以比较好的办法是把栈顶放在链栈的头部(如下图所示)。另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也 阅读全文
posted @ 2019-01-27 20:06 fengMisaka 阅读(2570) 评论(0) 推荐(0) 编辑
摘要:一、什么是栈? 在我们软件应用中,栈这种后进先出数据结构的应用是非常普遍的。比如 Word、 Photoshop 等文档或图像编辑软件中, 都有撤销(undo)的操作,也是用栈这种方式来实现的。 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。 我们把 允许插入和删除的一端称为栈顶(top 阅读全文
posted @ 2019-01-27 19:59 fengMisaka 阅读(1735) 评论(0) 推荐(0) 编辑
摘要:一、类定义 单链表类的定义如下: 二、构造函数 为头结点 申请内存,数据域置为 0,指针域指向空。 三、析构函数 调用清空单链表方法,并且销毁头结点。 四、清空链表操作 循环销毁除头结点外的各结点。 清空链表和析构函数的区别 :清空链表是循环销毁除头结点外的各结点,析构函数是销毁所有结点,包括头结点 阅读全文
posted @ 2019-01-27 12:28 fengMisaka 阅读(452) 评论(0) 推荐(0) 编辑
摘要:一、类定义 顺序表类的定义如下: 二、构造函数 传入用户指定的容量参数赋值给 ,声明指针 指向 数组, 置0。 三、析构函数 在析构函数中释放顺序表指针申请的内存空间,并指向 避免成为野指针。 四、判空和获取顺序表长度操作 等于 0 则表示顺序表未空;返回 获取长度。 五、获取元素操作 先判断顺序表 阅读全文
posted @ 2019-01-23 21:12 fengMisaka 阅读(735) 评论(0) 推荐(0) 编辑
摘要:一、什么是双向链表? 双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。 既然单链表也可以有循环链表,那么双向链表当然也可以是循环表。 线性表的双向链表存储结构如下: 阅读全文
posted @ 2019-01-23 15:42 fengMisaka 阅读(412) 评论(0) 推荐(0) 编辑
摘要:一、什么是循环链表? 将单链表中终端结点的指针端自空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为 单循环链表 ,简称 循环链表 (circular linked list)。 相比单链表,循环链表解决了一个很麻烦的问题。 即可以从任意一个结点出发,而不一定是要从头结点出发, 阅读全文
posted @ 2019-01-23 14:33 fengMisaka 阅读(1142) 评论(0) 推荐(0) 编辑
摘要:一、什么是单链表? 单链表:使用链式存储结构的线性表。单链表中的数据是以结点来表示的,每个结点的构成:数据域(数据元素的映像) + 指针域(指示后继元素存储位置)。如果单链表不做特别说明,一般指的是 动态 单链表。 在 C 语言中可用结构指针来描述单链表: 从这个结构定义中可以看出, 结点由存放数据 阅读全文
posted @ 2019-01-22 23:08 fengMisaka 阅读(2374) 评论(0) 推荐(0) 编辑
摘要:一、什么是顺序表? 使用 顺序存储方式 的顺序表即为 顺序表 ,存取时间性能为 ,示意图如下所示: 二、顺序表的基本操作(用静态数组实现) 在编写顺序表的基本操作函数前,有几个注意点: 插入操作中,需考虑顺序表已满的情况,删除、获取操作中,需考虑顺序表为空的情况; 在各操作中,当涉及到位置 时,都应 阅读全文
posted @ 2019-01-22 15:23 fengMisaka 阅读(2115) 评论(0) 推荐(0) 编辑
摘要:线性表是数据结构中最常用和最简单的一种结构。 一、线性表的定义 线性表,从名字上你就能感觉到,是具有像线一样的性质的表。例如一个班级的小朋友,一个跟着一个排着队,有一个打头,有一个收尾,当中的小朋友每一个都知道他前面一个是谁,他后面一个是谁,这样如同有一根线把他们串联起来了,就可以称之为线性表。 线 阅读全文
posted @ 2019-01-22 00:31 fengMisaka 阅读(756) 评论(0) 推荐(0) 编辑
摘要:在《数据结构》课程中,谈到算法是为了帮助理解好数据结构,并不会详细谈及算法的方方面面。 算法:算法是解决特定问题求解步骤的描述, 在计算机中表现为指令的有限序列, 并且每条指令表示一个或多个操作。 1 两种算法的比较 现在要求你写一个求 1+2+3+……+100 结果的程序,你应该怎么写呢? 大多数 阅读全文
posted @ 2019-01-21 23:58 fengMisaka 阅读(622) 评论(0) 推荐(0) 编辑