数据结构与算法
q302989778
这个作者很懒,什么都没留下…
展开
-
静态顺序表的基本操作
·什么是静态顺序表:顺序表:用一段地址连续的存储单元依次存储数据元素的线性结构。那么什么又是线性结构呢?线性结构:线性结构是一个有序元素的集合,常用的线性结构有:线性表、栈、队列、双队列、数组以及串。我们拿一个链表来进行举例,如下图:如图可知线性表中数据与数据之间存在一对一的关系,即除第一个元素和最后一个元素外,每个元素都有唯一的直接前驱和唯一的直接后继,第一个元素没有前驱...原创 2018-10-26 15:16:07 · 232 阅读 · 0 评论 -
堆排序
·什么是堆排序我们先看一下堆排序的样子:那么在对于一个无序的序列,如何进行调整呢?我们可以按照以下步骤:1.设一个节点的下标为parent。2.找到该节点的左孩子left=parent*2+1。3.如果该节点拥有右孩子right=parent*2+2,比较并找出左右孩子中最小的孩子。4.如果parent大于左右孩子的最小值,则进行交换,否则不变。5.递归直到所有节点...原创 2018-11-24 15:11:27 · 199 阅读 · 0 评论 -
插入排序
·什么是插入排序在我们插入第i个元素时,前面的arr[0]……arr[i-1]已经排好序,我们只要将arr[i]依次与前面的i-1个数比较,找到合适的位置进行插入,然后在将arr[i]后面的每个元素依次后移一个位置,那么就形成了新的有序的序列,然后我们重复上述步骤,直至所有元素排序完成。所以,插入排序的时候我们只需要现将第一个元素拿出来,那么这个元素就是一个有序的序列(尽管只有一个),然后...原创 2018-11-17 22:59:07 · 831 阅读 · 0 评论 -
希尔排序
·什么是希尔排序首先我们要清除的是,希尔排序是插入排序的一种改进,又称“缩小增量排序”。希尔排序是根据步长将一组序列分成多组,再在不同的组中进行插入排序,当步长不断减小直至1时,希尔排序便完成了。下面是图例:·时间复杂度希尔排序的时间复杂度取决于它的所取的增量函数,目前最好的是比较和移动次数减少至n^1.3。这也是他的最小时间复杂度O(n^1.3)。·空间复杂度同之...原创 2018-11-19 21:28:55 · 169 阅读 · 0 评论 -
选择排序
·什么是选择排序在第i趟排序时,在后面n-i个元素中选出关键码最小的元素,插入到有序数列的第i个元素。那么我们首先只需要将一个序列中的所有元素进行比较,选出关键码最小的元素,判断它是否为首元素,如果是首元素就不变,否则将它和首元素进行交换,这样就完成了一趟排序。重复上述操作,直至n-2趟完成后,还剩下最后一个元素,这个元素因为是关键码最大的,所以不需要再进行排序操作,这样就完成了一次选择排...原创 2018-11-19 14:57:10 · 134 阅读 · 0 评论 -
堆的基本操作
·什么是堆堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。(摘自百度百科)具体来说就是将所有元素按照完全二叉树的顺序存储方式并且满足堆中某个节点的值总是不大于或不小于其父节点的值这一性质存储在一个一维数组中,那么我们就称为堆。如下图:·大小堆的定义刚才我们在给出性质的时候提到了每个节点的值总是不大于或不小于其父节点的值。那么这就是堆中的第二个特...原创 2018-11-04 20:41:49 · 226 阅读 · 0 评论 -
栈的基本操作
·什么是栈栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另外一端称为栈底。不含任何元素的栈称为空栈,栈又称为先进后出的线性表。下面我我们画出一个链式栈的图:那么在栈中的出栈和入栈就像下面一样:·代码及其实现·Stack.c#include<stdio.h>#include<stdlib....原创 2018-10-30 14:40:42 · 1176 阅读 · 0 评论 -
带头节点的双向循环链表的基本操作
·什么是带头结点的双向循环链表我们直接给出带头结点的双向循环链表的图示:那么有无头结点的区别是什么呢?头节点是为了操作的统一、方便而设立的,一般来说,头节点放在第一元素节点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等)。有头节点后,对在第一元素节点前插入节点和删除第一节点,其操作与对其他节点的操作统一了。而且无论链表是否为空,头指针均不为空。第二个问题,...原创 2018-10-27 18:08:08 · 2257 阅读 · 0 评论 -
链表的基本操作
·什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 如下图:·代码及其实现·Linklist.h#ifndef __LINKLIST_H__ #defin...原创 2018-10-27 14:35:27 · 204 阅读 · 0 评论 -
桶排序
·什么是桶排序桶排序就是我们先申请一个范围的数组(桶),我们的数组里面全部初始化为0,我们把所有要排序的元素按照数组的下标进行映射,如果这个元素存在,那么数组对应的下标的值加一,最后我们遍历这个数组,如果value大于0,我们就进行输出。下面放个图吧:·代码#include<iostream>#include<vector>int main(){...原创 2019-04-09 22:54:40 · 116 阅读 · 0 评论