最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中數(shù)據結構Queue的實現(xiàn)方法詳解

 更新時間:2017年09月21日 08:37:50   投稿:daisy  
這篇文章主要給大家介紹了關于Golang中數(shù)據結構Queue的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

本文主要給大家介紹了關于Golang中數(shù)據結構Queue實現(xiàn)的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

需求

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

實現(xiàn)

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

定義

首先定義每個節(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,根據是否為nil,執(zhí)行不同的連接操作,最后隊列的size要加1,為了不浪費內存新增節(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
}

Ok,以上就是用Go的基本語法特性實現(xiàn)Queue的過程。謝謝閱讀!??!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 使用go語言實現(xiàn)cors中間件

    使用go語言實現(xiàn)cors中間件

    CORS是一種瀏覽器安全機制,用于控制在Web應用程序中不同源(Origin)之間的資源共享,本文將給大家介紹如何使用go語言實現(xiàn)cors中間件,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • golang通過context控制并發(fā)的應用場景實現(xiàn)

    golang通過context控制并發(fā)的應用場景實現(xiàn)

    這篇文章主要介紹了golang通過context控制并發(fā)的應用場景實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 一文詳解go的defer和return的執(zhí)行順序

    一文詳解go的defer和return的執(zhí)行順序

    go的defer和return是golang中的兩個關鍵字,return用于返回函數(shù)的返回值,也可以參與一定的流程控制,defer是golang中的延遲調用,經常用于文件流的關閉,鎖的解鎖操作,本文給大家介紹了go的defer和return的執(zhí)行順序,需要的朋友可以參考下
    2024-07-07
  • Go?對多個網絡命令空間中的端口進行監(jiān)聽的解決方案

    Go?對多個網絡命令空間中的端口進行監(jiān)聽的解決方案

    這篇文章主要介紹了Go?如何對多個網絡命令空間中的端口進行監(jiān)聽,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Golang匯編之控制流深入分析講解

    Golang匯編之控制流深入分析講解

    這篇文章主要介紹了Golang匯編之控制流,程序執(zhí)行的流程主要有順序、分支和循環(huán)幾種執(zhí)行流程,本節(jié)主要討論如何將Go語言的控制流比較直觀地轉譯為匯編程序,或者說如何以匯編思維來編寫Go語言代碼,感興趣的同學可以參考下文
    2023-05-05
  • golang日志框架之logrus的安裝使用教程

    golang日志框架之logrus的安裝使用教程

    logrus是一個非常強大的日志框架,具有靈活的功能和易于使用的API,適合處理各種類型的日志需求,這篇文章主要介紹了golang日志框架之logrus的安裝使用,需要的朋友可以參考下
    2023-08-08
  • golang拼接字符串的5種實現(xiàn)方式

    golang拼接字符串的5種實現(xiàn)方式

    文章總結了五種拼接字符串的方式,包括使用 "+"、strings.Join()、fmt.Sprint、bytes.Buffer 和 strings.Builder,每種方式都有其適用場景和性能特點
    2024-12-12
  • Go使用Protocol?Buffers在數(shù)據序列化的優(yōu)勢示例詳解

    Go使用Protocol?Buffers在數(shù)據序列化的優(yōu)勢示例詳解

    這篇文章主要為大家介紹了Go使用Protocol?Buffers在數(shù)據序列化的優(yōu)勢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Golang實現(xiàn)事務型內存數(shù)據庫的方法詳解

    Golang實現(xiàn)事務型內存數(shù)據庫的方法詳解

    內存數(shù)據庫經我們經常用到,例如Redis,那么如何從零實現(xiàn)一個內存數(shù)據庫呢,本文旨在介紹如何使用Golang編寫一個KV內存數(shù)據庫MossDB
    2023-03-03
  • Go語言基礎結構體用法及示例詳解

    Go語言基礎結構體用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎結構體的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11

最新評論

泉州市| 广西| 大同县| 米林县| 商城县| 聂荣县| 泰州市| 黑龙江省| 成武县| 广昌县| 泰来县| 定南县| 忻州市| 邵阳县| 黔南| 锦屏县| 栖霞市| 皋兰县| 汝南县| 交口县| 会东县| 海安县| 邵东县| 梧州市| 潼关县| 吉隆县| 怀远县| 哈巴河县| 平陆县| 吕梁市| 和林格尔县| 富源县| 砀山县| 镇江市| 南陵县| 芜湖市| 乌审旗| 时尚| 唐河县| 平武县| 喀喇|