golang数据结构之队列
时间:2022-07-23
本文章向大家介绍golang数据结构之队列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
队列可以用数组或链表实现,遵从先入先出。
目录结构:
在main中调用queue包中的属性和方法,如何调用参考另一篇文章: https://www.cnblogs.com/xiximayou/p/12005480.html
一个队列需要有四要素:容量、队首指针、队尾指针、存储数据的数组;
当队尾指针==容量-1时,此时队列已满,就不能再有数据进队;
当队首指针==队尾指针时,此时队列已空,就不能再从队列中取出数据;
同时可以发现,这种队列只能使用一次,因为那时队首和队尾都指向队尾了。
代码如下:
queue.go
package queue
import (
"errors"
"fmt"
)
//Queue 使用结构体管理队列
type Queue struct {
MaxSize int
Array [4]int //模拟队列
Front int //队列首位
Rear int //队列尾部
}
//AddQueue 向队列中添加一个值
func (q *Queue) AddQueue(val int) (err error) {
q.MaxSize = 4
//先判断队列是否已满
if q.Rear == q.MaxSize-1 {
return errors.New("队列已满")
}
q.Rear++
q.Array[q.Rear] = val
return
}
//GetQueue 得到一个值
func (q *Queue) GetQueue() (val int, err error) {
if q.Front == q.Rear {
return -1, errors.New("队列已空")
}
q.Front++
val = q.Array[q.Front]
return val, err
}
//ShowQueue 显示队列
func (q *Queue) ShowQueue() {
for i := q.Front + 1; i <= q.Rear; i++ {
fmt.Printf("queue[%d]=%vt", i, q.Array[i])
}
}
main.go
package main
import (
"fmt"
"go_code/data_structure/queue"
"os"
)
func main() {
var key string
var val int
q := &queue.Queue{
MaxSize: 4,
Front: -1,
Rear: -1,
}
for {
fmt.Println("------------------------------")
fmt.Println("1.输入add表示添加数据到队列")
fmt.Println("2.输入get表示从队列中获取数据")
fmt.Println("3.输入show表示显示队列")
fmt.Println("4.输入exit表示退出")
fmt.Println("------------------------------")
fmt.Scanln(&key)
switch key {
case "add":
fmt.Println("请输入要添加的值:")
fmt.Scanln(&val)
err := q.AddQueue(val)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("添加成功")
fmt.Println("Rear:", q.Rear)
}
case "get":
val, err := q.GetQueue()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("得到的值为:", val)
fmt.Println("Front:", q.Front)
}
case "show":
q.ShowQueue()
fmt.Println()
case "exit":
os.Exit(0)
}
}
}
- 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 数组属性和方法
- [Concent速成] (1) 定义和共享模块状态
- 利用JS代码批量自动取消抖音关注
- 开机报错/dev/vda1 contains a file system with errors,check forced.
- centos内核的删除或修改
- chkconfig学习笔记
- 3分钟短文:说说Laravel通用缓存Cache的使用技巧
- 【技术创作101训练营】想用代码改变世界?先用好Git和Github!
- 绘制散点图(克利夫兰系列)
- 绘制分组散点图(克里夫兰点图)
- ggplot2绘制玫瑰图
- 绘制极坐标系条形图
- 四步重新认识冗余机器人的控制器设计
- 人脸识别接入常见问题汇总
- TKE上关于postStart 和preStop使用
- 文字识别接入常见问题