温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-12 05:11:44 阅读:433 作者:牛奶i豆浆 栏目:编程语言
GO开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>
// 定义环形队列结构体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}

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×