3.1.2_棧的順序存儲實現

知識總覽:

順序棧的定義:

順序棧是用順序存儲實現的 ,代碼定義方式和順序表類似(啥是順序表來著???)

定義一個順序棧struct結構體SqStack,結構體中有靜態數組data來存放棧里邊的元素+1個int型的top指針用來指向棧頂元素(該指針一般記錄的是棧頂元素的索引下標,data數組索引下標從0開始),聲明一個順序棧SqStack S;后會在內存分配一塊連續的內存空間(應該是因為是順序存儲),空間大小為data數組中的每個元素所占空間大小*元素個數(MaxSize * sizeOf(ElemType))+top指針占用空間(int型的占4Byte),比如說空間大小是10,依次壓棧進入5個元素a、b、c、d、e,則現在top指向e元素的位置(不是指向沒有元素的最上方),即top=4(e的索引下標)

聲明棧SqStack S:

此時棧里邊data數組元素為空,即棧頂元素為空,則讓top指針指向-1位置,而不是data[0]位置==》因此,判斷棧空,就用S.top==-1即可

以下為S.top指針指向棧頂元素位置(即開始棧頂元素為空,則指向-1位置)====》現在時,和壓棧元素同呼吸共命運

初始化棧:

讓top指針指向-1位置,即S.top == -1;

進棧操作:

因為數組的長度是固定的,所以每次進棧前都要判斷指向棧頂元素的top指針表示的索引位置==Maxsize-1,相等這表示要數組下標越界了,注意每次top指針指向的索引位置都是要進來的元素位置,所以每次進棧的時候都要讓當前的top+1先操作,再把元素放到top+1位置,即讓top先挪位置,再把元素放進來,++top前++,先自身+1再執行操作

出棧操作:

出棧前先判斷棧里邊還有沒有元素即判斷棧是否空,有元素才出棧,即用S.top==-1判斷,出棧要把出棧元素返回用引用X返回,出棧時只是把數組里的元素邏輯上刪除了,但是該元素還依然存在內存(因為該元素用X返回了),出棧時先把該元素出棧再讓S.top-1,即先讓當前棧頂元素騰地出去賦值給X,再讓棧頂元素指針下移,先操作再自身-1,S.top--

讀棧頂元素操作:

和上邊出棧類似,只是沒有S.top指針下移,只是把棧頂元素返回,棧頂元素依然不變

以下為棧頂指針指向下一個元素可以插入的位置(即開始棧為空,下一個元素要插入的位置是0,即讓棧頂指針指向0位置)===》未來式,等待式,即棧頂指向的位置肯定是沒值的:

故判斷棧空用S.top==0,進棧時判斷棧滿用S.top==MaxSize,出棧時棧空用S.top==0,出棧時先S.top-1先把指針下移指向要出棧的元素位置

回收棧:即讓棧頂指針指向-1,即讓棧空即可,然后內存中的空間自動回收,不用使用malloc函數

缺點:順序棧是用靜態數組存儲實現的,靜態數組長度固定,導致棧的大小不可改變,可以用鏈式存儲的方式實現改變缺點,也可以開始申請一大片連續的內存空間,但是申請了不用又浪費,

共享棧:

2個棧共用一片連續的內存空間,解決申請一大片連續內存空間浪費的情況

2個棧有2個棧頂指針,開始2個棧都為空,0號棧棧頂指針指向-1,1號棧棧頂指針指向MaxSize【即2個棧頂指針用的都是現在式,要入棧的話,0號棧先top+1,1號棧先top-1】,即0號棧入棧從下往上走,1號棧入棧從上往下走,當0號棧的S.top+1==1號棧的S.top,或者1號棧的S.top-1==0號棧的S.top證明共享棧已滿,2個棧物理上共用一塊連續空間

?

知識回顧:

?

?。。。。。。。。。

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

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

相關文章

JavaEE初階第一期:計算機是如何 “思考” 的(上)

專欄:JavaEE初階起飛計劃 個人主頁:手握風云 一、馮諾依曼體系結構 1.1. 概念 馮諾依曼體系結構(Von Neumann Architecture),是現代計算機的基礎設計概念,核心思想是“存儲程序控制”。具體來說&#xff0c…

SQL Server全局搜索:在整個數據庫中查找特定值的高效方法

SQL Server全局搜索:在整個數據庫中查找特定值的高效方法 一、需求背景:為什么需要數據庫全局搜索? 在數據庫管理和開發過程中,我們經常會遇到這樣的場景: 只記得某個數據值,但忘記了它所在的表或列需要…

萬物皆數:構建數字信號處理的數學基石

萬物皆數:構建數字信號處理的數學基石 歡迎來到數字信號處理(DSP)的世界。在這里,聲音、圖像、通信信號、醫療數據……一切信息都被轉化為一串串冰冷的數字。然而,正是通過對這些數字的精妙運算,我們得以實…

到院率最高提升40%,消費醫療用AI營銷機器人跑贏增長焦慮

當前,消費醫療機構普遍依賴人工咨詢師進行客戶接待和營銷咨詢。然而,專業咨詢師缺口高達20萬人,大量“護士轉咨詢”“銷售轉咨詢”現象導致方案設計專業性不足,客戶投訴率提升40%。人工客服不僅醫學知識薄弱,學習能力有…

【推薦算法】注意力機制與興趣演化:推薦系統如何抓住用戶的心?

注意力機制與興趣演化:推薦系統如何抓住用戶的心? 一、算法背景知識:從靜態推薦到動態感知1.1 傳統推薦系統的局限性1.2 人類注意力機制的啟示 二、算法理論/結構:動態興趣建模革命2.1 DIN(深度興趣網絡)&a…

快速入門:創建 Azure 數據資源管理器群集和數據庫

前言 Azure 數據資源管理器是 Microsoft 提供的一項快速、完全托管的數據分析服務。 它允許用戶分析來自應用程序、網站、物聯網設備等的海量數據流,從而簡化復雜的數據探索。 它能夠處理數 PB 的數據,并支持快速檢索數據以進行分析。 主要特點 高性能:ADX 針對快速數據提…

Redis集群模式之Redis Cluster(2)

上篇文章我們講解了Redis Cluster中的主要模塊和兩種重定向方式,這篇文章我們來講解一下Redis Cluster的狀態監測和維護。 Redis Cluster狀態監測及維護 要講解Redis Cluster中節點的狀態如何維護,我們要先知道Redis Cluster中的節點有哪些狀態&#xf…

Step-Audio-AQAA 解讀:邁向「純語音」交互的端到端 LALM 新里程

引言:AI 從聽到說 大型音頻語言模型(Large Audio-Language Models, LALMs)正在徹底改變我們與機器交互的方式。我們不再滿足于簡單的文本問答,而是期望 AI 能夠像人類一樣,通過自然的語音進行交流,理解我們的意圖,并以富有表現力的聲音回應。然而,構建一個能夠直接從語…

基于邊緣計算的絲桿狀態實時監測系統設計?

基于邊緣計算的絲桿狀態實時監測系統設計,可從系統架構、各層功能設計、關鍵技術應用等方面入手,以下為詳細介紹: 系統架構設計 基于邊緣計算的絲桿狀態實時監測系統通常由感知層、邊緣層和云端三部分組成。感知層負責數據采集,…

LeetCode 每日一題 2025/6/9-2025/6/15

記錄了初步解題思路 以及本地實現代碼;并不一定為最優 也希望大家能一起探討 一起進步 目錄 6/9 440. 字典序的第K小數字6/10 3442. 奇偶頻次間的最大差值 I6/11 3445. 奇偶頻次間的最大差值 II6/12 3423. 循環數組中相鄰元素的最大差值6/13 2616. 最小化數對的最大…

PyTorch張量操作中dim參數的核心原理與應用技巧:

今天在搭建神經網絡模型中重寫forward函數時,對輸出結果在最后一個維度上應用 Softmax 函數,將輸出轉化為概率分布。但對于dim的概念不是很熟悉,經過查閱后整理了一下內容。 PyTorch張量操作精解:深入理解dim參數的維度規則與實踐…

Day 31

1. 規范的文件命名 核心原則: 清晰明確:文件名應準確描述內容(如data_preprocessing.py) 風格統一: 推薦小寫下劃線(Python慣例,如model_training.py) 或使用駝峰式&#xff08…

學習Oracle------認識VARCHAR2

學習Oracle------認識VARCHAR2 VARCHAR2 是 Oracle 數據庫中專門用于存儲可變長度字符串的數據類型,它是 Oracle 對標準 SQL 數據類型 VARCHAR 的增強和替代。以下是全面解析: 核心概念 名字含義: VAR Variable(可變&#xff09…

記錄jackson解析出錯

Jackson 屬性名大小寫 Bug 記錄 問題描述 在前后端交互過程中,前端傳遞的 JSON 字段名為駝峰風格(如 qTitle),后端 Java 實體類字段名也為駝峰(如 private String qTitle;)。 但在反序列化時,…

泰國數碼電商系統定制|3C產品詳情泰語化+售后管理,適配泰國數碼零售

隨著全球數字化的加速,電商行業正在迅速發展,尤其是以泰國為代表的東南亞市場。泰國不僅是一個擁有龐大消費者群體的市場,而且其日益增長的互聯網使用率和手機普及率使得數碼產品的銷售潛力巨大。在這樣的大背景下,針對泰國市場的…

59、定制化原理-SpringBoot定制化組件的幾種方式

59、定制化原理-SpringBoot定制化組件的幾種方式 在Spring Boot中,定制化組件的方式多樣,以下是幾種常見的方法及其原理: #### 修改配置文件 通過修改application.properties或application.yml文件,利用ConfigurationProperties注…

機器學習--分類

陽性(Positive)和陰性(Negative) 陽性(Positive) 正類:通常指的是我們關注的類別或事件;陰性(Negative) 負類: 指的是與陽性相反的類別或事件。…

三星MZQL2960HCJR-00BAL高性能固態硬盤控制器SSD云計算和高端存儲專用 電子元器件解析

MZQL2960HCJR-00BAL 電子元器件解析 1. 基本類型與功能 MZQL2960HCJR-00BAL 是 三星(Samsung) 推出的一款 企業級NVMe SSD主控芯片,屬于 高性能固態硬盤控制器,專為 數據中心、云計算和高端存儲 設計。 關鍵特性: 接…

Blender——建構、粒子、燈光、動畫

Blender是一款開源的三維建模和動畫軟件,可用于創建3D模型、動畫、渲染圖像和視頻,還支持雕刻、紋理繪制、粒子系統等功能。 建構篇: 基本操作: 視角的控制: 控制觀察視角: 鼠標中鍵 平移視圖: Shift鼠標中鍵 縮放視…

節日快樂啊

<section data-role"paragraph" class"_135editor"> <p> <br/> </p> </section> <p> 瑪哈特2025中國國際金屬成形展覽會邀請函 </p><style>* { margin: 0; …