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数据结构与算法:单向队列与环形队列详解(图片+代码)

数组和链表的区别ArrayList和LinkedList的区别使用LinkedList模拟栈和队列

Go 数组模拟环形队列