数据结构
数据结构
一个平凡的程序员
好好吃饭,好好生活,好好学习!
展开
-
线性表的链式存储结构——循环链表
循环链表:将单链表中终端结点的指针端又空指针改为指向头结点,就使得整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。原创 2016-11-04 21:12:17 · 499 阅读 · 0 评论 -
归并排序算法
归并排序,整体就是一个简单的递归过程,左边排好序,右边排好序,让其整体有序。让其整体有序的过程中用到了外排序的方法。坦白的说,这种排序不好去理解,归并的代码我是看了好久才学会的,自己也练了好多遍,感觉还是晕晕的,这种排序要靠自己去领悟的,我是用最笨的方法,把所有执行的过程全部写出来,结果自己看懂了!顺便也推出的它的时间复杂度,实在不好用语言说清楚的;下面我就先写出代码;然后画图推出它的时间复杂度...原创 2019-02-27 11:22:00 · 407 阅读 · 0 评论 -
堆排序算法
堆堆是一种特殊的完全二叉树二叉树树的每一层最多两个节点完全二叉树是二叉树的每一层都是排满的,或者最后一层没有排满,但是从左到右是依次遍满的。堆的分类堆分为大根堆和小根堆大根堆是每个子树的头结点是最大的小根堆是每个子树的头结点是最小的任何一个节点位置 i,它的左孩子位置是: i * 2+1;它的右孩子的位置是: i * 2+2;它的父节点的位置是: (i–1)/2;...原创 2019-03-03 13:29:41 · 431 阅读 · 0 评论 -
时间复杂度,插入排序,冒泡排序,选择排序
理解时间复杂度,插入排序,冒泡排序,选择排序什么是时间复杂度就是近似于约等于算法总的执行的次数;说白了时间复杂度就是近似约等于算法中常数操作的次数;时间复杂度使用O(n)(可以读big O n)来表示在一个算法之中,算法常数操作次数 * 每个数的常数操作的时间 = 算法总执行的时间;什么是常数操作一个样本执行和数量没有关系,每次都是固定时间完成,叫做常数操作。比如两个数加减乘除赋值...原创 2018-12-27 17:45:32 · 7147 阅读 · 2 评论 -
图的定义和各种术语总结
图的定义 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成; 通常表示为:G(V,E),G表示一个图,V是图G中顶点的集合,E是图G中边的集合; 注意: 在图中数据元素称之为顶点(Vertex),而且顶点集合有穷非空, 在图中任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示; 图的分类 1,按照有无方向,分为无向图和有向图; 无向图 如果图中任原创 2016-11-24 00:49:34 · 14086 阅读 · 7 评论 -
队列的链式存储结构及实现
队列的链式存储结构其实就是线性表的单链表,只不过它只能尾进头出,也称为链队列。为了操作方便讲队头指针指向链队列的头结点,而队尾指针指向终端节点。 空队列是这样 下面使用代码演示:这里写代码片原创 2016-11-12 13:44:36 · 715 阅读 · 0 评论 -
队列的顺序存储结构之循环队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端称为队头。 队列的顺序存储结构使用数组的实现,假设数组长度为N,这时删除队头元素的时候,这个元素后面的每一个元素都要移动,这样就会出队的性能会下降。如下图所示: 删除队首的元素A1,那么后面的原创 2016-11-12 10:31:54 · 2669 阅读 · 0 评论 -
线性表的顺序存储结构—数组实现
数据结构分按照视点不同分为逻辑结构和存储结构; 逻辑结构简单分为 线性结构 和非线性结构; 存储结构是指逻辑结构在计算机中的存储形式; 存储结构可分为 顺序存储结构 和 链式存储结构两种; 线性表首先是线性结构,是按照数逻辑结构划分;通俗理解说就是使用一根线可以把所有的数据元素都连接起来,数据之间一对一的关系;而线性表的顺序存储结构说的是线性表这种逻辑结构在计算机中的存储形式; 线性表的原创 2016-10-27 21:45:11 · 1254 阅读 · 2 评论 -
栈的链式存储结构以及实现
上图是栈的链式存储结构(简称链栈)的模型图,栈已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义。 链栈的结构代码实现如下:#include stdio.h>#include malloc.h>#include stdlib.h>typedef struct Node{ int data;//数据域 struct Node * pNext;//指针域原创 2016-11-05 09:55:53 · 685 阅读 · 0 评论 -
栈的顺序存储结构以及实现
栈是限定仅仅在表尾进行插入和删除操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈。 栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。原创 2016-11-05 09:54:28 · 597 阅读 · 0 评论 -
线性表的链式存储结构——双向链表
双向链表是在单链表的每个节点中,再设置一个指向其前驱结点的指针域。所以双向链表有两个指针域,一个指向直接后驱,另一个指向直接前驱。 如图示意图: 使用c代码表示某个节点只是添加了一个前驱指针:struct Node{ int data;//数据域 struct Node * pPrior;//直接前驱指针 struct Node * pNext; //直接后驱指针原创 2016-11-04 22:54:13 · 662 阅读 · 0 评论 -
快速排序算法
快速排序的主要是利用递归和分区域来排序,其中分区,主要是分成三个区域,小于区,等于区,大于区;主要的流程如下:比如某一个值 p来划分一个数组1,数组当前数 > p,当前数和大于区的前一个数交换,大于区向左扩,当前位置停在原地2,数组当前数 < p,当前数和小于区的后一个数交换,小于区向右扩,当前位置跳到下一个位置3,数组当前数 = p,当前数直接跳到下一个当前位置的索引ind...原创 2019-05-19 17:20:16 · 463 阅读 · 2 评论