数据结构简介

数组和链表的概念就不说了,可以自行百度。

数组和链表是基本的物理结构,其他数据结构都是逻辑结构,都是基于这两者的。

 

栈和队列:
栈和队列都能用数组或链表来实现,用链表实现更好一些,因为栈和队列没有根据索引取值的情况,只有取头部和尾部的情况。

栈:先进后出;可以理解为只有一个开口的管道。

队列:先进先出;可以理解为两头开口的管道。

优先队列:最大优先队列和最小优先队列,最大优先队列就是无论入队顺序如何,最大的值都会优先出队。最小优先则相反。

 

散列表(哈希表):

散列,英文名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

 

posted @ 2021-12-24 21:06  hucat  阅读(154)  评论(0)    收藏  举报