溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang使用數(shù)組模擬環(huán)形隊列(demo)

發(fā)布時間:2020-06-12 05:11:44 來源:網絡 閱讀:419 作者:牛奶i豆?jié){ 欄目:編程語言
// 定義環(huán)形隊列結構體
type LoopQueue struct {
? MaxSize int
?
array [5]int
?
front int
?
rear int
?
over bool ?// 標識隊列是否溢出
}

// 定義環(huán)形隊列的添加數(shù)據(jù)方法
func (loop *LoopQueue) Add(val int) {
? // 環(huán)形隊列如果隊列滿了會覆蓋前面先進來的位置元素
?
if loop.rear == loop.MaxSize -1 ?{
? ? ?// 重置隊尾的指針指向,從頭重新開始隊列的邏輯
? ? ?
// 這里如果用取模的話,還沒實現(xiàn)
? ? ?
loop.rear = -1
? ? ?
// 這個是為了退出條件,loop.rear == loop.front
? ? ?
loop.front = loop.rear + 1
? ? ?
// 隊列是否溢出覆蓋
? ? ?
loop.over = true
?
}
? loop.rear++
? // 如果溢出了則會覆蓋隊列前面先進來的數(shù)據(jù),
? //
但是這些數(shù)據(jù)是后面進來的,要遵循FIFO原則,
? //
則隊列首部指針往后面移動
?
if loop.over {
? ? ?loop.front++
? }
? loop.array[loop.rear] = val
}


// 定義環(huán)形隊列的數(shù)據(jù)查看方法
func (loop *LoopQueue) Show()(err error) ?{
? for i := loop.front + 1; i < loop.rear; i++ {
? ? ?fmt.Println("show:", loop.array[i])
? }
? return err
}

// 定義取出環(huán)形隊列的數(shù)據(jù)方法
func (loop *LoopQueue) Get()(val int, err error) {
? // 這里判斷隊列為空要分兩種情況
?
// 1.正常隊列情況, 數(shù)據(jù)沒有溢出覆蓋,即隊列首部在前,隊列尾部在后,此時loop.front < loop.rear
? // 2.
隊列溢出了.數(shù)據(jù)把以前隊列前面的數(shù)據(jù)覆蓋了,此時loop.front > loop.rear
?
if loop.front == loop.rear {
? ? ?return -1, errors.New("queue is empty111")
? }
? // 這個表示隊列前面有些數(shù)據(jù)已經溢出被覆蓋了
?
if loop.rear < loop.front {
? ? ?if loop.front == loop.MaxSize -1 {
? ? ? ? val = loop.array[loop.front]
? ? ? ? // front讀取隊列后邊尾部時,此時由于隊列是溢出的,隊列前面還有
? ? ? ?
// 此時則重置front為初始值,從頭在開始邏輯
? ? ? ?
loop.front = -1
? ? ? ?
return val, err
? ? ?}
? ? ?val = loop.array[loop.front]
? ? ?loop.front++
? ? ?return val, err
? }
? if loop.front < loop.rear {
? ? ?if loop.rear == loop.front {
? ? ? ? return -1, errors.New("queue is empty~")
? ? ?}
? ? ?loop.front++
? ? ?val = loop.array[loop.front]
? ? ?return val, err
? }
? return
}


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI