数据结构与排序算法|青训营笔记

137 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第三篇笔记

数据结构

对于数据结构我们并不陌生,从学习计算机相关的课程以来,它从未从我们的书本中消失。对于它的理解,我只是简单的将其分为几类,例如线性,树,图等,并没有进行细致全面的了解。

线性结构

线性结构:数据结构中的元素存在一对一的相互关系。

常见的线性结构有:线性表、栈、队列、双端队列、数组和串。其中栈,队列又是我们最常使用的。 栈的特点是先进后出,队列则是先进先出。

image.png

在 golang 中我们要怎么实现这种简单的队列和栈呢?使用list链表来进行模拟。

image.png

基本的思路就是这样,但是在实际项目中不要这么使用,这么做会带来内存泄漏的风险。那么这个场景用来干啥呢,刷刷 leetcode 题还是蛮方便的。

树型结构最大的特点就是数据元素之间的关系变成了一对多,树是一些节点的集合,总结一下树的一些基本概念:

1、结点:树中的数据元素都称之为结点

2、根:最上面的结点称之为根,一颗树只有一个根且由根发展而来,从另外一个角度来说,每个结点都可以认为是其子树的根

3、父亲:结点的上层结点,如图中,结点K的父亲是E、结点L的父亲是G

4、兄弟:具有相同父亲的结点称为兄弟,图中F、G、H互为兄弟

5、结点的度:结点所拥有的子树的个数称之为结点的度,如结点B的度为3

6、树叶:度为0的结点,也叫作终端结点,图中D、K、F、L、H、I、J都是树叶

7、分支结点:度不为0的结点,也叫作非终端结点或内部结点,图中根、A、B、C、E、G都是分支结点

8、结点的层次:从根节点到树中某结点所经路径上的分支树称为该结点的层次,根节点的层次规定为1,其余结点的层次等于其父亲结点的层次+1

9、树的深度:树中结点的最大层次数。 其中最常见的树型为二叉树,顾名思义就是树的每个结点都不能有多于两个子树。

image.png

图形结构是一种比树形结构更复杂的非线性结构。在树形结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图形结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的,因此,图形结构被用于描述各种复杂的数据对象。

图形结构有3种类型:无向图、有向图、带权图

无向图:顶点A与顶点B之间的边是无方向的,可以从A到B,也可以从B到A

有向图:顶点A与顶点B之间的边是有方向的,可以从A到B,但不可以从B到A

带权图:顶点A与顶点B之间的边是带有属性的,如A到B的 距离。

总结

对于数据结构有了初步的认识与了解,下一步需要看一下具体算法的实现与原理。