目录结构:

circlequeue.go

package queue

import (
"errors"
"fmt"
) //CircleQueue 环型队列
type CircleQueue struct {
MaxSize int
Array []int
Front int
Rear int
} //Push 向队列中添加一个值
func (q *CircleQueue) Push(val int) (err error) {
//先判断队列是否已满
if q.IsFull() {
return errors.New("队列已满")
}
q.Array[q.Rear] = val
//队尾不包含元素
//q.Rear++
q.Rear = (q.Rear + 1) % q.MaxSize
return
} //Pop 得到一个值
func (q *CircleQueue) Pop() (val int, err error) {
if q.IsEmpty() {
return -, errors.New("队列已空")
}
//队首包含元素
val = q.Array[q.Front]
//q.Front++
q.Front = (q.Front + 1) % q.MaxSize
return val, err
} //IsFull 队列是否满了
func (q *CircleQueue) IsFull() bool {
return (q.Rear+1)%q.MaxSize == q.Front
} //IsEmpty 队列是否为空
func (q *CircleQueue) IsEmpty() bool {
return q.Front == q.Rear
} //Size 队列的大小
func (q *CircleQueue) Size() int {
return (q.Rear + q.MaxSize - q.Front) % q.MaxSize
} //Show 显示队列
func (q *CircleQueue) Show() {
//取出当前队列有多少元素
size := q.Size()
if size == {
fmt.Println("队列为空")
}
//辅助变量,指向Front
tmpFront := q.Front
for i := ; i < size; i++ {
fmt.Printf("queue[%d]=%v\t", tmpFront, q.Array[tmpFront])
tmpFront = (tmpFront + 1) % q.MaxSize
} }

main.go

package main

import (
"fmt"
"go_code/data_structure/queue"
"os"
) func main() { var key string
var val int
q := &queue.CircleQueue{
MaxSize: ,
Front: ,
Rear: ,
}
for {
fmt.Println("------------------------------")
fmt.Println("1.输入push表示添加数据到队列")
fmt.Println("2.输入pop表示从队列中获取数据")
fmt.Println("3.输入show表示显示队列")
fmt.Println("4.输入exit表示退出")
fmt.Println("------------------------------")
fmt.Scanln(&key)
switch key {
case "push":
fmt.Println("请输入要添加的值:")
fmt.Scanln(&val)
err := q.Push(val)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("添加成功")
fmt.Println("Rear:", q.Rear)
}
case "pop":
val, err := q.Pop()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("得到的值为:", val)
fmt.Println("Front:", q.Front)
} case "show":
q.Show()
fmt.Println()
case "exit":
os.Exit()
}
}
}

注意标红的地方,这是循环队列的核心。

最新文章

  1. ajaxSubmit
  2. javascript复习总结
  3. [Tip] 如何在BeyondCompare中忽略不重要的区别.
  4. HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数
  5. pytest学习笔记(二)
  6. iOS 根据文件名获取到文件路径
  7. PKM(personal knowledge management)
  8. IOS — 关于Socket传输文件需要自定义延时或者包大小的情况
  9. OOP组合和继续的优缺点
  10. 1.1.7-学习Opencv与MFC混合编程之---为画图工具添加工具栏
  11. Javascript基本语句
  12. [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining
  13. Java 第七周总结
  14. java处理数据库不支持的emoji
  15. Ubuntu系统分配存储空间的建议以及给Ubuntu系统根目录扩容方法(从20GB追加100GB)
  16. Django框架【form组件】
  17. 整数中x出现的次数
  18. odoo开发笔记 -- tree视图按指定字段group_by分组显示
  19. ECMAScript6 入门 函数的扩展
  20. html----input标签

热门文章

  1. C lang:Array_Multidimensional arrays
  2. BIM工程信息管理系统-EF实体框架数据操作基类
  3. color颜色大全
  4. Self Service Password 密码策略
  5. 为什么有的插件安装需要用Vue.use()方法
  6. 07. Go 语言接口
  7. java之简单类对象实例化过程
  8. swoole是多进程还是多线程
  9. 使用pip安装python库的几种方式
  10. mac怎么连接windows远程桌面