Go 数组模拟单项队列
Posted 知其黑、受其白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 数组模拟单项队列相关的知识,希望对你有一定的参考价值。
阅读目录
数组模拟单项队列
队列是一个有序列表,可以用数组或者链表来实现。
遵循先入先出的原则。
即:先存入队列的数据,要先取出。后存入的要后取出。
使用数组实现队列的思想
1、创建一个数组array,是作为队列的一个字段。
2、front初始化为-1;
3、real 表示队列尾部,初始化为 -1;
4、完成队列的基础查找;
AddQueue // 加入数据到队列
GetQueue // 从队列取出数据
ShowQueue // 显示队列
package main
import (
"errors"
"fmt"
"os"
)
// 使用一个结构体管理队列
type Queue struct
maxSize int
// 数组 => 模拟队列
array [5]int
// 表示指向队列首
front int
// 表示指向队列的尾部
rear int
// 添加数据到队列
func (this *Queue) AddQueue(val int) (err error)
// 先判断队列是否已满
// 重要的提示;rear 是队列尾部(含最后元素)
if this.rear == this.maxSize-1
return errors.New("queue full")
// 尾部后移
this.rear++
this.array[this.rear] = val
return
// 从队列中取出数据
func (this *Queue) GetQueue() (val int, err error)
// 先判断队列是否为空
if this.rear == this.front
return -1, errors.New("queue empty")
this.front++
val = this.array[this.front]
return val, err
// 显示队列,找到队首遍历到队尾
func (this *Queue) ShowQueue()
fmt.Println("队列当前的情况是:")
// this.front 队首不包含队首的元素
for i := this.front + 1; i <= this.rear; i++
fmt.Printf("array[%d]=%d\\t", i, this.array[i])
fmt.Println()
func main()
// 创建一个队列
queue := &Queue
maxSize: 5,
front: -1,
rear: -1,
var key string
var val int
for
fmt.Println("1、输入add 表示添加数据到队列")
fmt.Println("2、输入get 表示添加数据到队列")
fmt.Println("3、输入show 表示添加数据到队列")
fmt.Println("4、输入exit 表示添加数据到队列")
fmt.Scanln(&key)
switch key
case "add":
fmt.Println("输入你要入队列数")
fmt.Scanln(&val)
err := queue.AddQueue(val)
if err != nil
fmt.Println(err.Error())
else
fmt.Println("加入队列OK")
case "get":
// fmt.Println("get")
val, err := queue.GetQueue()
if err != nil
fmt.Println(err.Error())
else
fmt.Println("从队列取出了一个数=", val)
case "show":
queue.ShowQueue()
case "exit":
os.Exit(0)
PS E:\\TEXT\\test_go\\one> go run .\\main.go
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
add
输入你要入队列数
1
加入队列OK
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
add
输入你要入队列数
2
加入队列OK
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
show
队列当前的情况是:
array[0]=1
array[1]=2
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
get
从队列取出了一个数= 1
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
show
队列当前的情况是:
array[1]=2
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
get
从队列取出了一个数= 2
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
get
queue empty
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
4
1、输入add 表示添加数据到队列
2、输入get 表示添加数据到队列
3、输入show 表示添加数据到队列
4、输入exit 表示添加数据到队列
exit
PS E:\\TEXT\\test_go\\one>
以上是关于Go 数组模拟单项队列的主要内容,如果未能解决你的问题,请参考以下文章
超强解析环形队列,简析单项,双向队列及基础功能实现---风之java
java数据结构与算法:单向队列与环形队列详解(图片+代码)