Golang中数据结构Queue的实现方法详解

作者:daisy 时间:2024-04-26 17:20:00 

前言

本文主要给大家介绍了关于Golang中数据结构Queue实现的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

需求

队列的特性较为单一,基本操作即初始化、获取大小、添加元素、移除元素等。最重要的特性就是满足先进先出。

实现

接下来还是按照以前的套路,一步一步来分析如何利用Go的语法特性实现Queue这种数据结构。

定义

首先定义每个节点Node结构体,照例Value的值类型可以是任意类型,节点的前后指针域指针类型为node


type node struct {
value interface{}
prev *node
next *node
}

继续定义链表结构,定义出头结点和尾节点的指针,同时定义队列大小size:


type LinkedQueue struct {
head *node
tail *node
size int
}

大小

获取队列大小,只需要获取LinkedQueue中的size大小即可:


func (queue *LinkedQueue) Size() int {
return queue.size
}

Peek

Peek操作只需要获取队列队头的元素即可,不用删除。返回类型是任意类型,用接口实现即可。另外如果head指针域为nil,则需要用panic抛出异常,一切ok的话,返回队头节点的数值即可:


func (queue *LinkedQueue) Peek() interface{} {
if queue.head == nil {
panic("Empty queue.")
}
return queue.head.value
}

添加

添加操作在队列中是比较重要的操作,也要区分队尾节点是否为nil,根据是否为nil,执行不同的连接操作,最后队列的size要加1,为了不浪费内存新增节点的指针变量要置nil:


func (queue *LinkedQueue) Add(value interface{}) {
new_node := &node{value, queue.tail, nil}
if queue.tail == nil {
queue.head = new_node
queue.tail = new_node
} else {
queue.tail.next = new_node
queue.tail = new_node
}
queue.size++
new_node = nil
}

移除

队列的删除操作也是很简单,无非是节点的断开操作。在此之前,需要判断链表的状态即是否为nil?而后移除的队列最前端的节点,先用一个新的变量节点保存队列前面的节点,进行一系列操作之后,至nil,并将长度减少即可。


func (queue *LinkedQueue) Remove() {
if queue.head == nil {
panic("Empty queue.")
}
first_node := queue.head
queue.head = first_node.next
first_node.next = nil
first_node.value = nil
queue.size--
first_node = nil
}

Ok,以上就是用Go的基本语法特性实现Queue的过程。谢谢阅读!!!

来源:http://allenwu.itscoder.com/queue-in-go

标签:golang,queue,数据结构
0
投稿

猜你喜欢

  • Python实现桶排序与快速排序算法结合应用示例

    2022-10-26 23:33:39
  • python实现linux下使用xcopy的方法

    2022-08-16 07:52:09
  • 详解MySQL是如何解决幻读的

    2024-01-14 02:17:19
  • Python实现的knn算法示例

    2022-09-21 14:35:09
  • python base64库给用户名或密码加密的流程

    2021-01-30 16:30:39
  • 用C++封装MySQL的API的教程

    2024-01-25 07:51:51
  • Python catplot函数自定义颜色的方法

    2021-01-29 16:25:01
  • PHP格式化显示时间date()函数案例讲解

    2023-06-13 06:45:34
  • Django REST framework 限流功能的使用

    2023-11-11 07:09:35
  • Python设计模式之建造者模式实例详解

    2021-07-13 17:37:03
  • Django QuerySet查询集原理及代码实例

    2023-04-06 01:30:18
  • Window 64位下python3.6.2环境搭建图文教程

    2023-07-26 02:22:45
  • 使用js实现数据格式化

    2024-05-03 15:05:32
  • SQLite之Autoincrement关键字(自动递增)

    2024-01-13 20:16:29
  • 分组字符合并SQL语句 按某字段合并字符串之一(简单合并)

    2024-01-24 11:30:20
  • 说说回车键触发表单提交的问题

    2009-02-03 13:25:00
  • Python+OpenCV之形态学操作详解

    2021-11-24 23:37:58
  • 是时候不用考虑基于字体大小(em)的设计了

    2009-10-24 13:25:00
  • 对Python函数设计规范详解

    2023-08-02 15:59:17
  • Python MySQLdb Linux下安装笔记

    2024-01-15 14:12:12
  • asp之家 网络编程 m.aspxhome.com