校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang環形隊列實現代碼示例

golang環形隊列實現代碼示例

熱門標簽:地圖標注的汽車標 浙江高速公路地圖標注 高德地圖標注口訣 廣州呼叫中心外呼系統 南通如皋申請開通400電話 中國地圖標注省會高清 江西轉化率高的羿智云外呼系統 西部云谷一期地圖標注 學海導航地圖標注

Summary

  • 什么是環形隊列
  • 實現環形隊列圖示過程
  • golang版本代碼實現過程
  • 參考全部代碼

什么是環形隊列

在一個指定大小的數組里循環寫入數據,借用二個指針分別實現入隊標記與出隊標記.也體現了指針的大好用處,請深入體會.大有裨益.

如圖所示,一個環形隊列.含有二個指針: 隊列頭指針,隊列尾指針.

實現環形隊列圖示過程

初始化一個數組大小為6的環形隊列, 頭指針front=0, 尾指針rear=0, 剛好front=rear =0的狀態,表示環形隊列為空.


2.向環形隊列里插入1個元素,則rear指針移動一格,front=0,rear=1


3.繼續添加a2,a3,a4,a5元素,rear指針指到末尾處,front=0, reat=5


4.如果再繼續添加a6元素,則rear=6,大于數組大小,發生數組溢出.


5.如上圖所示添加a6時,rear指針發生溢出.我們使用一個小技巧,當rear=6時與數組大小6進行取模, (rear+1) % maxLen,讓rear指針回到開始處rear=0,問題來了,我們無法判斷數組是否滿?因為初始化時front=rear=0, 現在數組滿也是front=rear=0


6.解決以上問題有三種辦法,我們采用第3種方法實現.

使用第3種方法: 即當(rear+1) % maxLen == front時,判斷環形數組滿,則無法添加元素

golang版代碼實現過程

a. 定義環形數據結構

type CycleQueue struct {
 data []interface{} //存儲空間
 front int      //前指針,前指針負責彈出數據移動
 rear int      //尾指針,后指針負責添加數據移動
 cap  int      //設置切片最大容量 
}

b.初始化環形隊列

func NewCycleQueue(cap int) *CycleQueue {
 return CycleQueue{
  data: make([]interface{}, cap),
  cap:  cap,
  front: 0,
  rear: 0,
 }
}

c. 入隊操作

//入隊操作
//判斷隊列是否隊滿,隊滿則不允許添加數據
func (q *CycleQueue) Push(data interface{}) bool {
 //check queue is full
 if (q.rear+1)%q.cap == q.front { //隊列已滿時,不執行入隊操作
  return false
 }
 q.data[q.rear] = data     //將元素放入隊列尾部
 q.rear = (q.rear + 1) % q.cap //尾部元素指向下一個空間位置,取模運算保證了索引不越界(余數一定小于除數)
 return true
}

d.出隊操作

//出隊操作
//需要考慮: 隊隊為空沒有數據返回了
func (q *CycleQueue) Pop() interface{} {
 if q.rear == q.front {
  return nil
 }
 data := q.data[q.front]
 q.data[q.front] = nil
 q.front = (q.front + 1) % q.cap
 return data
}

e:求當前的環形隊列長度

//因為是循環隊列, 后指針減去前指針 加上最大值, 然后與最大值 取余
func (q *CycleQueue) QueueLength() int {
 return (q.rear - q.front + q.cap) % q.cap
}

參考全部代碼

github

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 用golang實現一個定時器任務隊列實例
  • Go語言的隊列和堆棧實現方法

標簽:貴州 東營 吐魯番 許昌 常州 德宏 保定 曲靖

巨人網絡通訊聲明:本文標題《golang環形隊列實現代碼示例》,本文關鍵詞  golang,環形,隊列,實現,代碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang環形隊列實現代碼示例》相關的同類信息!
  • 本頁收集關于golang環形隊列實現代碼示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 大冶市| 邻水| 莱州市| 冕宁县| 宁化县| 淮北市| 扎鲁特旗| 静海县| 五河县| 大同市| 鄂托克前旗| 驻马店市| 永济市| 六枝特区| 恭城| 新绛县| 邳州市| 鹤庆县| 东乡| 江达县| 万安县| 察雅县| 馆陶县| 灵寿县| 太保市| 汉中市| 阿勒泰市| 江阴市| 明水县| 桂东县| 临桂县| 衡阳市| 宁强县| 丹阳市| 碌曲县| 即墨市| 湟中县| 永修县| 东乡县| 前郭尔| 山西省|