溫馨提示×

溫馨提示×

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

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

golang使用數組模擬環形隊列(demo)

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

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


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

// 定義取出環形隊列的數據方法
func (loop *LoopQueue) Get()(val int, err error) {
? // 這里判斷隊列為空要分兩種情況
?
// 1.正常隊列情況, 數據沒有溢出覆蓋,即隊列首部在前,隊列尾部在后,此時loop.front < loop.rear
? // 2.
隊列溢出了.數據把以前隊列前面的數據覆蓋了,此時loop.front > loop.rear
?
if loop.front == loop.rear {
? ? ?return -1, errors.New("queue is empty111")
? }
? // 這個表示隊列前面有些數據已經溢出被覆蓋了
?
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問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女