算法与数据结构
文章平均质量分 92
经典算法+常用的数据结构
搬砖小张
Wechat Subscriptions “搬砖小张”
展开
-
数据结构(一)
概述数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。(通俗来讲就是数据在计算机上是如何组织和存储)按照数据结构中元素的相互关系可以分为4类:集合,线性结构,树形结构,图或网状结构。1.集合:结构中的元素除了同属于一个集合外无其他关系。2.线性结构:线性元素之间存在一个对一个的关系。3.树形结构:结构中元素之间存在一对多的关系。4图或网状结构:结构中的元素存在多对多的关系。以下将分为三个部分来说明常见的数据结构1.线性表(数组,链表,栈,队列)以及特殊的散列表(也叫哈希表)2.原创 2020-05-11 00:57:24 · 1654 阅读 · 0 评论 -
经典排序算法(一)
算法相关概念:1.稳定性如果a原本在b的前面,而a=b,排序之后a仍然在b的前面,则算法为稳定,否则为不稳定。即排序算法是否改变相同元素的初始顺序。2.时间复杂度一个算法的执行时间,去掉不定因素(如计算机的运行能力),算法的执行时间其实是受算法的输入和算法本身影响的,所以我们衡量一个算法的执行时间,可以通过基本运算的执行次数来衡量。通常,用T(N)表示基本运算的执行次数。而什么叫做基本运算...原创 2020-04-12 19:31:55 · 212 阅读 · 1 评论 -
数据结构(四)
平衡二叉树当二叉排序树遇到最坏的情况时,其退化成了链表,为了解决这个问题引入了平衡二叉树。平衡二叉树(Balanced Binary Tree)又被称为AVL树(得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis)。平衡二叉树(也可以是空树)的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡因子:平衡因子是在平衡二叉树结点的结构体引进的一个int变量,用来记录该结点的左子树整体高度-右子树整体高度。平衡二叉树的平衡因子只能为(-1,0,1原创 2020-05-23 23:14:42 · 398 阅读 · 2 评论 -
数据结构(三)
树树型结构是一类非常重要的非线性数据结构,其中以二叉树最为常用。直观来看,树是以分支关系定义的层次结构。树的术语根(Root):树的最顶端的结点(A),一个树仅有一个根节点,根节点无父节点。子树(SubTree):当树中的结点数大于一个时,根结点下面的子结点又可以做为根结点与其下面的结点组成一棵树,称为根结点的子树。(以B,C,D为根结点的树都是A的子树)结点的度(Degree):该结点拥有的子树个数。(如A的度为3,B的度为2,C的度为0,D的度为1)叶子(Leaf)或终端节点:度为0(无子原创 2020-05-17 19:52:13 · 4166 阅读 · 0 评论 -
数据结构(二)
栈栈(Stack)是限定在表尾进行插入和删除操作的线性表。对于栈来说,表尾端称为栈顶,表头称为栈底。栈的特点是后进先出(LIFO)。栈是临时的数据结构,栈的容量通常很小。元素入栈和出栈的时间复杂度都为O(1),与栈中的元素数量无关。栈不需要比较和移动操作。栈的实现可以基于数组和链表。栈的方法:push(入栈),pop(出栈),查看(peek),是否为空(isEmpty)栈的数组实现public class ArrayStack<T> { int size; private Ob原创 2020-05-12 20:39:41 · 257 阅读 · 0 评论 -
经典排序算法(二)
5.归并排序(Merge Sort)算法思想:采用经典的分治(divide-and-conquer)策略,首先是”分“,将需要排序的数组,使用递归分成一些小的数组排序,直到数组不能继续再分解(数组长度为1),然后是”治“,逐个将分解的数组进行排序最终的到已排序的数组。算法步骤:1.首先将待排序数组切分为左半部分,右半部分,分别对左半部分和右半部分的数组进行递归切分,直到数组不能在切分为止。...原创 2020-04-19 15:14:59 · 122 阅读 · 2 评论 -
经典排序算法(三)
排序算法分类排序算法分为比较排序和非比较排序。比较排序比较排序时间复杂度不能突破O(NlogN),因此也被称为非线性时间比较排序。非比较排序非比较类排序不通过比较来决定元素间的相对次序,因此它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。下面几种都属于非比较类排序算法。根据待排序的记录数量的不同,待排序过程涉及存储器不同,将排序分为两大类:内部排序和外...原创 2020-04-26 08:07:04 · 201 阅读 · 2 评论