數據結構 棧(1)

1. 棧的概念和結構

之前幾篇我們分別講解了順序表和單鏈表的內容,今天我們又來學習一個新的關于數據結構的內

容--- 棧 。

棧:棧也屬于線性表 ,?但它是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操

作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數據元素遵守后進先出

LIFO(Last In First Out)的原則。


壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數據在棧頂。

出棧:棧的刪除操作叫做出棧。出數據也在棧頂。

棧底層結構選型:

棧的實現一般可以使用數組或者鏈表實現,相對而言數組的結構實現更優一些。因為數組在尾上插

入數據的代價比較小。

2. 棧,順序表,單鏈表之間的關聯

棧、順序表和鏈表都是數據結構領域中重要的概念,它們之間存在著緊密的聯系,也有著明顯的區

別:

?
2.1 聯系:

- 底層實現關聯:棧可以使用順序表(數組)或者鏈表作為底層的數據存儲結構來實現。

- 基于順序表實現棧:在以順序表為基礎實現棧時,通常使用數組來存儲棧中的元素,用一個變量

(如?top?)來記錄棧頂的位置。入棧操作就是在數組末尾添加元素(當空間足夠時),并更

新?top??;出棧操作則是移除數組末尾元素,并更新?top??。這種實現方式利用了順序表在尾端插入

和刪除元素的高效性(時間復雜度為O(1))。

- 基于鏈表實現棧:當用鏈表實現棧時,一般將鏈表的頭節點作為棧頂。入棧操作通過在鏈表頭部

插入新節點來完成,出棧操作則是刪除鏈表頭部節點。這是因為在鏈表頭部進行插入和刪除操作的

時間復雜度也是O(1) ,符合棧的操作特性。

- 棧底層結構選型:

棧的實現一般可以使用數組或者鏈表實現,相對而言數組的結構實現更優一些。因為數組在尾上插

入數據的代價比較小。

- 數據存儲特性:從數據存儲的角度來看,順序表、鏈表和棧都是用于組織和存儲數據的方式。順

序表和鏈表是更基礎的數據結構,提供了不同的存儲和訪問數據的方式;而棧是一種具有特定操作

約束(后進先出)的數據結構,它可以借助順序表或鏈表來實現其功能。

?2.2 區別:

- 數據結構定義:

- 棧:是一種抽象數據類型,它定義了一組特定的操作,主要包括入棧、出棧和獲取棧頂元素等,

重點在于操作的規則(后進先出),而不是具體的存儲方式。

- 順序表:是一種線性數據結構,它使用連續的內存空間來存儲數據元素,元素之間的邏輯順序和

物理順序是一致的。用戶可以通過下標快速訪問表中的任意元素,支持在任意位置插入和刪除元素

(但在非末尾位置操作的時間復雜度較高 )。

- 鏈表:也是一種線性數據結構,它通過指針將各個數據節點鏈接起來,節點在內存中的存儲位置

不一定連續。鏈表的優勢在于插入和刪除操作較為靈活高效(時間復雜度為O(1) ,前提是已知待

操作節點的前驅節點 ),但訪問特定位置的元素需要從頭節點開始遍歷,時間復雜度為O(n) 。

- 操作特性:

- 棧:操作受限,只能在棧頂進行插入和刪除操作,遵循后進先出原則,主要用于解決具有特定順

序要求的問題,比如函數調用、表達式求值等。

- 順序表:操作相對靈活,可以在任意位置進行插入、刪除和訪問操作。但在插入和刪除元素時,

如果涉及到大量元素的移動(比如在表頭插入元素 ),時間復雜度較高,為O(n) ;訪問元素的時

間復雜度為O(1) 。

- 鏈表:插入和刪除操作在已知前驅節點的情況下時間復雜度低,為O(1) ,但訪問元素需要順序遍

歷鏈表,時間復雜度為O(n) ,不支持隨機訪問。

- 內存使用:

- 順序表:需要預先分配一定大小的連續內存空間,如果數據量預估不準確,可能會導致內存浪費

(分配過大)或溢出(分配過小 )。

- 鏈表:采用動態內存分配,按需分配節點空間,不會造成內存的浪費,但每個節點除了存儲數據

外,還需要額外存儲指針,會占用一定的內存空間。

- 棧:根據其實現方式的不同,內存使用特點也有所不同。基于順序表實現的棧,存在與順序表類

似的內存分配問題;基于鏈表實現的棧,內存分配較為靈活,類似于鏈表的內存使用方式。

以上便是棧的概念內容以及它和順序表和單鏈表之間的關系。下一篇文章小編將詳細講解關于棧的

內容的實現。

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

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

相關文章

【Android代碼】繪本翻頁時通過AI識別,自動通過手機/pad朗讀繪本

核心功能: 打開攝像頭(可支持外接攝像頭)檢測翻頁(后續考慮添加圖像差異算法)拍照后用 識圖自動用 TextToSpeech 朗讀文字內容 📌 說明:使用了 CameraX(Android Jetpack)…

園區IPv6規劃與部署

?今天我將圍繞“園區IPv6規劃與部署”這一主題,結合行業趨勢、技術難點和實際案例,與大家分享一套可落地的規劃方法論。?在開始前,我想先問大家一個問題:?如果現在讓你給一個新建園區設計網絡,你會優先考慮IPv4還是…

mingw11.2+opencv4.12 cmake contrib編譯

第一次Configure之后,會出現不少錯誤,主要是因為文件沒辦法正常下載引起的,因為之前編譯過vs2022 ,緩存里面有應該下載的文件了,所以這次沒有錯誤,如果你第一次Configure有下載錯誤,可以下載以下的文件飛書 Docs Link:…

免費MCP服務:Excel CSV 轉 JSON MCP by WTSolutions 文檔

簡介 Excel 轉 JSON MCP(模型上下文協議)提供了一個標準化接口,用于通過模型上下文協議將 Excel 和 CSV 數據轉換為 JSON 格式。此 MCP 實現提供了兩個專門用于數據轉換的工具: excel_to_json_mcp_from_data:轉換制表…

應用集成體系深度解析:從數據互通到流程協同

一、應用集成核心概念框架 #mermaid-svg-0V3XAJsofKi2qCa7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0V3XAJsofKi2qCa7 .error-icon{fill:#552222;}#mermaid-svg-0V3XAJsofKi2qCa7 .error-text{fill:#552222;s…

深入解析 AWS RDS Proxy

在當今微服務架構與無服務器計算快速發展的背景下,數據庫連接成為許多應用系統的性能瓶頸。傳統RDS實例在處理大量短連接請求時,往往面臨連接資源耗盡、連接建立耗時過高等問題。為了解決這一挑戰,AWS 推出了 RDS Proxy 服務,通過…

深度剖析 TDMQ RabbitMQ 版經典隊列底層存儲機制

導語 RabbitMQ 作為開源消息隊列的標桿產品,憑借靈活的路由機制與高可用設計,支撐著海量業務場景的消息流轉。而經典隊列(Classic Queue) 作為 RabbitMQ 最基礎、應用最廣泛的隊列類型,其底層存儲機制直接決定了消息處…

Spring AI開發智能客服(Tool calling)

文章目錄前言1 思路分析2 工程結構搭建1_數據庫表2_引入依賴3_基礎代碼3 定義 Tool1_分析查詢條件2_定義Function4 系統提示詞5 配置ChatClient6 編寫Controller7 測試8 Tool calling 底層組件1_ToolCallback2_ToolDefinition3_ToolCallingManager4_ResultConverter5_ToolConte…

設計模式筆記_結構型_適配器模式

1.適配器模式介紹適配器模式是一種結構型設計模式,它允許不兼容的接口協同工作。適配器模式的核心思想是將一個類的接口轉換成客戶期望的另一個接口,使得原本由于接口不兼容而不能一起工作的類可以一起工作。你可以將其想象成一個“轉換插頭”——假設你…

事務隔離:從鎖實現到MVCC實現

文章目錄事務隔離:從鎖實現到MVCC實現事務四大特性事務隔離級別鎖實現概念實現事務隔離MVCC實現當前讀與快照讀實現事務隔離Read View總結事務隔離:從鎖實現到MVCC實現 面試的時候被面試官問到:你這個項目為什么使用了可重復讀而不選擇讀已提…

小架構step系列18:工具

1 概述 在寫代碼的時候,有很多通用的、與業務無關邏輯,這些一般寫成工具類方法。這些工具類方法慢慢地被積累起來,變成了開源包,可以直接使用開源包,而不是自己再花時間來重復造這些輪子。 這些工具類的開源包比較多…

網絡、CentOS 系統、數據庫面試知識點總結

文章目錄Linux CentOS 面試知識點整理速查復習? 一、Linux 高頻面試題? 二、MySQL 高頻面試題? 三、計算機網絡(OSI四層模型)高頻面試題🔗 鏈路層(Link Layer)🌐 網絡層(Internet Layer&…

Vue (Official) v3.0.2 新特性 為非類npm環境引入 globalTypesPath 選項

目錄 前言 報錯信息 原因 解決方案 總結 前言 在早上更新了vscode后,發現自己 uni-app 項目的 .vue文件 的 template 標簽都出現了報錯。定位到了問題是因為 Vue (Official) 插件更新導致的,重裝了插件的上一個小版本,報錯消失&#xff…

程序可能的輸出

#include "csapp.h"int main() {int x 3;if (Fork() ! 0)printf("x%d\n", x);printf("x%d\n", --x);exit(0); }分析:父進程先執行printf("x%d\n", x); 輸出x4。后執行 printf("x%d\n", --x);輸出x3。子進程只執…

2025年UDP應用抗洪指南:從T級清洗到AI免疫,實戰防御UDP洪水攻擊

一次未防護的UDP暴露,可能讓日活百萬的應用瞬間癱瘓,損失超千萬2025年,隨著物聯網僵尸網絡規模指數級增長及AI驅動的自適應攻擊工具泛濫,UDP洪水攻擊峰值已突破8Tbps,單次攻擊成本卻降至50元以下。更致命的是&#xff…

centos7安裝MySQL8.4手冊

目錄前言一、首先更新插件,并查看當前系統版本二、安裝步驟1、創建mysql目錄2、安裝rpm包3、安裝 mysql-community-server4、啟動MySQL服務5、查看MySQL狀態6、設置開機自啟動三、查看默認密碼四、登錄mysql五、修改密碼六、開啟遠程訪問1. 修改 MySQL 配置文件2. 重…

人臉檢測算法——SCRFD

SCRFD算法核心解析 1. 算法定義與背景 SCRFD(Sample and Computation Redistribution for Efficient Face Detection)由Jia Guo等人于2021年在arXiv提出,是一種高效、高精度的人臉檢測算法,其核心創新在于: 雙重重分…

vue3+ts+elementui-表格根據相同值合并

代碼<div style"height: auto; overflow: auto"><el-table ref"dataTableRef" v-loading"loading" :data"pageData" highlight-current-row borderselection-change"handleSelectionChange" :span-method"obj…

UI前端與數字孿生融合案例:智慧城市的智慧停車引導系統

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;停車難的 “城市痛點” 與數字孿生的破局之道當司機在商圈繞圈 30 分鐘仍…

java+vue+SpringBoot集團門戶網站(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.8 數…