亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

go語言數據結構 環形隊列

標簽:
Go 數據結構

queen.go

package data_struct

import "log"

//环形队列实现 队列,先进先出。追加至队尾,弹出队顶
type Queen struct {
    Length   int64 //队列长度
    Capacity int64 //队列容量
    Head     int64 //队头
    Tail     int64 //队尾
    Data     []interface{}
}

//初始化
func MakeQueen(length int64) Queen {
    var q = Queen{
        Length: length,
        Data:   make([]interface{}, length),
    }
    return q
}

//判断是否为空
func (t *Queen) IsEmpty() bool {
    return t.Capacity == 0
}

//判断是否满
func (t *Queen) IsFull() bool {
    return t.Capacity == t.Length
}

//加一个元素
func (t *Queen) Append(element interface{}) bool {
    if t.IsFull() {
        log.Println("队列已满 ,无法加入")
        return false
    }
    t.Data[t.Tail] = element
    t.Tail++
    t.Capacity++
    return true
}

//弹出一个元素,并返回
func (t *Queen) OutElement() interface{} {
    if t.IsEmpty() {
        log.Println("队列为空,无法弹出")
    }
    defer func() {
        t.Capacity--
        t.Head++
    }()
    return t.Data[t.Head]
}

//遍历
func (t *Queen) Each(fn func(node interface{})) {
    for i := t.Head; i < t.Head+t.Capacity; i++ {
        fn(t.Data[i%t.Length])
    }
}

//清空
func (t *Queen) Clcear() bool {
    t.Capacity = 0
    t.Head = 0
    t.Tail = 0
    t.Data = make([]interface{}, t.Length)
    return true
}

queen_test.go

package data_struct

import (
    "fmt"
    "testing"
)

func TestQueen(t *testing.T) {
    var testLength = int64(4)
    q := MakeQueen(testLength)
    if q.Length != testLength {
        t.Error("MakeQueen(4)的容量不是4")
    }
    q.Append(10)
    q.Append(12)
    q.Append(14)
    q.Append(16)
    //q.Append(18)

    q.OutElement()
    //fmt.Println(q.OutElement())
    if q.Capacity != 3 {
        t.Error("队队长度不正确")
    }

    q.Each(func(node interface{}) {
        fmt.Println(node)
    })

    q.Clcear()
    if q.Capacity != 0 {
        t.Error("queen的长度不为0")
    }
    q.Each(func(node interface{}) {
        fmt.Println(node)
    })

    q.Append("B")
    q.Append('A')

    q.Each(func(node interface{}) {
        fmt.Println(node)
    })
}
點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消