golang数据结构和算法之QueueLinkedList链表队列
时间:2019-10-21
本文章向大家介绍golang数据结构和算法之QueueLinkedList链表队列,主要包括golang数据结构和算法之QueueLinkedList链表队列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
队列和堆栈不一样的地方在于进出顺序:
堆栈是后进先出,
队列是先进先出。
QueueLinkedList.go
package QueueLinkedList type Node struct { data int next *Node } type Queue struct { rear *Node } func (list *Queue) Enqueue(i int) { data := &Node{data: i} if list.rear != nil { data.next = list.rear } list.rear = data } func (list *Queue) Dequeue() (int, bool) { if list.rear == nil { return 0, false } if list.rear.next == nil { i := list.rear.data list.rear = nil return i, true } current := list.rear for { if current.next.next == nil { i := current.next.data current.next = nil return i, true } current = current.next } } func (list *Queue) Peek() (int, bool) { if list.rear == nil { return 0, false } return list.rear.data, true } func (list *Queue) Get() []int { var items []int current := list.rear for current != nil { items = append(items, current.data) current = current.next } return items } func (list *Queue) IsEmpty() bool { return list.rear == nil } func (list *Queue) Empty() { list.rear = nil }
QueueLinkedList_test.go
package QueueLinkedList import ( "fmt" "math/rand" "testing" "time" ) func TestQueueLinkedList(t *testing.T) { random := rand.New(rand.NewSource(time.Now().UnixNano())) headNode := &Node{ data: random.Intn(100), next: nil, } queue := &Queue{ rear: headNode, } fmt.Println(queue.Get()) randNumber := random.Intn(100) queue.Enqueue(randNumber) queue.Enqueue(random.Intn(100)) queue.Enqueue(random.Intn(100)) fmt.Println(queue.Get()) queue.Dequeue() fmt.Println(queue.Get()) retResult, retBool := queue.Peek() if retBool == true { fmt.Println(retResult) } queue.Empty() if queue.IsEmpty() == false { t.Fail() } }
输出:
D:/Go/bin/go.exe test -v [D:/go-project/src/QueueLinkedList] === RUN TestQueueLinkedList [68] [12 49 69 68] [12 49 69] 12 --- PASS: TestQueueLinkedList (0.00s) PASS ok QueueLinkedList 2.177s 成功: 进程退出代码 0.
原文地址:https://www.cnblogs.com/aguncn/p/11713268.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 30分钟学会pyecharts数据可视化
- 用Keras从零开始6步骤训练神经网络
- Keras结构化数据预处理范例——Titanic生存预测
- 从原理上搞懂如何设置线程池参数大小?
- Keras图像数据预处理范例——Cifar2图片分类
- Keras文本数据预处理范例——IMDB影评情感分类
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 使用详解
- Go 垃圾回收
- 如何在SpringBoot中异步请求和异步调用
- 实现 memcached 客户端:TCP、连接池、一致性哈希、自定义协议
- 30分钟学会LightGBM
- 三种计算图
- 低阶API示范
- 中阶API示范
- 高阶API示范