加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang数据结构之环形队列

发布时间:2020-12-16 09:18:21 所属栏目:大数据 来源:网络整理
导读:目录结构: circlequeue.go package queueimport ( " errors " fmt " ) // CircleQueue 环型队列 type CircleQueue struct { MaxSize int Array [ 5 ] Front Rear } Push 向队列中添加一个值 func (q *CircleQueue) Push(val ) (err error) { 先判断队列是否

目录结构:

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]=%vttmpFront = (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()
        }
    }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读