• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go 数组实现单向队列

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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 退出队列


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言开发(九)、Go语言并发编程发布时间:2022-07-10
下一篇:
Go语言之产生随机数发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap