Go語言實戰案例-自定義隊列結構

以下是《Go語言100個實戰案例》中的?數據結構與算法篇 - 案例24:自定義隊列結構?的完整內容,幫助初學者通過自定義結構體來實現隊列的數據結構。

🎯 案例目標

實現一個自定義的隊列結構,并提供常見的隊列操作:入隊(Enqueue)、出隊(Dequeue)、查看隊列頭元素(Peek)和判斷隊列是否為空(IsEmpty)。


🧩 應用場景

  • ? 隊列是一種先進先出的數據結構,廣泛應用于任務調度、資源管理、消息隊列等領域。
  • ? 學習通過 Go 的結構體與切片(slice)實現隊列,掌握隊列的基本操作。

🧠 涉及知識點

  • ? 使用結構體定義隊列(Queue)
  • ? 隊列操作的基本方法(Enqueue、Dequeue、Peek、IsEmpty)
  • ? 使用 Go 的切片(slice)動態調整隊列大小

💻 示例代碼:自定義隊列結構

package?mainimport?"fmt"//?定義隊列結構體
type?Queue?struct?{elements?[]interface{}?//?用切片存儲隊列元素
}//?創建一個新的隊列
func?NewQueue()?*Queue?{return?&Queue{}
}//?判斷隊列是否為空
func?(q?*Queue)?IsEmpty()?bool?{return?len(q.elements)?==?0
}//?獲取隊列的大小
func?(q?*Queue)?Size()?int?{return?len(q.elements)
}//?入隊操作
func?(q?*Queue)?Enqueue(item?interface{})?{q.elements?=?append(q.elements,?item)
}//?出隊操作
func?(q?*Queue)?Dequeue()?(interface{},?bool)?{if?q.IsEmpty()?{return?nil,?false?//?隊列為空,返回錯誤}//?獲取隊列頭元素并移除item?:=?q.elements[0]q.elements?=?q.elements[1:]return?item,?true
}//?查看隊列頭元素
func?(q?*Queue)?Peek()?(interface{},?bool)?{if?q.IsEmpty()?{return?nil,?false?//?隊列為空,返回錯誤}return?q.elements[0],?true
}func?main()?{queue?:=?NewQueue()?//?創建一個隊列//?測試入隊操作queue.Enqueue(10)queue.Enqueue(20)queue.Enqueue(30)fmt.Println("隊列的大小:",?queue.Size())?//?輸出隊列的大小//?查看隊列頭元素front,?_?:=?queue.Peek()fmt.Println("隊列頭元素:",?front)//?測試出隊操作item,?_?:=?queue.Dequeue()fmt.Println("出隊的元素:",?item)fmt.Println("出隊后的隊列大小:",?queue.Size())//?再次查看隊列頭元素front,?_?=?queue.Peek()fmt.Println("新的隊列頭元素:",?front)//?出隊直到隊列為空for?!queue.IsEmpty()?{item,?_?=?queue.Dequeue()fmt.Println("出隊的元素:",?item)}
}

🛠 技術說明

功能使用方法
定義隊列結構體type Queue struct { elements []interface{} }
隊列操作方法EnqueueDequeuePeekIsEmpty
切片操作append、切片截取?q.elements[1:]
空值檢查IsEmpty?判斷隊列是否為空
多種數據類型存儲使用?interface{}?存儲任何類型的數據

📤 示例運行

隊列的大小:?3
隊列頭元素:?10
出隊的元素:?10
出隊后的隊列大小:?2
新的隊列頭元素:?20
出隊的元素:?20
出隊的元素:?30

🧪 拓展練習

  • ??隊列的擴展:實現一個支持隊列最大長度的功能,當隊列達到最大長度時,禁止繼續入隊。
  • ??隊列應用
    • ? 用隊列實現寬度優先搜索(BFS)。
    • ? 用隊列模擬任務調度系統,處理多個任務的執行順序。
  • ??雙端隊列:擴展為雙端隊列(Deque),允許從兩端進行插入和刪除操作。
  • ??循環隊列:實現循環隊列,通過修改頭尾指針避免隊列空間的浪費。

? 小結

通過本案例,你實現了一個自定義隊列結構,并掌握了隊列的基本操作。隊列作為一種常見的基礎數據結構,廣泛應用于實際開發中,尤其是在任務調度、消息隊列等場景中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90511.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows-WSL-Docker端口開放

本文介紹如何在局域網內訪問Windows服務器端口,特別是針對已安裝WSL環境并在其中運行Docker服務的情況。主要解決Docker服務向局域網開放端口的配置問題步驟一:配置轉發當你的應用程運行在WSL中時,需要執行此步驟。在宿主機(windo…

面試知識梳理-vue3和vue2區別

vue3相對于vue2的優勢 性能更好體積更小更好的ts支持(vue3 ts開發)更好的代碼組織更好的邏輯抽離更多新功能(vue2其實也都能自己做出來) 更好的代碼組織 Composition API 的革新 Vue 2 采用 ??Options API??,通過 …

棧的核心原理

1 棧的概念及結構棧是一種特殊的線性表,其特點是只允許在固定的一端進行插入和刪除操作。進行操作的一端稱為棧頂,另一端稱為棧底。棧中的元素遵循后進先出(LIFO,Last In First Out) 原則。壓\入\進棧(Push…

【無標題】暗物質暗能量——以下是用11維拓撲量子色動力學模型解釋暗物質和暗能量的完整理論框架。

暗物質暗能量——以下是用11維拓撲量子色動力學模型解釋暗物質和暗能量的完整理論框架。暗物質的拓撲本質 1. 跨橋零模振動理論 暗物質對應跨橋結構的基態振動模: math \phi_{\text{DM}} \frac{1}{\sqrt{6}} \sum_{f1}^6 \mathcal{B}_f^{(0)} $$ 其中 $\mathcal{B}…

【接口自動化】-1- 初識接口

一、什么是接口 接口涉及到四個實體:(我去飯店點餐) 我是客人 :客戶端 廚師:服務器 服務員:接口 菜單:接口文檔 接口定義了一套信息規則讓兩個系統之間互相不必知道對方的內部&#xff0c…

華為FTTR光貓V173 F30改公開版界面 附帶真正的s161補全一體固件

【本文介紹】 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 這款FTTR的V173 F30看著顏值很高 也很實用 畢竟是XGPON萬兆的光貓…

【學習】數字化車間與智能工廠如何推進制造業轉型

在制造業轉型升級的浪潮中,數字化車間與智能工廠已成為推動產業變革的核心引擎。前者通過物聯網、大數據與自動化技術的深度融合,實現生產流程的精細化管控與資源優化;后者則依托人工智能、5G通信與數字孿生技術,構建起具備自感知…

HTML元素與高級功能完全教程:從基礎到精通

目錄 章節1:HTML的靈魂——元素的本質與結構化思維 1.1 元素的核心:標簽、屬性與內容 1.2 語義化的革命 1.3 常見的“坑”與避坑指南 章節2:表單元素:打造交互的基石 2.1 表單基礎:與核心控件 2.2 高級輸入類型與驗證 2.3 表單的可訪問性與用戶體驗 章節3:HTML5多媒…

IP證書:構建數字世界知識產權安全防線的基石

引言 在數字化浪潮席卷全球的今天,知識產權(IP)的保護已成為企業、機構乃至個人面臨的重要挑戰。無論是商業秘密、專利技術,還是數字版權,其安全性和可信度都直接影響著創新生態的健康發展。而作為數字安全的核心工具…

CAD插件『PDF轉CAD格式』安裝教程

在工程設計領域,常規流程是將完成的CAD圖紙直接轉換為PDF格式或輸出為紙質藍圖進行分發。由于PDF文件具有跨平臺兼容性強、防篡改等特性,在工程交付環節被廣泛采用。但當需要對既有圖紙進行二次修改時,PDF格式的編輯局限性便凸顯出來&#xf…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-26,(知識點:硬件電路的調試方法:信號追蹤,替換,分段調試)

目錄 1、題目 2、解答 一、信號追蹤法(Signal Tracing) 原理 操作步驟 應用場景 二、替換法(Replacement Method) 原理 操作要點 應用場景 三、分段調試法(Segmented Debugging) 原理 操作步驟…

Qt中QObject類的核心作用與使用

一、QObject類簡介 各位小伙伴,在Qt的世界里,QObject類就像是"萬物之母",它是Qt對象模型的核心基類。幾乎所有的Qt類都直接或間接地繼承自QObject。QObject提供了很多重要的功能,比如對象樹管理、信號與槽機制、元對象系…

TVBOXOS6.0雙端APP二開源碼完整版全開源源碼重構版

今天介紹的TVBOXOS手機版App源碼采用了純64位的前端架構,版本則基于本站修正過的6.0前端進行構建。經過多次優化,這款應用不僅操作流暢,界面設計也頗具美感。前端完全集成了安卓原生Java架構,而后端管理采用的是PHP的如意系統。前…

VoWiFi技術深度解析:架構、流程與演進

在蜂窩網絡覆蓋盲區實現高清語音通話的秘密,就藏在這套基于IMS的Wi-Fi呼叫系統中 一、VoWiFi概述與技術價值 VoWiFi(Voice over Wi-Fi)是一種基于IMS核心網的語音通信技術,允許用戶通過Wi-Fi接入運營商的EPC(演進分組核心網)和IMS系統,實現與傳統蜂窩網絡無縫集成的語音…

DuoPlus云手機再上新:統一配置品牌型號、代理分組與便捷搜索功能全面提升!

前言:在這個日新月異的時代,每一個微小的變化都可能引領行業新潮流,DuoPlus云手機基于不斷創新的原則,把用戶的需求放在第一位,不斷對產品進行調整優化,致力于給用戶最全面的產品體驗。DuoPlus通過收集用戶…

C/C++內存陷阱:為何返回局部變量地址是“定時炸彈”?

資料合集下載鏈接: ?https://pan.quark.cn/s/472bbdfcd014? 在編程世界里,有些錯誤就像是隱藏在代碼里的“定時炸彈”,平時可能相安無事,但在某個不經意的時刻就會引爆,導致程序崩潰或出現無法解釋的詭異行為。今天,我們要拆解的,就是這樣一個極具迷惑性又極其危險的…

編程與數學 03-001 計算機組成原理 21_服務器計算機組成實例解析

編程與數學 03-001 計算機組成原理 21_服務器計算機組成實例解析一、引言二、硬件架構特點(一)多核/多處理器設計(二)大容量高帶寬內存(三)存儲系統(四)高可用性設計三、性能優化技術…

opencv簡介(附電子書資料)

概述 OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,廣泛應用于圖像處理、目標檢測、模式識別等領域,是計算機視覺領域最常用的工具之一。電子書學習資料:https://pan.quark.cn…

納米編輯器之Nano 編輯器退出**的詳細操作指南

以下是關于 Nano 編輯器退出的詳細操作指南,涵蓋多種常見場景及技巧: 基礎退出與保存操作 ?保存修改并退出(最常用)快捷鍵觸發退出:按下 Ctrl X[1][2][4]。確認保存:若需保存改動,按 Y&#x…

<HMI><威綸通><觸摸屏>基于威綸通MT8106iQ觸摸屏,實現自定義登錄窗口(優化)

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,PLC相關元器件如觸摸屏(HMI)、交換機等工控產品,如…