golang数据结构之环形队列

前端之家收集整理的这篇文章主要介绍了golang数据结构之环形队列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

目录结构:

circlequeue.go

package queue

import (
    "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 main

import (
    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()
        }
    }
}

注意标红的地方,这是循环队列的核心。

猜你在找的Go相关文章