go 数组实现单向队列

本队列有问题, 单向的,需要优化尾环形队列

package main

import (
	"errors"
	"fmt"
	"os"
)

type Queue struct {
	maxSize int
	arr     [4]int // 数组模拟队列
	front   int    // 指向队列的最前面 队首
	rear    int    // 指向队尾
}

func main() {
	queue := &Queue{
		maxSize: 4,
		arr:     [4]int{},
		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)
			} else {
				fmt.Println("添加成功")
			}
		case "get":
			val, err := queue.get()
			if err != nil {
				fmt.Println(err.Error())
			}
			fmt.Printf("取出一个数 %d\n", val)

		case "show":
			queue.show()

		case "exit":
			os.Exit(0)
		}

	}
}

// 添加数据到队列
func (q *Queue) addQueue(value int) (err error) {
	// 判断队列是否已满
	if q.ifFull() {
		return errors.New("队列已满")
	}

	q.rear++ // rear后移
	q.arr[q.rear] = value

	return nil
}

// 从队列中取出数据
func (q *Queue) get() (int, error) {
	// 判断队列是否为空
	if q.isEmpty() {
		fmt.Println("队列为空")
	}

	q.front++
	val := q.arr[q.front]
	return val, nil
}

func (q *Queue) ifFull() bool {
	return q.rear == q.maxSize-1 // rear 是队列尾部 含队列尾部
}

func (q *Queue) isEmpty() bool {
	return q.rear == q.front
}

// 显示队列
func (q *Queue) show() {
	// 找到队首 遍历到队尾
	fmt.Println("\n队列当前的情况是:")
	for i := q.front + 1; i <= q.rear; i++ {
		fmt.Printf("array[%d]=%d\n", i, q.arr[i])
	}
}

  

添加成功
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
add
请输入一个数
3
添加成功
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
show

队列当前的情况是:
array[0]=1
array[1]=2
array[2]=3
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
get
取出一个数 1
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
show

队列当前的情况是:
array[1]=2
array[2]=3
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
get
取出一个数 2
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
show

队列当前的情况是:
array[2]=3
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
add
请输入一个数
4
添加成功
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
show

队列当前的情况是:
array[2]=3
array[3]=4
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
get
取出一个数 3
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
get
取出一个数 4
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
show

队列当前的情况是:
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列
add
请输入一个数
4
添加错误 队列已满
1 add 添加数据到队列
2 get 从队列获取数据
3 show 显示队列
4 exit 退出队列

posted @ 2021-10-03 13:26  brady-wang  阅读(42)  评论(0编辑  收藏  举报