1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Golang中怎么實現(xiàn)Queue數(shù)據(jù)結構

      本篇文章給大家分享的是有關Golang中怎么實現(xiàn)Queue數(shù)據(jù)結構,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

      創(chuàng)新互聯(lián)建站專注于望都網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供望都營銷型網(wǎng)站建設,望都網(wǎng)站制作、望都網(wǎng)頁設計、望都網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造望都網(wǎng)絡公司原創(chuàng)品牌,更為您提供望都網(wǎng)站排名全網(wǎng)營銷落地服務。

      需求

      隊列的特性較為單一,基本操作即初始化、獲取大小、添加元素、移除元素等。最重要的特性就是滿足先進先出。

      實現(xiàn)

      接下來還是按照以前的套路,一步一步來分析如何利用Go的語法特性實現(xiàn)Queue這種數(shù)據(jù)結構。

      定義

      首先定義每個節(jié)點Node結構體,照例Value的值類型可以是任意類型,節(jié)點的前后指針域指針類型為node

      type node struct {
       value interface{}
       prev *node
       next *node
      }

      繼續(xù)定義鏈表結構,定義出頭結點和尾節(jié)點的指針,同時定義隊列大小size:

      type LinkedQueue struct {
       head *node
       tail *node
       size int
      }

      大小

      獲取隊列大小,只需要獲取LinkedQueue中的size大小即可:

      func (queue *LinkedQueue) Size() int {
       return queue.size
      }

      Peek

      Peek操作只需要獲取隊列隊頭的元素即可,不用刪除。返回類型是任意類型,用接口實現(xiàn)即可。另外如果head指針域為nil,則需要用panic拋出異常,一切ok的話,返回隊頭節(jié)點的數(shù)值即可:

      func (queue *LinkedQueue) Peek() interface{} {
       if queue.head == nil {
       panic("Empty queue.")
       }
       return queue.head.value
      }

      添加

      添加操作在隊列中是比較重要的操作,也要區(qū)分隊尾節(jié)點是否為nil,根據(jù)是否為nil,執(zhí)行不同的連接操作,最后隊列的size要加1,為了不浪費內(nèi)存新增節(jié)點的指針變量要置nil:

      func (queue *LinkedQueue) Add(value interface{}) {
       new_node := &node{value, queue.tail, nil}
       if queue.tail == nil {
       queue.head = new_node
       queue.tail = new_node
       } else {
       queue.tail.next = new_node
       queue.tail = new_node
       }
       queue.size++
       new_node = nil
      }

      移除

      隊列的刪除操作也是很簡單,無非是節(jié)點的斷開操作。在此之前,需要判斷鏈表的狀態(tài)即是否為nil?而后移除的隊列最前端的節(jié)點,先用一個新的變量節(jié)點保存隊列前面的節(jié)點,進行一系列操作之后,至nil,并將長度減少即可。

      func (queue *LinkedQueue) Remove() {
       if queue.head == nil {
       panic("Empty queue.")
       }
       first_node := queue.head
       queue.head = first_node.next
       first_node.next = nil
       first_node.value = nil
       queue.size--
       first_node = nil
      }

      以上就是Golang中怎么實現(xiàn)Queue數(shù)據(jù)結構,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      網(wǎng)頁題目:Golang中怎么實現(xiàn)Queue數(shù)據(jù)結構
      分享URL:http://www.ef60e0e.cn/article/ihshhp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        凤翔县| 庆元县| 华坪县| 满洲里市| 灵璧县| 巴彦淖尔市| 正蓝旗| 德令哈市| 汉源县| 正镶白旗| 高碑店市| 崇义县| 新建县| 青田县| 诏安县| 景宁| 曲靖市| 英吉沙县| 四会市| 丽江市| 兴义市| 泰和县| 东安县| 丽江市| 凭祥市| 裕民县| 湘西| 黄梅县| 军事| 九寨沟县| 呼玛县| 南安市| 彰化县| 安远县| 什邡市| 漠河县| 海原县| 新民市| 营口市| 军事| 太和县|