circlequeue.go
package queueimport ( "errors" fmt")//CircleQueue 环型队列type CircleQueue struct { MaxSize int Array [5] Front Rear }Push 向队列中添加一个值func (q *CircleQueue) Push(val ) (err error) { 先判断队列是否已满 if q.IsFull() { return errors.New(队列已满) } q.Array[q.Rear] = val 队尾不包含元素 q.Rear++ q.Rear = (q.Rear + 1) % q.MaxSize returnPop 得到一个值func (q *CircleQueue) Pop() (val ,err error) { q.IsEmpty() { return -1,errors.New(队列已空) } 队首包含元素 val = q.Array[q.Front] q.Front++ q.Front = (q.Front + 1) % q.MaxSize val,err}IsFull 队列是否满了func (q *CircleQueue) IsFull() bool { return (q.Rear+1)%q.MaxSize == q.Front}IsEmpty 队列是否为空func (q *CircleQueue) IsEmpty() q.Front == q.Rear}Size 队列的大小func (q *CircleQueue) Size() (q.Rear + q.MaxSize - q.Front) % q.MaxSize}Show 显示队列func (q *CircleQueue) Show() { 取出当前队列有多少元素 size := q.Size() if size == 0 { fmt.Println(队列为空辅助变量,指向Front tmpFront := q.Front for i := 0; i < size; i++ { fmt.Printf(queue[%d]=%v\ttmpFront = (tmpFront + 1) % q.MaxSize }}
main.go
package mainimport ( go_code/data_structure/queueos)func main() { var key string var val q := &queue.CircleQueue{ MaxSize: 5for------------------------------) fmt.Println(1.输入push表示添加数据到队列2.输入pop表示从队列中获取数据3.输入show表示显示队列4.输入exit表示退出) fmt.Scanln(&key) switch key { case push: fmt.Println(请输入要添加的值:) fmt.Scanln(&val) err := q.Push(val) if err != nil { fmt.Println(err) } else { fmt.Println(添加成功) fmt.Println(Rear:pop: val,err := q.Pop() 得到的值为:Front:show: q.Show() fmt.Println() exit: os.Exit() } }}
注意标红的地方,这是循环队列的核心。
总结以上是内存溢出为你收集整理的golang数据结构之环形队列全部内容,希望文章能够帮你解决golang数据结构之环形队列所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)