」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 重新學習CS基礎知識-實作佇列

重新學習CS基礎知識-實作佇列

發佈於2024-11-09
瀏覽:106

Relearning basics of CS - Implementing Queue

你曾經站在隊列中嗎,隊列資料結構也做同樣的事情。當你想在你最喜歡的自助餐廳點餐時,你站在隊伍的最後,然後你就可以繼續排隊並離開。

CS 中的佇列資料結構執行相同的功能。佇列資料結構是先進先出的資料結構。佇列資料結構可以使用兩個基本函數 Enqueue 和 Dequeue 來構建,這兩個函數基本上是添加到列表和從列表中刪除。

現實生活中的例子

在電腦科學的現實世界中,隊列構成了以下軟體元件的支柱

  • 任務調度
  • 事件處理
  • 非同步通訊等

雖然一個簡單且易於視覺化的元件是

  1. 播放清單中歌曲的隊列
  2. 依資料經由網路傳送的順序排列的佇列等

執行

package main

import (
    "fmt"
    "errors"
)

type Queue struct{
    Elements []int
    Size int
}

func (q *Queue) Enqueue(value int){
    if q.GetLength() == q.Size { 
        fmt.Println("Overflow") 
        return
    } 
    q.Elements = append(q.Elements, value) 
}

func (q *Queue) Dequeue() int {
    if q.IsEmpty() { 
        fmt.Println("UnderFlow") 
        return 0
    } 
    element := q.Elements[0] 
    if q.GetLength() == 1 { 
        q.Elements = nil 
        return element 
    } 
    q.Elements = q.Elements[1:] 
    return element
}

func (q *Queue) GetLength() int { 
    return len(q.Elements) 
} 

func (q *Queue) IsEmpty() bool { 
    return len(q.Elements) == 0
} 

func (q *Queue) Peek() (int, error) { 
    if q.IsEmpty() { 
        return 0, errors.New("empty queue") 
    } 
    return q.Elements[0], nil 
} 

複雜

時間複雜度 - 入隊與出隊的 O(1)
空間複雜度 - 入隊與出隊的 O(1)

參考

參考 - https://www.geeksforgeeks.org/queue-in-go-language/

版本聲明 本文轉載於:https://dev.to/abinav_athreya_f4b5487056/relearning-basics-of-cs-implementing-queue-54g7?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Java 中的設計模式及其範例
    Java 中的設計模式及其範例
    Java 中的設計模式是什麼? 設計模式是軟體設計中常見問題的可重複使用解決方案。它們代表了可應用於軟體開發中各種情況的最佳實踐,特別是像 Java 這樣的物件導向程式設計。 設計模式的類型 創建模式: 處理物件創建機制。 結構模式: 關注類別與物件的組成方...
    程式設計 發佈於2024-11-09
  • NestJS 與 Encore.ts:為您的 TypeScript 微服務選擇正確的框架
    NestJS 與 Encore.ts:為您的 TypeScript 微服務選擇正確的框架
    Introduction When web applications grow larger, so does the complexity in developing and maintaining the system. A common way to solve this i...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中重置生成器物件?
    如何在 Python 中重置生成器物件?
    在Python 中重置生成器物件:探索替代方案產生器提供了一種迭代值序列的有效方法,而無需在記憶中。然而,一旦生成器產生了所有值,它就會耗盡並且不能直接重複使用。這就提出瞭如何在 Python 中重置生成器物件的問題。 不幸的是,生成器沒有內建的重置方法。要重複使用生成器,您有多種選擇:再次運行生成...
    程式設計 發佈於2024-11-09
  • 如何有效率地檢索MySQL中最後插入的行?
    如何有效率地檢索MySQL中最後插入的行?
    檢索 MySQL 中最後插入的行:高效方法高效檢索 MySQL 中最後插入的行是資料庫程式設計中的常見任務。以下是實現此目的的兩種有效方法:1。時間戳列:理想的解決方案是建立一個 TIMESTAMP 列,在行插入時自動捕獲當前時間戳記。這提供了一種可靠且準確的方法來確定最近的記錄。 2。 ORDER...
    程式設計 發佈於2024-11-09
  • 如何在PHP中儲存和恢復數組以實現高效的離線存取?
    如何在PHP中儲存和恢復數組以實現高效的離線存取?
    在PHP 中儲存和恢復數組以供本地訪問您已從遠端API 獲取數組並希望將其存儲在本地以供離線使用操縱。為了實現這一目標,您可以在不影響效能或檔案大小的情況下利用 JSON 序列化。 JSON 序列化:編碼和解碼PHP 為JSON 序列化提供了兩個關鍵函數:json_encode 將陣列轉換為人類可讀...
    程式設計 發佈於2024-11-09
  • 如何最小化 Go 中禁用追蹤日誌記錄語句的成本?
    如何最小化 Go 中禁用追蹤日誌記錄語句的成本?
    Go 中禁用語句的低成本追蹤日誌記錄在Go 中,追蹤日誌記錄提出了一個獨特的挑戰:最大限度地減少關鍵路徑中停用日誌語句的成本。與 C/C 不同,Go 沒有預處理器宏,因此有必要探索替代解決方案。 一種方法涉及使用 fmt.Stringer 和 fmt.GoStringer 介面。透過延遲格式化直到日...
    程式設計 發佈於2024-11-09
  • 如何在 JavaScript 中將多個數字組合併為一個?
    如何在 JavaScript 中將多個數字組合併為一個?
    將陣列項目連接成單一陣列在JavaScript 中,將多個陣列的元素組合成一個新陣列可能是一種常見的需求。實現此目的的一種方法是使用循環迭代每個來源數組並將項目推入目標數組。然而,這種方法可能乏味且效率低。 利用「concat」函數幸運的是,JavaScript 提供了一個更簡單、更優雅的解決方案:...
    程式設計 發佈於2024-11-09
  • 掌握 JavaScript 中的循環:綜合指南
    掌握 JavaScript 中的循環:綜合指南
    循环是编程的基础:使我们能够用最少的代码执行重复性任务。无论您是刚刚入门的初学者,还是希望精炼知识的经验丰富的开发人员,理解循环都将大大增强您编写高效、干净且有趣的代码的能力。 在本指南中,我们将深入探讨不同类型的循环、它们在流行编程语言中的语法,以及有关何时以及如何有效使用它们的一些提示。 什么是...
    程式設計 發佈於2024-11-09
  • 如何在不使用外部程式的情況下在 PHP 中確定超過 2GB 檔案的檔案大小?
    如何在不使用外部程式的情況下在 PHP 中確定超過 2GB 檔案的檔案大小?
    在PHP 中無需外部程式即可確定2GB 檔案的大小在PHP 中無需外部程式即可確定2GB 檔案的大小PHP 在處理超過2GB 的檔案大小方面的限制可能會令人沮喪。然而,有一些方法可以克服這個問題,而無需求助於外部程序。 一種方法是透過“大文件工具”,這是一個開源項目,可以在 PHP 中操作超過 2G...
    程式設計 發佈於2024-11-09
  • 在 macOS 上的 Python 中使用 MySQLdb 時如何修正「未載入函式庫:libmysqlclient.16.dylib」錯誤?
    在 macOS 上的 Python 中使用 MySQLdb 時如何修正「未載入函式庫:libmysqlclient.16.dylib」錯誤?
    Python:MySQLdb 和「未載入函式庫:libmysqlclient.16.dylib」設定嘗試中為了在macOS X 10.6 上建立Python/Django 的開發環境,從提供的DMG 安裝了MySQL,並使用pip 安裝了MySQL-python。 Issue嘗試匯入 MySQLdb...
    程式設計 發佈於2024-11-09
  • 如何在 Go 1.6 及更高版本中使用 Cgo 將函數指標傳遞給 C 程式碼?
    如何在 Go 1.6 及更高版本中使用 Cgo 將函數指標傳遞給 C 程式碼?
    使用Cgo 將函數指標傳遞給C 程式碼Cgo 函數指標傳遞的變化在Go 1.6 及更高版本中,Cgo 對於傳遞有更嚴格的規則指向C 代碼的指標。不再允許傳遞指向包含任何 Go 指標的 Go 記憶體的 Go 指標。 程式碼範例以下 Go 程式碼示範如何將函數指標傳遞給 C 程式碼:import ( ...
    程式設計 發佈於2024-11-09
  • 如何從網路讀取多個值
    如何從網路讀取多個值
    在 Node.js 中,處理資料通常涉及從檔案讀取資料並將這些資料插入資料庫。以下是如何從檔案中讀取 JSON 資料、處理以及將其格式化以用於 SQL INSERT 語句: 使用fs.readFile方法讀取檔案內容 使用JSON.parse將JSON字串轉換為物件 使用 .map() 迭代 JSO...
    程式設計 發佈於2024-11-09
  • 如何保護我的網站原始碼免於未經授權的存取?
    如何保護我的網站原始碼免於未經授權的存取?
    保護原始碼免於未經授權的存取防止他人取得您的原始碼可能是一項挑戰。但是,您可以採取一些措施來阻止未經授權的複製。 混淆技術保護程式碼的一種方法是透過混淆。這涉及將程式碼轉換為可讀性較差的格式。混淆工具,例如http://code.google.com/p/minify/、http://refresh...
    程式設計 發佈於2024-11-09
  • MongoDB 伺服器:概述
    MongoDB 伺服器:概述
    MongoDB 是一种流行的 NoSQL 数据库,提供高性能、可扩展且灵活的数据存储解决方案。与使用表和行的传统关系数据库不同,MongoDB 使用灵活的、类似 JSON 的结构(称为 BSON(二进制 JSON))将数据存储在文档中。这使得 MongoDB 能够轻松处理复杂的数据类型和层次关系。...
    程式設計 發佈於2024-11-09
  • 如何在Python中確定整數的位數?
    如何在Python中確定整數的位數?
    在 Python 中確定整數中的位數長度在 Python 中,取得整數中的位數是一個簡單的過程。此技術涉及使用 str() 函數將整數暫時轉換為字串,然後使用 len() 函數確定字串的長度。例如,如果要找出整數 123 中的位數,可以使用 str(123) 將其轉換為字串,結果為「123」。然後,...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3