一些数据结构

一、栈和队列:
栈和队列是两种应用非常广泛的数据结构,它们都是特殊的线性结构,操作受限的线性表。

1、栈:(也叫堆栈)
基本特征:只有一个数据出入口,因此只能后进先出(先进后出)。
基本操作:压栈push、弹栈pop。
2、队列
基本特征:是一种先进先出的线性表,只能在一端插入数据(队尾),另一端删除数据(队头),共两个控制数据的端口。
基本操作:入队、出队、查看队头、查看队尾

二、链式表:
表结构的链式存储,元素之间存在一对一关系,元素的逻辑次序和物理次序可能不一致(在内存中是分散存储元素)。
为了表示元素之间的逻辑关系,需要每个元素中有一个数据项(指针)记录下一元素的位置(地址)。

三、递归
1、什么是递归
递归是一种行为(函数自己调用自己)而不是一种算法,它是分治、递推等算法一种实现(凡是循环能解决的问题,递归都能解决)。
递归有一个很大的缺点就是耗费资源(每调用一次都就分配一块函数所需要的栈空间),因此能用循环解决的问题,坚决不用递归。

2、递归适合解决什么问题
a、复杂问题,由于问题太过由解决,无法写出具体的算法(河内之塔、全排列、组合),思路是把复杂的问题分解成若干个相同的小问题,每次调用解决一个小问题,把剩余的问题交给下次调用,直到问题解决(到达出口)。
b、非线性问题,发散型的问题、或者数据结构比较适合使用递归。

四、树型结构
元素之间存在一对多关系。
一棵树(tree)是由n(n>0)个元素组成的有限集合,其中:
每个元素称为结点(node);
有一个特定的结点,称为根结点或根(root);
除根结点外,其余结点被分成m(m>=0)个互不相交的有限集合,而每个子集又都是一棵树(称为原树的子树);

二叉树:
(1)最多只有两个子结点的树叫做二叉树。
(2)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树(上一层放满,才放下一层,从左到右依次使用)。
(3)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
(4)有序二叉树——左子叶都小于它的根,右子叶都大等于它的二叉树。
(5)平衡二叉树——它是一棵有序二叉树,且具有以下性质:它是一棵空树或它的左右两个子树的高度相差不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树相关术语句:
树的结点(node):包含一个数据元素及若干指向子树的分支;
孩子结点(child node):结点的子树的根称为该结点的孩子;
双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;
兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;
祖先结点: 从根到该结点的所经分支上的所有结点
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙
结点层:根结点的层定义为1;根的孩子为第二层结点,依此类推;
树的深度:树中最大的结点层数
结点的度:结点子树的个数
树的度:树中最大的结点度。
叶子结点:也叫终端结点,是度为 0 的结点;
分枝结点:度不为0的结点;
森林:指若干棵互不相交的树的集合。
路径:对于一棵子树中的任意两个不同的结点,如果从一个结点出发,按层次自上而下沿着一个个树枝能到达另一结点,称它们之间存在着一条路径。可用路径所经过的结点序列表示路径,路径的长度等于路径上的结点个数减1。

树的遍历:
前序:根 左 右
中序:左 根 右
后序:左 右 根
层序:从上到下

五、图结构
图是一种多对多的数据结构,是一种使用非常广泛的数据结构。

分类:
有向图:点与点之间是单向连通。
无向图:点与点之间是双向连通。

扫描二维码关注公众号,回复: 5734107 查看本文章

构成:
顶点:可以被连接的元素。
边:连接元素的通道。

表示:
无向图:(1,2) (2,3) (3,1)
有向图:<1,2> <2,1> <2,2> <2,1>

术语:
完全图是指任意两个结点之间都有一个边相连,也就是结点两两相连;
连通图是指任意两个结点之间都有一个路径相连.

存储:
阾接矩阵:使用二维数组来表示图的连接关系。
阾接表:表头+表元素来表示图的连接关系。

遍历:
深度优先(DFS):
1、访问顶点v;
2、依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
3、若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 当然,当人们刚刚掌握深度优先搜索的时候常常用它来走迷宫.事实上我们还有别的方法,那就是广度优先搜索(BFS).
广度优先(BFS):
1、从图中某个顶点V0出发,并访问此顶点;
2、从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点;
3、重复步骤2,直到全部顶点都被访问为止。

猜你喜欢

转载自blog.csdn.net/weixin_44041847/article/details/88863274