
数据结构
文章平均质量分 62
Jammm
除了聪明 没有什么好说的 除了学习 没有什么好干的
展开
-
七大常见排序算法总结
七大常见排序算法&&复杂度&&稳定性 排序方法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 直接插入排序 O(N^2) O(N) O(N^2) O(1) 稳定 希尔排序 O(N^1.3) O(N) O(N^2) O(1) 不稳定 选择排序 ...原创 2018-06-11 16:52:07 · 530 阅读 · 0 评论 -
二叉树--二叉搜索树的实现
搜索环境静态环境:搜索结构在执行插入和删除等操作的前后不发生变化。这种结构操作简单,效率不高,而且需要处理一出问题。 动态环境:为了保持较高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能会发生变化 前者称为静态搜索结构,后者称为动态搜索结构。二叉搜索树折半查找,每次从搜索序列的中间进行搜索,把区间缩小一半,通过有限次的迭代,很快就能逼近到所要寻找的元素...原创 2018-07-15 02:08:08 · 396 阅读 · 0 评论 -
堆---实现最小堆及堆的插入与删除
堆堆在优先级队列的各种实现中,是最高效的一种数据结构 假定在各个数据记录(或元素)中存在一个能够标识数据记录(或元素)的数据项,并将依据该数据项对数据进行组织,则可数据项成为关键码(key) 如果有一个关键码的集合K = {k0 , k1 , k2 , … , kn-1},把它的所有元素按完全二叉树的顺序存储存放在一个一维数组中。并且满足: ki <= k2i+1 且 ki &...原创 2018-07-07 23:52:10 · 31194 阅读 · 1 评论 -
七大排序算法--快速排序及优化
快速排序简单快排快速排序(Quick Sort)也叫做分区排序,是目前应用最广泛的排序算法。在C++标准库中的排序程序就被称作qsort,因为快速排序是其实现中的最基本算法。是一种不稳定的算法。经过上面的图解,相信聪明的你们已经明白了快排的奥义 但是 这样的排序算法排序算法有一个致命的弱点,当序列已经是有序序列时,其递归树成为单枝树,成为最坏的情况优化快排三...原创 2018-07-24 23:38:45 · 676 阅读 · 0 评论 -
七大排序算法--归并排序及优化
归并排序利用分治法的思想,归并排序将待排序的元素序列分成两个长度相等的子序列,为每个子序列排序,然后再将他们合并成一个序列。 归并排序不依赖待排序元素的序列的初始排列,这样就避免了快排的最差情况。 在执行归并算法时,先将划分的子序列复制到辅助数组中,然后将子序列按顺序存到原数组中。 这是一个稳定的排序算法,时间复杂度为O(nlog2^n)。代码实现 首先将序列进行递归划分成最小...原创 2018-07-24 00:08:21 · 622 阅读 · 0 评论 -
七大排序算法---堆排序
堆排序第一步:根据初始输入数据,利用堆的调整算法 siftDown() 形成初始堆 第二步:通过元素交换和重新调整堆进行排序。建堆(大堆)轻松教你建堆→ 上面链接是建立小堆的,建立大堆在理解小堆之后,也是能轻松写出来的。代码实现//构造函数maxHeap(T * arr, int sz) { heap = new T[sz]; ...原创 2018-07-11 22:10:33 · 326 阅读 · 0 评论 -
二叉树---前中序数组建立唯一二叉树
二叉树的个数具有n个结点的不同的二叉树有多少种?这与用栈得出的从1到n的数字有多少种不同的排列具有相同的结论。 那么,利用给定了一颗二叉树的前序序列(ABHFDECKG)和中序序列(HBDFAEKCG)能否唯一的确定一颗二叉树?前序序列中,第一个字母A一定是数的根结点。中序序列中,被划分为两个子序列:((HBDF)A(EKCG)),这样与二叉树第一次近似。 然后,取前序序列的下一个...原创 2018-07-04 00:26:27 · 988 阅读 · 0 评论 -
队列---链式队列及双端队列实现
链式队列链式队列是基于单链表的一种存储方式。 在单链表的每一个节点中有两个域:data域存放队列元素的值,link域存放单链表下一个结点的地址。队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点。队列的队头元素存放在单链表的第一个结点内,若要从队列中退出一个元素,必须从单链表中删去第一个结点。存放着新元素的结点应插在队列的队尾,即单链表的最后一个结点后面,这个...原创 2018-07-03 00:20:21 · 1275 阅读 · 0 评论 -
数据结构---单链表(C++实现)
单链表线性表由于在内存上顺序存储,在插入和删除元素时效率很低。单链表通过链式存储,适用于插入和删除频繁,储存空间不定的情形。单链表的一个存储结点(node)包括两个部分:数据域(data)和指针域(link) 数据域:存储线性表的一个数据元素 指针域:存储下一个节点的首地址 只能通过头指针(pHead)进行操作:链表的第一个结点的地址可以通过链表的头指针找到,但是其他结点的...原创 2018-06-20 16:01:09 · 5307 阅读 · 1 评论 -
队列---简单实现杨辉三角求二项式的系数值
队列队列是另一种限定存取位置的线性表。它只允许在表的一端插入,在另一端删除。允许插入的一端叫做队尾,允许删除的一端叫做队头。 利用数组建立队列 由上图对队列的描述来看,定长的数组很快就会溢出。 但是,这种“溢出”可能是假溢出,因为数组的前端可能还有空位置。为了能够充分的利用数组的存储空间,把数组的前端和和后端连接起来,形成一个环形的表,让队列成为一个循环队列。 循环队列:数组首...原创 2018-06-30 00:56:47 · 1860 阅读 · 0 评论 -
栈和递归---斐波那契数列的非递归实现
递归求裴波那契数列的第n项Fib(n)的公式为: f(n) = {n,Fib(n−1)+Fib(n−2),n=0或1n>=2{n,n=0或1Fib(n−1)+Fib(n−2),n>=2\begin{cases}n, & \text{n=0或1} \\Fib(n-1)+Fib(n-2), & \text{n>=2}\end{cases} 代码实现l原创 2018-06-24 22:19:56 · 8830 阅读 · 1 评论 -
数据结构----顺序表(C++实现)
顺序表顾名思义,就是按顺序排列的表。在顺序表中,各个表象的逻辑顺序和其存放的物理顺序一致。在对顺序表的访问中,通过下标,既可以顺序访问,又可以随机访问。 顺序表的定义描述顺序表的存储表示有两种方式:静态方式和动态方式 静态方式#define maxSize 100typedef int T;typedef struct{ T data[maxSi...原创 2018-06-17 12:22:20 · 1604 阅读 · 3 评论 -
七大排序算法---选择排序及优化
思路分析在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。 时间复杂度O(N^2) 不稳定的排序代码实现void SelectSort(int array[], int size){...原创 2018-06-15 10:42:22 · 1658 阅读 · 3 评论 -
栈---逆波兰表达式(RPN)的计算
表达式表达式 = 操作数(运算对象) + 操作符(运算符) + 分界符 算数表达式有三种表示:(逆波兰表达式又称为后缀表达式)中缀表达式(infix):<操作数><操作符><操作数>例如:A+B前缀表达式(prefix):<操作符><操作数><操作数>例如:+AB后缀表达式(postfix):<操作数...原创 2018-06-22 15:51:32 · 2403 阅读 · 0 评论 -
栈---实现顺序栈及简单的括号匹配问题
栈通常情况下,栈(Stack)可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端称作栈顶(top),不允许插入和删除的一端称作栈底(bottom)。当栈中没有任何元素时则成为空栈。 栈的分类栈的抽象数据类型有两种典型的存储方式:顺序栈:基于数组的存储表示链式栈:基于链表的存储表达方式代码实现//顺序栈的实现#include<stdl...原创 2018-06-21 15:46:16 · 3978 阅读 · 0 评论 -
七大排序算法---希尔排序(插入排序优化)
思路分析思想:插入排序中标记的元素只能一步一步的移动到目标位置,这样会消耗大量的时间,如果可以一次移动好几个单元呢? 希尔排序,通过变量gap,让原本间隔为一的数组,逻辑上变成间隔为gap的数组再进行直接排序,通过gap的逐渐减小,逐步实现数组的有序。当gap=1时,数组已经基本有序,只需要移动个别即可。 由于标记元素跳跃式的插入方式,可能会插入到其他分组较小的元素之前,所以是不稳定的。 ...原创 2018-06-12 09:05:41 · 392 阅读 · 0 评论 -
七大排序算法---直接插入排序及折半优化
思路分析将一个待排序元素,按其大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。 简单来说:end指已经排好数组的最后一个元素,end找到插入的位置(设置一个temp,temp为已经排序好数组的下一个元素),用temp与end比较,如果temp代码实现void InsertSort(int array[], int size){ int en...原创 2018-06-11 18:38:33 · 451 阅读 · 0 评论 -
图示讲解AVL平衡二叉树的左旋和右旋
AVLTree高度平衡的搜索二叉树 一棵平衡树,或是空树,或是具有以下性质的二叉搜索树:左子树和右子树都是AVL树,且左右子树的高度之差的绝对值不超过1。 该二叉树,根结点的右子树高度为3,左子树高度为2。结点上方的数字为平衡因子,因为右子树高度比左子树高度大1,所以根结点的平衡因子为1。 一颗平衡二叉树,如果有n个结点,其高度可保持O(log2^n),平均搜索长度也可以保持在O(l...原创 2018-07-22 22:58:55 · 24297 阅读 · 11 评论