
数据结构
Jakob_Hu
当你无助时
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
顺序表专题(1)——顺序表
顺序表概念基本形式顺序表基本布局元素外置的顺序表基本布局图解顺序表的实现一体式实现分离式结构图解元素存储区操作元素存储区替换元素存储区扩充 概念 需求:将一组(通常是同一类型)的几个数据元素作为一个整体管理和使用,需要创建这种元素的组,并用变量对他们进行记录。这样一组数据的元素个数可能发生变化(因为增删改查等操作)。 对于这种需求,最简单的解决方式是将这组元素视为一个序列,可以将这个结构抽象为线性...原创 2019-05-17 13:53:34 · 1243 阅读 · 0 评论 -
顺序表专题(2)——单向链表
单向链表概念节点的实现单链表的操作单链表实现单向链表与顺序表对比空间对比时间对比 概念 单向链表也称单链表,是链表中最简单的形式,每个节点包含两个域(两个属性),一个元素域和一个链接域,其中,链接域指向下一个节点的地址,而最后一个节点的链接域指向的是一个空值。 节点的实现 以Python代码实现, class SingleNode: """单链表节点""" def __init__(self...原创 2019-05-17 17:15:03 · 248 阅读 · 0 评论 -
顺序表专题(3)——双向链表
双向链表概念双向链表节点实现双向链表实现 概念 双向链表是一种更复杂的链表,每个节点有两个指针域,一个指向前一个节点,如果当前节点为头节点时,指向空值;另一个链接指向下一个节点,如果当前节点为尾节点时,指向空值。 以一个简单的例子进行演示,如下, 双向链表节点实现 class DoubleNode: def __init__(self, item): self.prev...原创 2019-05-17 17:34:00 · 255 阅读 · 0 评论 -
顺序表专题(4)——单向循环链表
单向循环链表概念单向循环链表实现 概念 单向循环链表是单链表的一个变形,链表中最后一个节点的指针域不再指向None,而是指向链表的头节点。 单向循环链表实现 class SingleCycleLinkList: def __init__(self, node=None): self.__head = None self.__count = 0 ...原创 2019-05-17 18:05:01 · 236 阅读 · 0 评论 -
栈和队列专题(1)——栈
栈概念栈结构的实现顺序表实现单向链表实现访问私有变量方式(不推荐)重新定义栈节点 概念 栈(stack),也称为“堆栈”,是一种容器,可以存入数据元素、访问数据元素、删除数据元素。其特点是只能在容器的一端(成为栈顶,top)进行数据的添加(push)和输出(pop)运算。栈结构只允许在容器一端进行操作,因此按照后进先出(LIFO,last in first out)的原理进行运作。 上图就是栈结...原创 2019-05-17 20:42:05 · 247 阅读 · 0 评论 -
栈和队列专题(2)——队列
队列概念队列结构实现顺序表实现双向链表实现双端队列概念相关操作双端队列实现顺序表实现双向链表实现 概念 队列(Queue)是只允许在一端进行入队操作(enqueue),另一段进行出队操作(dequeue)的容器。不允许在队列中间进行操作。 队列是一种先进先出(FIFO,first in first out)的线性表。 队列结构实现 顺序表实现 class Queue: def __ini...原创 2019-05-17 20:59:56 · 1834 阅读 · 0 评论 -
排序专题(1)——排序算法与排序算法稳定性
排序算法及其稳定性排序算法排序算法稳定性 排序算法 排序算法:一种能将一串数据依照特定的顺序进行排列的算法。 排序算法稳定性 排序算法稳定性:稳定排序算法会让原本有相等key值的记录维持相对次序。 如果一个排序算法是稳定的,当有两个相等key值的纪录R和S,且在原本的列表中R出现在S之前,则在排序过的列表中依旧会保持R在S之前的状态。以下面的数对排序举例, (4, 1) (3, 1) (3, 7)...原创 2019-05-18 18:00:16 · 235 阅读 · 0 评论 -
排序专题(2)——冒泡排序
冒泡排序概念算法流程图解算法实现复杂度与稳定性 概念 冒泡排序是最简单的排序算法,它重复遍历需要排序的序列,每次比较两个元素,如果他们的顺序错误就把二者进行交换。遍历数组的操作重复的进行,直到再也没有需要交换的元素。冒泡排序就像是从 水底冒出的气泡,每一轮遍历过后,极值都会冒到序列的顶端。 算法流程 冒泡排序的运作如下(以升序排序为例): 比较相邻的元素,如果前者比后者大,则交换两个元素的位置。...原创 2019-05-20 13:32:41 · 410 阅读 · 0 评论 -
排序专题(3)——选择排序、插入排序
选择排序、插入排序概述选择排序算法概述算法实现算法时间复杂度与稳定性插入排序算法概述算法实现算法时间复杂度及稳定性 概述 将这两个排序算法一起讲解是因为这两个排序算法的共同特点是将需要排序的序列视为两部分。即已完成排序的部分和未完成排序的部分。每执行完一轮操作后,未完成排序的部分将得到的极值返回到完成排序的部分的末尾。 选择排序 算法概述 选择排序的工作原理具体如下, 首先在未排序的序列中寻找最...原创 2019-05-20 20:11:47 · 317 阅读 · 0 评论 -
排序专题(4)——希尔排序
希尔排序概述算法实现算法时间复杂度及稳定性 概述 希尔排序是对插入排序的改进,对要排序的序列定量分组,对每组使用插入排序算法。希尔排序的基本思想是将元素列在一个表中并对列分开进行插入排序。 以下面的例子进行演示, # 待排序序列 [54, 26, 93, 17, 77, 31, 44, 55, 20] # 第一轮 gap=4 54 77 20 26 3...原创 2019-05-20 20:49:51 · 272 阅读 · 0 评论 -
排序专题(5)——快速排序、归并排序
快速排序和归并排序快速排序(必须掌握)算法说明算法实现时间复杂度与稳定性归并排序算法说明算法实现时间复杂度与稳定性 将这两种排序一同讲解是因为这两个算法的实现过程中都使用了递归。 快速排序(必须掌握) 算法说明 快速排序,也叫划分交换排序。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据比另一个部分的都要小。之后再针对这两个部分的数据进行快速排序,同样可以分别将这两个部分的数据分成两...原创 2019-05-21 14:01:37 · 264 阅读 · 0 评论 -
排序专题(6)——堆排序
算法说明 堆排序与之前的排序算法不同,它建立在树结构的基础之上。 堆排序就是一个构建堆的过程(所谓堆就是一个二叉树),当按照升序排序时,构建大根堆;降序排序时,构建小根堆。 堆类型 说明 大根堆 让当前数组中最大的元素在堆顶也就是作为根节点,对于每个有左右子节点的节点而言,其左右子节点的值也都小于其值。 小根堆 与大根堆相反。 以序列:50 10 90 30 70 ...原创 2019-05-24 20:42:04 · 334 阅读 · 0 评论 -
线性代数(8)——线性系统(下)
线性系统通用的Gauss-Jordan消元法回顾Gauss-Jordan消元过程 上一节中对线性系统解的结构进行了更加复杂的说明,具体的步骤是使用Gauss-Jordan消元法将线性系统化为行最简形式,在本节中将对未知数个数和方程个数不匹配的情况进行讲解。 通用的Gauss-Jordan消元法 回顾Gauss-Jordan消元过程 前向过程 1)选择嘴上的主元化为1 2)主元下面所有行减去主元所...原创 2019-05-27 19:27:39 · 866 阅读 · 0 评论