数据结构-Go语言-数组模拟队列
作者:互联网
数据结构-Go语言-数组模拟队列
参考视频:https://www.bilibili.com/video/BV1ME411Y71o?p=350&spm_id_from=pageDriver
内容不做叙述,可直接看视频,一下是代码实现
package main
import (
"errors"
"fmt"
"math/rand"
)
type CircleQueue struct {
maxSize int // 最大容量
array [4]int // 循环队列数组
head int // 队首
tail int // 队尾
}
// Push 队尾追击数据
func (cq *CircleQueue) Push(val int) error {
if cq.isFull() {
return errors.New("queue is full")
}
cq.array[cq.tail] = val
cq.tail = (cq.tail + 1) % cq.maxSize
return nil
}
// Pop 队首获得数据
func (cq *CircleQueue) Pop() (val int, err error) {
if cq.isEmpty() {
return 0, errors.New("queue is empty")
}
val = cq.array[cq.head]
cq.head = (cq.head + 1) % cq.maxSize
return val, nil
}
// Size 当前元素个数
func (cq *CircleQueue) Size() int {
return (cq.tail + cq.maxSize - cq.head) % cq.maxSize
}
// ShowQueue 显示队列
func (cq *CircleQueue) ShowQueue() {
temp := cq.head
for i, n := 0, cq.Size(); i < n; i++ {
fmt.Printf("Queue[%v]=%v ", temp, cq.array[temp])
temp = (temp + 1) % cq.maxSize
}
fmt.Println()
}
//判断队列是否满了
func (cq *CircleQueue) isFull() bool {
return (cq.tail+1)%cq.maxSize == cq.head
}
//判断队列是否为空
func (cq *CircleQueue) isEmpty() bool {
return cq.tail == cq.head
}
func main() {
var cq = CircleQueue{maxSize: 4}
for i := 0; i < 6; i++ {
err := cq.Push(i)
if err != nil {
fmt.Println(err)
}
}
cq.ShowQueue()
for i := 0; i < 6; i++ {
val, err := cq.Pop()
if err != nil {
fmt.Println(err)
} else {
fmt.Println(val)
}
}
cq.ShowQueue()
for i := 0; i < 4; i++ {
err := cq.Push(rand.Intn(100))
if err != nil {
fmt.Println(err)
}
}
cq.ShowQueue()
}
标签:head,err,队列,fmt,maxSize,CircleQueue,Go,cq,数据结构 来源: https://blog.csdn.net/qq_36765991/article/details/119714942