分享
  1. 首页
  2. 文章

golang使用数组模拟环形队列(demo)

牛奶i豆浆 · · 1620 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// 定义环形队列结构体
type LoopQueue struct {
MaxSize int
array [5]int
front int
rear int
over bool // 标识队列是否溢出
}

// 定义环形队列的添加数据方法
func (loop *LoopQueue) Add(val int) {
// 环形队列如果队列满了会覆盖前面先进来的位置元素
if loop.rear == loop.MaxSize -1 {
// 重置队尾的指针指向,从头重新开始队列的逻辑
// 这里如果用取模的话,还没实现
loop.rear = -1
// 这个是为了退出条件,loop.rear == loop.front
loop.front = loop.rear + 1
// 队列是否溢出覆盖
loop.over = true
}
loop.rear++
// 如果溢出了则会覆盖队列前面先进来的数据,
//
但是这些数据是后面进来的,要遵循FIFO原则,
//
则队列首部指针往后面移动
if loop.over {
loop.front++
}
loop.array[loop.rear] = val
}


// 定义环形队列的数据查看方法
func (loop *LoopQueue) Show()(err error) {
for i := loop.front + 1; i < loop.rear; i++ {
fmt.Println("show:", loop.array[i])
}
return err
}

// 定义取出环形队列的数据方法
func (loop *LoopQueue) Get()(val int, err error) {
// 这里判断队列为空要分两种情况
// 1.正常队列情况, 数据没有溢出覆盖,即队列首部在前,队列尾部在后,此时loop.front < loop.rear
// 2.
队列溢出了.数据把以前队列前面的数据覆盖了,此时loop.front > loop.rear
if loop.front == loop.rear {
return -1, errors.New("queue is empty111")
}
// 这个表示队列前面有些数据已经溢出被覆盖了
if loop.rear < loop.front {
if loop.front == loop.MaxSize -1 {
val = loop.array[loop.front]
// front读取队列后边尾部时,此时由于队列是溢出的,队列前面还有
// 此时则重置front为初始值,从头在开始逻辑
loop.front = -1
return val, err
}
val = loop.array[loop.front]
loop.front++
return val, err
}
if loop.front < loop.rear {
if loop.rear == loop.front {
return -1, errors.New("queue is empty~")
}
loop.front++
val = loop.array[loop.front]
return val, err
}
return
}



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:牛奶i豆浆

查看原文:golang使用数组模拟环形队列(demo)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1620 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏