数据结构
风雨中奔跑的小孩
这个作者很懒,什么都没留下…
展开
-
数据结构基础理论
目录 线性表 栈和队列 栈 队列 串 数组和广义表 数组 广义表 树和二叉树 二叉树 树和森林 哈弗曼树/霍夫曼树 图遍历与回溯 图 图的存储形式 图的遍历 生成树和最小生成树 双连通图和关节点 有向无环图及其应用 查找 静态查找表 动态查找 查找总结 B_树的B+树 B_树 B+树 哈希表 内部排序 外部排序 有效的算法设计 概念 ...原创 2018-08-14 10:59:56 · 1755 阅读 · 1 评论 -
程序猿必修课之数据结构(四)线性表2
上篇我们复习的线性表的顺序存储结构,它的最大缺点就是:插入和删除是需要移动大量元素,造成时间的浪费。 导致这个问题的原因是,相邻两个元素的存储位置也具有邻居关系,也就是说它们在内存中是挨着的,中间没有空隙,当然就无法快速插入,而删除后,当中就会留出空隙,自然需要弥补。链式存储就是为了解决这个问题而产生的。 线性表链式存储结构定义 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数...转载 2018-08-27 17:34:38 · 146 阅读 · 0 评论 -
程序猿必修课之数据结构(五)线性表3
循环链表 对于单链表,由于每个结点只存储了向后的指针,到了链表末尾就停止了向后链的操作,这样,结点就无法找到它的前驱结点了。 将单链表中终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。 循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是判断 p->next 是否等于头...转载 2018-08-27 17:35:05 · 177 阅读 · 0 评论 -
程序猿必修课之数据结构(六)栈1
栈的定义 栈(Stack)是限定仅在表尾进行插入和删除操作的线性表。 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称 LIFO 结构。 从上面这两段话,可以确定:首先栈是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系,只不过它是一种特殊的线性表。定义中说...转载 2018-08-27 17:35:29 · 212 阅读 · 0 评论 -
程序猿必修课之数据结构(七)栈2
栈的应用——递归 斐波那契(Fibonacci)是一个经典的递归例子。 斐波那契数列 数字 1,1,2,3,5,8,13......构成一个序列,它的特点是:前面相邻两项之和是后一项的值。用数学函数来定义是: 斐波那契数列 用递归实现打印出前 40 位的斐波那契数列数的代码如下: # include<stdio.h> int Fbi(int); int main(...转载 2018-08-27 17:35:45 · 159 阅读 · 0 评论 -
程序猿必修课之数据结构(八)队列
队列的定义 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。 队列的抽象数据类型 队列是特殊的线性表,因此它的各种操作类似线性表,不同的是插入数据只能在队尾进行,删除数据只能在队头进行。 ADT 队列(Queue) Data...转载 2018-08-27 17:36:04 · 230 阅读 · 0 评论 -
程序猿必修课之数据结构(九)串
串的定义 串(String)是由零个或多个字符组成的有限序列,又名字符串。 从定义中可以看出:、 串的字符数目是“有限”的,零个字符的串叫“空串(null string)”。 它是一个序列,相邻字符之间具有前驱和后继关系。 空格串 只包含空格的串叫“空格串”,它和空串的区别是:空格串是有内容有长度的,而且可以不止一个空格。 子串与主串 串中任意个数的连续字符组成的子序列称为该串的子串...转载 2018-08-27 17:37:04 · 340 阅读 · 0 评论 -
程序猿必修课之数据结构(十)树1
树是一对多的数据结构 树的定义 树(Tree)是 n (n ≥ 0)个结点的有限集。 n = 0 时,称为空树。 在任意一棵非空树中: 有且仅有一个特定的根(root)结点。 当 n > 1 时,其余结点可分为 m (m > 0) 个互不相交的有限集,其中每一个集合本身又是一棵树,并且称之为根的子树(SubTree)。 其实树的定义用到了递归的方法。 常用名词概念 ...转载 2018-08-27 17:37:21 · 206 阅读 · 0 评论 -
堆操作与堆排序
首先,我们来认识堆: 堆的建立:将给定的序列按层次遍历建立完全二叉树,然后从最后一个非终端结点开始自下向上逐步调整为堆。 这里就有两个重要的操作,shift_up(int t)和shift_down(int t),这样我们就建立了堆。 对于堆排序,就相当于每次取出堆顶的元素值,这样是从大到小排序的,因为建立的是大顶堆。堆排序是一种树型 选择排序。 现在来详细说一点:比如...转载 2018-08-14 14:29:03 · 231 阅读 · 0 评论