数据结构与算法
文章平均质量分 64
DavidQian谛听
后端编程爱好者。
展开
-
数据结构之栈(Stack)
栈栈有先进后出(FILO)的特点,就像叠放盘子,先放的盘子最后才能拿出来,要拿盘子总是从上面的盘子开始拿。栈就是这样一种东西。数组实现(ArrayStack)有一个TOP指针,这个指针是个整型值,当指针为-1时表示栈空,为0时表示有一个元素在栈中,为StackSize-1时表示栈满。代码太简单就不写解释了。#include<iostream>using names...原创 2018-07-09 23:28:24 · 604 阅读 · 1 评论 -
数据结构之链表(Linked-List)及操作
一、 数据结构之链表(Linked-List)线性表是最常用的存储结构,线性表的每个单元称为元素,元素拥有一个数据及一个地址线性表有两种物理存储方式:顺序存储方式和链式存储方式数组是具有代表性的顺序存储方式的线性表,单链表是具有代表性的链式存储方式的线性表。1.数组数组的内存是连续分配的,可以通过数组的索引直接获取对应的数据,其索引就是线性表中所说的元素的“地址”,但索引不是地...原创 2018-07-07 21:39:56 · 4127 阅读 · 3 评论 -
数据结构之队列(Queue)
关于队列队列,顾名思义,也就是一条队伍,进入队伍的时候,只能从队尾排队,离开队伍的时候,只能从队首离开。队列也有数组实现和链式实现。队列的数组实现用一般数组实现队列的时候,入队,则在队尾插入一个元素,出队,则将队首的元素出队。那么,由于数组的长度是固定的,入队只能从队尾入队,因此经常性的出队会使得队首越来越靠近队尾,队首前面的数组空间不能被利用,导致大量的数组空间被浪费,显然这不是...原创 2018-07-15 19:19:04 · 520 阅读 · 0 评论 -
数据结构之树(Tree)
树(Tree)Q:为什么要用树?对于大量的数据,使用链表的线性访问的时间消耗很大。于是提出了树的概念。树的应用十分广泛,操作系统的文件目录就是典型的树形结构。大部分对树的操作的时间复杂度可以被干到O(LogN)。树的一般实现或表示方法这里介绍树的孩子兄弟表示法,另外还有别的表示方法,有兴趣可以自己查一下清华大学的教材。这里的数据域使用int类型方便测试,更一般的抽象数据结构...原创 2018-08-05 17:32:56 · 942 阅读 · 0 评论 -
树的一些基础概念
树的一些基础概念简单介绍树的一些概念简单介绍树的一些概念1.树叶:没有儿子的结点叫树叶。2.兄弟:具有相同父节点的结点。3.路径:沿着树的层次,从一个结点到另一个结点经过的是路径。4.路径的长:设路径经过的节点数为K,则经过的路径的长是K-1。5.结点的度:子节点的个数是结点的度。6.树的度:所有结点的度的最大值。7.结点的深度:设节点X,从根到X的路径的长就是结点的深度。8.结...原创 2018-10-05 20:05:17 · 209 阅读 · 0 评论 -
ALV树与树的平衡
ALV树,是指带有平衡条件的二叉查找树。这个平衡条件,就是左子树和右子树的高度差的绝对值小于等于1.然而,在对ALV树进行插入结点时,就有可能破坏了这种平衡。于是,为了使被破坏平衡的AVL树恢复平衡,就需要对这棵树进行旋转。根据实际,可以分为四种情况:情况1:在树B的左子树(L)的左子树(L)的位置上插入节点E(即LL)插入后:在树B的左子树的左子树的位置上插入节点E后,树A的左子树高度...原创 2018-10-05 23:51:50 · 1300 阅读 · 0 评论 -
伸展树
伸展树提出的想法基于计算机基础概念的时间局部性原理和空间局部性原理:当某一个节点被访问,那么在不久之后它很有可能被访问,而且它的相邻节点也很有可能被访问。所以当访问一棵二叉查找树的一个比较深的节点时,如果能够使这个被访问的节点移动到根上使得它下次最快被访问并且能保持平衡的性质,再如果不仅使得被访问的节点下次被更快访问,而且能使得访问路径上所有节点下次能更快被访问,那这种数据结构就很有意思了。实...原创 2018-10-30 00:18:20 · 3457 阅读 · 1 评论