
数据结构与算法
一些常见的数据结构与算法
又偷吃我氮泵_
心中有火 眼里有光
展开
-
C++数据结构:红黑树的原理以及实现
前言之前我们学习了AVL树,说AVL树是具有特殊性质的二叉搜索树,而红黑树这种数据结构也是有着特殊性质的二叉搜索树,原创 2020-07-30 23:46:42 · 901 阅读 · 0 评论 -
C++数据结构:AVL树的原理以及实现
前言二叉搜索树虽然有较高的查找效率,但在数据有序或接近有序的情况下,二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一:AVL树AVL树又称高度平衡二叉搜索树。它可以是一颗空树,也可以是具有以下性质的二叉原创 2020-07-28 16:38:02 · 316 阅读 · 0 评论 -
C++数据结构:二叉搜索树的原理以及实现
前言我们今天在二叉树的基础上来梳理学习二叉搜索树的相关知识点,二叉搜索树也常被归类为一种搜索算法,并且在后续map和set的学习中需要二叉搜索树作为铺垫,有助于我们理解map和set的特性,不仅如此,二叉搜索树自身也是有着非常多的特性和优势。一:二叉搜索树的概念二叉搜索树(Binary Search Tree)又称二叉排序树和二叉查找树。它可以是一颗空树,也可以是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小于根结点的值。若它的右子树不为空,则右子树上所有结点的值都大于根结原创 2020-07-25 22:40:10 · 401 阅读 · 0 评论 -
排序算法(四):归并排序(递归写法与非递归写法)
归并排序基本思想:归并排序是一种采用分治策略,将待排序序列分成若干个不可再分的子序列,先使每个子序列有序,再使子序列段间有序的高效排序算法。排序过程:分治思想原创 2020-05-24 15:18:14 · 606 阅读 · 0 评论 -
排序算法(三):交换排序(冒泡排序、快速排序的递归与非递归)
交换排序基本思想:所谓交换,就是根据序列中两个元素键值的比较结果来交换这两个元素在序列中的位置,将键值较大的元素向序列的尾部移动,键值较小的元素向序列的前部移动。排序分类:交换排序分为冒泡排序和快速排序一:冒泡排序排序过程:...原创 2020-05-20 12:34:15 · 333 阅读 · 0 评论 -
排序算法(二):选择排序(直接选排、堆排序)
选择排序基本思想:选择排序将序列分为已经有序和暂时无序两部分,遍历暂时无序的部分,将其中最小的元素放到有序序列的末尾,直到全部待排序的元素排完为止。排序分类:选择排序分为直接选择排序和堆排序一:直接选择排序排序过程:...原创 2020-05-15 17:26:37 · 695 阅读 · 0 评论 -
排序算法(一):插入排序(直接插排、希尔排序)
插入排序基本思想:插入排序将序列分为已经有序和暂时无序两部分,遍历暂时无序的部分,将该部分第一个元素插入到已经有序部分的合适位置,遍历完毕则完成了排序,得到一个新的有序序列。排序分类:插入排序分为直接插入排序和希尔排序。直接插入排序排序过程:代码实现:...原创 2020-05-12 18:43:53 · 463 阅读 · 0 评论 -
栈和队列
在对顺序表和链表有了一定的了解之后,我们来讨论两种更为具体的模型——栈和队列。栈栈的基本描述栈(stack)是一种限定只在尾部插入和删除的模型结构,根据栈的这个特点我们把栈的修改原则称为先进后出,后进先出原则,我们把栈的头部称为栈底,栈的尾部称为栈顶,也就是说栈的一系列操作都是在栈顶完成的。栈的图解栈的基本操作相对于顺序表和链表来说栈的操作就要简单许多,因为栈的一系列操作仅仅在栈顶完...原创 2019-11-17 13:32:51 · 228 阅读 · 0 评论 -
无头单链表的增删查改
我们之前接触过顺序表(如果没有了解的童鞋可以看看我的另一篇Blog)数据结构:顺序表我们知道顺序表存储数据可以很容易的对数据进行访问(即随机下标访问),但是它也有自己的缺陷:比如在频繁增删的场景下时间复杂度很不友好,扩容时会导致空间的浪费等一系列问题,面对这些问题,还有一种存储结构被称作链表。今天我们就来引入了链表的概念:链表是逻辑上有连续关系,但是物理上并不连续的链式存储结构。数据的...原创 2019-11-08 11:30:46 · 271 阅读 · 0 评论 -
顺序表
顺序表是什么呢?顾名思义,顺序表是物理地址连续的存储单元依次存储数据的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。顺序表和数组有什么区别呢?顺序表比数组更约束,顺序表物理地址上必须连续存储,数组是顺序表在实际编程中的具体实现方式。顺序表分为静态顺序表和静态顺序表(主要区别在于他们的容量是否可变)静态顺序表静态顺序表的概念:顺序表的容量在静态时期(编译期间)确定,大...原创 2019-11-07 14:43:32 · 3858 阅读 · 1 评论 -
时间复杂度和空间复杂度
刚接触数据结构(Date Structure)的童鞋可能会存在各种各样的疑问。什么是数据结构?什么是算法?同一个问题有不同的算法,到底哪一种好?希望我的这篇Blog可以帮大家解决一点心中的疑惑,下面我们来一起看看数据结构、算法、时间复杂度和空间复杂度吧!什么是数据结构?Data Structure 是计算机存储、组织数据的方式,指相互之间存在一种或者多种特定关系的数据元素的集合什么是...原创 2019-11-04 17:53:30 · 296 阅读 · 0 评论