前言
本文主要给大家介绍了关于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的过程。谢谢阅读!!!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- [ABC唱片]-《邓丽君—永远的歌声(日语)》[K2-029][K2CD]WAV+CUE
- 吴牧野《强者独白II 李斯特巅峰作品选》[FLAC/分轨][286.41MB]
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 林俊杰《他是... JJ林俊杰》[FLAC][809M]
- dnf红眼110版本加点
- 星穹铁道2.2主线任务在我们的时代里全流程 崩铁2.2主线任务合集
- 黑帝斯哈迪斯2前期最强套路介绍 哈迪斯黑帝斯2简单套路图文攻略
- 中唱唱片群星《好歌珍藏-激情年代2CD》WAV
- 水木年华《在他乡》开盘母带[低速原抓WAV+CUE]
- 齐秦·谢彩妘《燃烧爱情》2016[WAV分轨]
- 陈慧娴《永远是你的陈慧娴》特别版MQS[FLAC][1.7G]
- 孙露《情调私语+我的歌》3CD[WAV+CUE][1.6G]
- 陈宁《你忙我忙+青春未央+那天晚上》3CD[WAV+CUE][1.5G]
- 黑帝斯哈迪斯2全武器和工具介绍 黑帝斯哈迪斯2全武器和工具图文指南
- 黑帝斯哈迪斯2流派玩法推荐 黑帝斯哈迪斯太难了怎么玩