好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang環(huán)形隊列實現(xiàn)代碼示例

golang環(huán)形隊列實現(xiàn)代碼示例

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

Summary

  • 什么是環(huán)形隊列
  • 實現(xiàn)環(huán)形隊列圖示過程
  • golang版本代碼實現(xiàn)過程
  • 參考全部代碼

什么是環(huán)形隊列

在一個指定大小的數(shù)組里循環(huán)寫入數(shù)據(jù),借用二個指針分別實現(xiàn)入隊標(biāo)記與出隊標(biāo)記.也體現(xiàn)了指針的大好用處,請深入體會.大有裨益.

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

實現(xiàn)環(huán)形隊列圖示過程

初始化一個數(shù)組大小為6的環(huán)形隊列, 頭指針front=0, 尾指針rear=0, 剛好front=rear =0的狀態(tài),表示環(huán)形隊列為空.


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


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


4.如果再繼續(xù)添加a6元素,則rear=6,大于數(shù)組大小,發(fā)生數(shù)組溢出.


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


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

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

golang版代碼實現(xiàn)過程

a. 定義環(huán)形數(shù)據(jù)結(jié)構(gòu)

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

b.初始化環(huán)形隊列

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

c. 入隊操作

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

d.出隊操作

//出隊操作
//需要考慮: 隊隊為空沒有數(shù)據(jù)返回了
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:求當(dāng)前的環(huán)形隊列長度

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

參考全部代碼

github

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

標(biāo)簽:貴州 東營 吐魯番 許昌 常州 德宏 保定 曲靖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang環(huán)形隊列實現(xiàn)代碼示例》,本文關(guān)鍵詞  golang,環(huán)形,隊列,實現(xiàn),代碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang環(huán)形隊列實現(xiàn)代碼示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang環(huán)形隊列實現(xiàn)代碼示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产激情电影综合在线看| se亚洲| ass中国小美女粉嫩pics| 国模冰莲极品肥美自慰人体写真| 日本G奶乳液汁| 国产91丝袜在线播放网站| 图片区自拍区| 情欲欲超市第二部| 国产69精品一区二区亚洲孕妇| 免费成年人视频网站| 91精品国产调教打屁股| 动态番号| 被老外的又粗又大日出了水| 高压监狱观看完整免费高清原声满天星 | 成年女人wwxx免费| 黄视频国产| 中国又粗又大又爽的毛片| 色情爽文一区二区三区免费| 婬荡的寡妇2在线播放| 从客厅到厨房一直c| 男女乱搞视频| 97超精品视频在线观看| 国产一级真人片| 淫荡网| 波多野结衣片子| 清冷校草被扒开腿狂c| 日本激情电影| 人人爽人人爱| 调教古代美女肉h| 91网红福利精品区一区二| 又硬又粗又硬又长又大时间持久| 巨大荫蒂视频欧美另类| 一边吃奶一边摸| 国产精品高清小罗莉在线播放 | 97影院午夜午夜伦不卡| 三上悠亚2022全部作品| 免费黄污网站| 天天爽夜夜爽人人爽免费| 波多野结衣之人妻婬乱厨房| 国产欧美日韩va另类在线播放 | 欧美69free性videos|