其他分享
首页 > 其他分享> > 数据结构-Go语言-数组模拟队列

数据结构-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