图解 Go 数据结构

收录了 6 篇文章 · 23 人关注

  • 如何用Go实现单链表

    一、概念介绍下面这副图是我们单链表运煤车队。​每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据。前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车厢,却不知道前面是哪节车厢拉的自己。第一节车厢没有任何车厢拉它,我们就叫它车头,第五节车厢后面拉其他车厢,我们称为车尾。作为单链表它最大的特点就是能随意增加车队的长度,也能随意减少车队的长度。这是比数组公交车最大的优点。二、Go语言实现讲解1、节点​每节车厢都由车体、绳索和煤炭构成。在Go语言中表示这...

  • 双向链表的GO语言实现

    一、什么是双向链表​和单链表比较,双向链表的元素不但知道自己的下线,还知道自己的上线(越来越像传销组织了)。小煤车开起来,图里面可以看出,每个车厢除了一个指向后面车厢的箭头外,还有一个指向前面车厢的箭头(车头、车尾除外)。车头只有指向后面车厢的箭头,车尾只有指向前面车厢的箭头。二、双向链表与Go的对应结构1、节点​我们先把车厢分解开来。每节车厢都由煤炭、车体、拉前车厢绳索、拉后车厢绳索这4部分组成。车体是我们的运输工具,在Go语言里我们用结构提DNode表示;煤炭代表运的货物,用data变量表示...

  • 循环链表的Go语言实现

    一、什么是循环链表​循环链表的节点形成一个圈。把单链表的尾巴指向开头形成单循环链表。把双向链表的尾巴与开头链接起来就形成双向循环链表。使用循环链表可以不断的绕圈寻找所需要的数据,而不需要像单链表那样每次都从开头开始寻找,可以提高查询的效率。今天大卫哥先实现一个单向循环链表,双向循环链表的实现就交给大家了。二、单向循环链表的Go实现1、节点​单向循环链表的节点和单链表的实现是类似的,不过为了区别,我们取了不同名字。type CNode struct { data Object next *...

  • Go数据结构之栈

    一、什么是栈​这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头?我也不卖关子了,列车通常是用“人字轨道”来变换车道。​列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。​栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒...

  • Go数据结构之队列

    一、什么是队列​数据结构里的队列就是模仿现实中的排队。如上图中狗狗排队上厕所,新来的狗狗排到队伍最后,最前面的狗狗撒完尿走开,后面的跟上。可以看出队列有两个特点:(1) 新来的都排在队尾;(2) 最前面的办理业务后离队,后面一个跟上。根据特点,计算机砖家就归纳以下队列结构。​队列简称FIFO,含义自己体会。二、队列的结构​继续大卫哥的拆卸手。队列拆成容器和链表,分别用结构和单链表实现,如上图。三、接口说明及实现​1、Init初始化队列,其实是初始化里面单链表。func (queue *Queue...

  • Go数据结构之集合

    一、什么是集合集合就是不同对象的无序聚集。那么链表和集合有什么关系呢?我们来变个魔术。如下图是各种颜色组成的链表:​下面我们一步步把链表变成集合。第一步砍去链接​第二步去掉重复​第三步放到一个框里摇一摇就成集合了​可以看出集合有这些特点:无序:链表去掉链接,就是去掉元素间有序状态。不重复:去掉重复的玫红色。虽然说集合是一种数学概念,但在实际生活中无处不透露着集合。比如一个班级的学生是一个集合。班级里的男生又是一个集合。二、集合的结构​大卫哥这里为了简化概念的描述,继续用单链表来表示集合,但是在对...