golang使用数组模拟环形队列(demo)-创新互联
// 定义环形队列结构体创新互联-专业网站定制、快速模板网站建设、高性价比伊春网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式伊春网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖伊春地区。费用合理售后完善,十多年实体公司更值得信赖。
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
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:golang使用数组模拟环形队列(demo)-创新互联
转载源于:http://pwwzsj.com/article/piscd.html