数据结构简介
数组和链表的概念就不说了,可以自行百度。
数组和链表是基本的物理结构,其他数据结构都是逻辑结构,都是基于这两者的。
栈和队列:
栈和队列都能用数组或链表来实现,用链表实现更好一些,因为栈和队列没有根据索引取值的情况,只有取头部和尾部的情况。
栈:先进后出;可以理解为只有一个开口的管道。
队列:先进先出;可以理解为两头开口的管道。
优先队列:最大优先队列和最小优先队列,最大优先队列就是无论入队顺序如何,最大的值都会优先出队。最小优先则相反。
散列表(哈希表):
散列,英文名Hash,也有音译叫哈希。是一种算法,每个语言的实现不同。是把不同长度的数据转换成固定长度的数值,用于标识原数据。
散列表是一种key-value格式的数据结构,为了同时保证查询效率和插入效率,使用数组+链表的形式。
树:n个节点的集合,有且仅有一个根节点。其他节点互不相交。
二叉树:每个节点的子节点<=2。
均衡二叉树:红黑树、AVL树、树堆。
二叉树的遍历:TODO 深度优先遍历(前、中、后序遍历)、广度优先遍历。
二叉堆:二叉堆是一个有序的完全二叉树。分为最大堆和最小堆,最大堆:任何一个节点的值,必然>=自己的子节点值。最小堆相反。
在插入和删除的时候,会判断父子节点的值大小,根据值大小使节点“上浮”或“下沉”。
JVM中的堆就是一个完全二叉树。
图:图形理论(图论)是欧拉在1736年提出的。
树是图的子集,树有且只有一个根节点,图没有根节点的概念,就是一堆相连节点。
名词解析:度:一个顶点有几条边,就成为这个顶点的度。
欧拉环理论:当所有顶点的度都是偶数时,才能实现:从某顶点出发,每条边只走一遍,回到出发点。
无向图:边是没有方向的,即双向皆可。
有向图:边是有方向的。且一条边只能有一个方向。两个顶点相互指向,需要两条边。这种也成为强相连。
完全图:无向图中N个顶点有N(N-1)/2条边。有向图中N个顶点有N(N-1)条边。
路径:一个顶点到另一个顶点,经过的边的集合,比如A到C,无向图一般这样表示:{(AB),(BC)},有向图一般这样表示:{<AB>,<BC>}
路径长度:经过了几条边。
回路:A绕了一圈回到A。
如何用代码表示图呢?
1、相邻矩阵。原理是用二维数组存储边的数据。
2、相邻表。原理是用链表来存储边数据。
还有相邻多元列表法、索引表格法、
数据结构可视化:
为了方便大家理解和学习,可以在网页上以动态效果的形式演示数据结构,旧金山大学提供的网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

浙公网安备 33010602011771号