一、数据结构
1.1 概述
数据结构,符合某种特定组织结构的相同类型的数据集合。
个人感觉,最基本的数据结构,其实是图,树和链表都是一种特殊类型的图。
所以图是什么,从数学的定义来说,图是由点集和边集组成的二元组。
略显抽象,一个一个说一下好了。
1.1.1 无向图
点集和边集组成的二元组。
几个重要的概念
- 道路,从一个点到另一个点的通路,比如说0-1-2是一条道路;
- 连通性,任何两点之间都存在一条道路,也就是选择任何一个点,都可以到达所有点;
- 回路,起点==终点的道路,比如说0-1-2-1-0是一个回路;
- 环,除了起点和终点,别的点都不同的回路,比如说0-1-3-0是一个环;
- 度,对无向图来说,度就是它相邻点的个数,比如说0的相邻点为1、3,0的度为2;
很明显,对上面这个图来说:
点 | 0 | 1 | 2 | 3 | 4 |
度 | 2 | 3 | 2 | 2 | 1 |
总结一下,上面这张图,连通有环图
1.1.2 树
连通且无环的无向图,很明显,只要删除掉0和3的边,图就无环了,而这张图本身就是连通的,所以这就是一棵树了。
点 | 0 | 1 | 2 | 3 | 4 |
度 | 1 | 3 | 2 | 1 | 1 |
再来说个概念:
- 叶节点,度为1的结点,很容易理解吧,只和一个点相连,肯定是叶子呀;
这样看可能看的不明显,感觉不太像是树,但是任选一个非叶节点的结点当头结点,重新画一下看看,就很明显了:
1.1.3 链表
起点和终点的度为1,其余的点度为2的无环连通图;
所以从某一种角度上来说,链表也是一种特殊的树,因为它也满足树的定义;
删掉初始图1和3的边
点 | 0 | 1 | 2 | 3 | 4 |
度 | 2 | 2 | 2 | 1 | 1 |
拉直了就是链表:
也可以拉成树:
1.1.4 总结
以上都是个人看到的教学视频和问答的理解总结,可能会有理解偏差的情况,仅供参考,推荐大家去b站看看基础的视频,很多优秀的老师都讲解的很好的,不过我有点忘记了,推荐一下最近看的教程,里面有几集关于图的,感觉收获很多:
https://www.bilibili.com/video/BV1ts4y1k7Yz?p=6