这是我参与「第三届青训营 -后端场」笔记创作活动的第三篇笔记
数据结构
对于数据结构我们并不陌生,从学习计算机相关的课程以来,它从未从我们的书本中消失。对于它的理解,我只是简单的将其分为几类,例如线性,树,图等,并没有进行细致全面的了解。
线性结构
线性结构:数据结构中的元素存在一对一的相互关系。
常见的线性结构有:线性表、栈、队列、双端队列、数组和串。其中栈,队列又是我们最常使用的。 栈的特点是先进后出,队列则是先进先出。
在 golang 中我们要怎么实现这种简单的队列和栈呢?使用list链表来进行模拟。
基本的思路就是这样,但是在实际项目中不要这么使用,这么做会带来内存泄漏的风险。那么这个场景用来干啥呢,刷刷 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、树的深度:树中结点的最大层次数。 其中最常见的树型为二叉树,顾名思义就是树的每个结点都不能有多于两个子树。
图
图形结构是一种比树形结构更复杂的非线性结构。在树形结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图形结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的,因此,图形结构被用于描述各种复杂的数据对象。
图形结构有3种类型:无向图、有向图、带权图
无向图:顶点A与顶点B之间的边是无方向的,可以从A到B,也可以从B到A
有向图:顶点A与顶点B之间的边是有方向的,可以从A到B,但不可以从B到A
带权图:顶点A与顶点B之间的边是带有属性的,如A到B的 距离。
总结
对于数据结构有了初步的认识与了解,下一步需要看一下具体算法的实现与原理。