數據結構--棧(Stack) 隊列(Queue)

一、棧(Stack)

1. 棧的定義

  • 棧(Stack)是一種 先進后出(LIFO, Last In First Out) 的數據結構。

  • 就像一摞書:最后放的書最先拿走。


2. 棧的常用方法(Stack 類)

  • Stack<E> 繼承自 Vector,是 線程安全 的,但性能一般。

  • 更推薦使用 Deque<E>(如 ArrayDequeLinkedList)來實現棧結構。

方法功能描述備注
push(E e)將元素壓入棧頂相當于入棧操作
pop()彈出棧頂元素,并返回該元素棧為空時會拋 EmptyStackException
peek()查看棧頂元素,但不刪除棧為空時會拋 EmptyStackException
empty()判斷棧是否為空返回 truefalse
search(Object o)返回元素在棧中的位置(從 1 開始,棧頂為 1)找不到返回 -1

3. 使用示例

  • Stack<E> 繼承自 Vector,是 線程安全 的,但性能一般。(下面的(1))

  • 更推薦使用 Deque<E>(如 ArrayDequeLinkedList)來實現棧結構。(下面的(2))

(1)使用 Stack
Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
stack.push(30);System.out.println(stack.peek()); // 30
System.out.println(stack.pop());  // 30
System.out.println(stack.pop());  // 20
System.out.println(stack.empty()); // false
(2)使用 ArrayDeque 模擬棧(推薦)
Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.push("B");
stack.push("C");System.out.println(stack.pop()); // C
System.out.println(stack.peek()); // B

4. 棧的應用場景

  • 函數調用棧:保存方法調用現場(局部變量、返回地址等)。

  • 括號匹配:比如判斷 ({[]}) 是否匹配。

  • 表達式求值:逆波蘭表達式(后綴表達式)。

  • 回溯算法:比如迷宮尋路。

二、隊列(Queue)

1. 隊列的定義

  • 隊列(Queue)是一種 先進先出(FIFO, First In First Out) 的數據結構。

  • 就像排隊買票:先排隊的人先買,后排的人要等前面的人買完。

  • 在 Java 中,Queue 是一個接口,繼承自 Collection 接口。


2. 隊列的常用方法(來自 Queue 接口)

方法功能
boolean add(E e)向隊列尾部插入元素,若失敗拋異常
boolean offer(E e)向隊列尾部插入元素,失敗時返回 false
E remove()刪除并返回隊首元素,隊列為空時拋異常
E poll()刪除并返回隊首元素,隊列為空時返回 null
E element()返回隊首元素但不刪除,隊列為空時拋異常
E peek()返回隊首元素但不刪除,隊列為空時返回 null

3. 常見的隊列實現類

(1)LinkedList
  • LinkedList 實現了 Queue 接口,可以作為普通隊列使用。

Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println(queue.poll()); // A
System.out.println(queue.peek()); // B
(2)PriorityQueue(優先隊列)
  • 元素按 優先級排序(默認是自然順序,小的優先)。

Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(1);
pq.offer(3);
System.out.println(pq.poll()); // 1
System.out.println(pq.poll()); // 3
(3)ArrayDeque(雙端隊列)
  • 推薦的隊列實現,比 LinkedList 更高效。

  • 可以當隊列(FIFO)或棧(LIFO)使用。

Queue<String> dq = new ArrayDeque<>();
dq.offer("A");
dq.offer("B");
System.out.println(dq.poll()); // A

4. 隊列的應用場景

  • 排隊系統:比如消息隊列(RabbitMQ、Kafka)。

  • 緩沖區:比如網絡 IO 中的數據緩沖。

  • 廣度優先搜索(BFS):圖/樹的層序遍歷。


三、棧和隊列對比

特點棧(Stack)隊列(Queue)
存取順序LIFO(先進后出)FIFO(先進先出)
典型操作push 入棧,pop 出棧offer 入隊,poll 出隊
Java 實現類Stack, ArrayDequeLinkedList, ArrayDeque, PriorityQueue
應用場景函數調用棧、表達式計算、回溯消息隊列、BFS、排隊系統

? 總結

  • :適合 回溯 / 嵌套處理,強調后進先出。

  • 隊列:適合 排隊 / 順序處理,強調先來先服務。

  • 推薦 使用 ArrayDeque 來實現隊列和棧,性能比 LinkedListStack 更好。

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

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

相關文章

FART 主動調用組件深度解析:破解 ART 下函數抽取殼的終極武器

版權歸作者所有&#xff0c;如有轉發&#xff0c;請注明文章出處&#xff1a;https://cyrus-studio.github.io/blog/ FART 的主動調用組件 在 Android 逆向與脫殼領域&#xff0c;早期的自動化脫殼方案&#xff08;如 DexHunter、FUPK3&#xff09;主要運行在 Dalvik 環境&…

基于有限元分析法的熱壓成型過程中結構變形和堆積matlab模擬與仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.部分程序 4.算法理論概述 5.完整程序 1.程序功能描述 在壓印過程中&#xff0c;一般情況下&#xff0c;我們遵循質量&#xff0c;動量和能量守恒的原則進行仿真。然后建立偏微分方程組&#xff0c;然后通過有限元的…

CF每日3題(1500-1600)

1809C 神必構造題 對子數組的和考慮使用前綴和&#xff0c;發現逆序對的規律&#xff0c;構造1797C 神奇交互題 需要找特殊的點確定位置2132D 神奇數位題 需要用二分logk優化復雜度&#xff0c;把數位轉換成能到的上限數aim 1809C 構造 前綴和 逆序對 思維 排序 1500 /* 神必構…

Linux學習——sqlite3

1.sqlite3的使用1.打開數據庫sqlite3 stu.db //database2.操作輸入 sqlite3&#xff0c;進入軟件后&#xff0c;輸入 sqlite3 軟件自帶的命令&#xff08;.help&#xff0c;.databases&#xff0c;quit&#xff0c;.exit&#xff09;3.增刪改查增CREATE TABLE database_name.…

【線性代數基礎 | 那忘算9】基爾霍夫(拉普拉斯)矩陣 矩陣—樹定理證明 [詳細推導]

之前學的不扎實導致現在還得回來再學。 專欄指路&#xff1a;《再來一遍一定記住的算法&#xff08;那些你可能忘記了的算法&#xff09;》 前置知識&#xff1a; 生成樹&#xff1a;在一個無向連通圖中&#xff0c;能夠連接所有頂點的樹結構。 點的度數&#xff1a;與這個點…

Chrome高危零日漏洞PoC公開,已被用于野外攻擊

谷歌此前披露了Chrome瀏覽器V8 JavaScript引擎中存在一個高危零日漏洞&#xff08;CVE-2025-5419&#xff09;。而在近日&#xff0c;該漏洞的概念驗證&#xff08;PoC&#xff09;利用代碼已被公開。相關補丁已經發布&#xff0c;用戶應盡快進行更新。 **核心要點** 1. CVE-2…

HTTP 接口調用工具類(OkHttp 版)

說明 HTTP 基本知識序號方法請求體描述1GET一般沒有&#xff0c;可以有從服務器獲取資源。用于請求數據而不對數據進行更改。例如&#xff0c;從服務器獲取網頁、圖片等。2POST有向服務器發送數據以創建新資源。常用于提交表單數據或上傳文件。發送的數據包含在請求體中。3PUT有…

Spring/Spring MVC/iBATIS 應用 HTTP 到 HTTPS 遷移技術方案

Spring/Spring MVC/iBATIS 應用 HTTP 到 HTTPS 遷移技術方案概述本方案詳細介紹了將基于 Spring、Spring MVC 和 iBATIS 的傳統 Java Web 應用從 HTTP 遷移到 HTTPS 的完整流程。這種傳統架構的遷移需要考慮更多手動配置和兼容性問題。一、環境評估與準備工作1.1 當前環境分析首…

多智能體系統設計:5種編排模式解決復雜AI任務

當你有一個由研究員、文案、數據分析師和質檢員組成的團隊時&#xff0c;如果沒有合理的協調機制&#xff0c;再優秀的個體也可能產生沖突的結論、停滯的流程&#xff0c;或者解決錯誤的問題。AI智能體同樣如此。 隨著系統從單體模型向多智能體架構演進&#xff0c;編排成為核…

CVPR上的多模態檢索+視頻理解,LLM助力提效翻倍

關注gongzhongaho【CVPR頂會精選】多模態研究正處在爆發期&#xff0c;從圖文融合到視頻、語音、傳感器數據&#xff0c;模型能力邊界不斷擴展。頂會頂刊已將其視為具身智能與通用AI的核心方向。但寫論文時常遇到痛點&#xff1a;方法多、任務雜&#xff0c;缺乏統一框架&#…

Docker部署單節點使用KRaft模式的Kafka3.8.0版本與可視化界面Kafka-Map

記錄一下Docker部署單節點Kafka與部署可視化界面KafkaMap容器 目錄 一、Kafka早已經棄用了ZooKeeper 二、Docker部署單機版Kafka 1、--name kafka-server 2、--network kafka-stand 3、--restart unless-stopped 4、-p 9092:9092 5、-p 9093:9093 6、-e ALLOW_PLAINTE…

Elasticsearch面試精講 Day 2:索引、文檔與映射機制

【Elasticsearch面試精講 Day 2】索引、文檔與映射機制 在“Elasticsearch面試精講”系列的第二天&#xff0c;我們將深入探討索引&#xff08;Index&#xff09;、文檔&#xff08;Document&#xff09;與映射&#xff08;Mapping&#xff09;機制。這是Elasticsearch中最基礎…

Vue2 與 Vue3 路由鉤子的區別及用法詳解

Vue2 與 Vue3 路由鉤子的區別及用法詳解 一、核心區別概覽特性Vue2 (選項式API)Vue3 (組合式API)定義方式組件選項形式在setup()中調用函數形式鉤子名稱beforeRouteEnter/Update/LeaveonBeforeRouteUpdate/Leavethis訪問beforeRouteEnter不能訪問this無this概念&#xff0c;直接…

STM32的內存分配與堆棧

使用過cortex-M4內核單片機的朋友對下面這張圖一定不會感到陌生&#xff0c;它是ST原廠手冊里面的memory map&#xff0c;里面的信息量其實非常多&#xff0c;今天簡單說明一部分。我們在編寫stm32代碼的時候最長使用的地址有兩塊&#xff0c;第一塊是0x0000 0000~0x3FFF FFFF,…

OpenStack 03:創建實例

修改默認安全組 管理規則 添加規則 添加端口22規則 添加ping 規則 下載鏡像文件 Get images — Virtual Machine Image Guide documentation https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2 …

企業級架構師綜合能力項目案例一(各種組件集群搭建+SpringBoot整合)

架構圖 用戶請求 → Nginx → Spring Cloud Gateway → 微服務集群↓MySQL集群主從復制(ShardingSphere) Redis集群主從復制(Sentinel)ES集群 MongoDB集群(分片)RocketMQ集群 Seata分布式事務搭建集群 Nginx集群和配置┌─────────…

學習stm32 窗口看門狗

窗口看門狗1.WWDG簡介窗口看門狗用于監測單片機程序運行時效是否精準&#xff0c;主要檢測軟件異常&#xff0c;一般用于需要精準檢測程序運行時間的場合。不僅防止程序 “卡死不喂狗”&#xff0c;還能避免程序 “異常早喂狗”&#xff08;如死循環中誤執行喂狗指令&#xff0…

Selenium 等待機制:編寫穩定可靠的自動化腳本

一、為什么需要等待機制&#xff1f;網頁是動態加載的&#xff0c;元素出現的時間不確定。如果腳本在元素還沒加載完成時就嘗試操作它&#xff0c;就會拋出 NoSuchElementException 異常。三種等待方式&#xff1a;強制等待&#xff1a;time.sleep() - 簡單但低效隱式等待&…

蓓韻安禧活性葉酸獨立包裝防漏貼心設計

蓓韻安禧葉酸新升級 近期&#xff0c;蓓韻安禧在葉酸產品上進行了重要的優化升級。這次升級的核心在于產品形態和使用體驗的顯著提升&#xff0c;尤其體現在其包裝設計上。新版本采用了獨立密封的小包裝形式&#xff0c;每一份都精準包含每日所需的葉酸量。這種設計不僅有效避免…

8針腳的1.8寸IIC接口的TFT彩屏的八個引腳都需要使用嗎?

核心結論 不需要全部使用8個引腳。實際僅需連接 4根核心線&#xff08;GND, VCC, SCL, SDA&#xff09; 即可基本工作&#xff0c;其余引腳為功能增強或備用設計。具體需根據屏幕型號確認&#xff0c;但通用規則如下&#xff1a;8針腳功能分解引腳標號典型名稱是否必需作用不連…