Go数据结构--环形队列,单链表

一、环形队列

环形队列图在这里插入图片描述

思路:
1,front变量,初始值为 0,指向队列的第一个元素也是待取出的数据,

也就是说arr[front]是队列的第一个元素

2,rear变量,rear 初始值为 0,指向待添加数据的位置,队列添加数据时,因逻辑上的闭环,指针可能再次回到前面的位置,不能单一递增处理,会出现角标越界异常,需通过取模来重新计算指针的值

3,当队列满时 条件是 (rear + 1) % maxsize == front 假如,maxsize 为10,front为0,rear为9 此时队列就满了

4,当队列为空时,条件是 rear == front

5,rear指针指向待添加数据的元素位置,假设队列内部数组的最大容量为maxsize ,当rear指针指向maxsize -1时,实际该位置上并无数据,因此,队列的最大容量只有maxsize -1,即队列的最大有效数据个数为maxsize -1,因为预留一个位置
概念摘自:
原文链接:https://blog.csdn.net/qq_36296417/article/details/106730607

代码:

package main

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

//使用一个结构体管理环形队列
type CircleQueue struct {
   
	maxSize int//4
	array [5]int//数组
	head int//指向队列队头
	tail int//指向队尾                                                                                                                                           `
}
//入队列

func (this *CircleQueue) Push(val int) (err error) {
   
    if this.IsFull(){
   
		return errors.New("queue full")
	}
	//分析出this.tail 在队列尾部,但是不包含最后的元素
	this.array[this.tail]=val//把值给尾部
	this.tail=(this.tail+1)%this.maxSize
	return
}
//出队列
func (this *CircleQueue) Pop() (val int,err error)  {
   
	if this.IsEmpty(){
   
		return 0,errors.New("queue empty")
	}
	//取出,head指向队首,并且含队首元素
	val=this.array[this.head]
	this.head=(this.head+1)%this.maxSize
	return
}

//判断环形队列是否满
func (this *CircleQueue) IsFull() bool {
   
	return (this.tail&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值