棧的核心原理

1 棧的概念及結構

棧是一種特殊的線性表,其特點是只允許在固定的一端進行插入和刪除操作。進行操作的一端稱為棧頂,另一端稱為棧底

棧中的元素遵循后進先出(LIFO,Last In First Out)?原則。

  • 壓\入\進棧(Push):在棧頂插入元素的操作
  • 出棧(Pop):從棧頂刪除元素的操作

?

2 棧的實現

棧可以通過數組或鏈表實現,數組實現更為高效(尾插尾刪的時間復雜度為 O (1))。

?

2.1 棧的結構定義及聲明

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>typedef STDataType;//定義
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;// 初始化
void STInit(ST* pst);// 銷毀
void STDestroy(ST* pst);// 插入數據(入棧)
void STPush(ST* pst, STDataType x);//刪除數據(出棧)
void StackPop(ST* pst);// 獲取棧頂元素
STDataType STTop(ST* pst);// 棧的判空
bool STEmpty(ST* pst);// 棧的大小(獲取棧中數據個數)
int STSize(ST* pst);

2.2 核心操作實現

1.初始化

// 初始化
void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = 0;      // 設定初始棧頂為0,表示無元素ps->capacity = 0;
}

2.銷毀

// 銷毀
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}

3.入棧操作

原本棧為空時,top 為-1,為了便于寫代碼,令為 0

?原本 top 指向棧頂元素的,沒有元素時候,指向 -1,不指向 0。

所以對于上述兩種情況,

情況一:

top 指向棧頂數據。

情況二:

top 指向棧頂數據的下一個位置。

// 插入數據(入棧)
void STPush(ST* ps, STDataType x)
{assert(ps);// 檢查容量,不足則擴容if (ps->top == ps->capacity)//相等就擴容{int newCapacity = ps->capacity == 0 ? 4 : ps->capacity* 2;//最初時候都是0,剛開始開空間開4個STDataType* tmp = (STDataType*)realloc(ps->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity = newCapacity;}// 存入數據后棧頂上移ps->a[ps->top] = x;ps->top++;
}

4.出棧操作

void StackPop(ST* ps)
{assert(ps);// 棧頂下移即完成出棧    ps->top--;                 
}

5.獲取棧頂元素

// 獲取棧頂元素
STDataType STTop(ST* ps)
{assert(ps);//assert(!STEmpty(ps));assert(ps->top > 0);//避免空棧return ps->a[ps->top - 1];
}

6.棧的判空

// 棧的判空
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

?7.棧的大小

// 棧的大小(獲取棧中數據個數)
int STSize(ST* ps)
{assert(ps);return ps->top;
}

2.3 測試一下

#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"int main()
{ST s;STInit(&s);STPush(&s, 1);STPush(&s, 2);STPush(&s, 3);STPush(&s, 4);//訪問元素while (!STEmpty(&s)){printf("%d ", STTop(&s));STPop(&s);}STDestroy(&s);return 0;
}

?

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

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

opencv簡介(附電子書資料)

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

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

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

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

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

visual studio 性能調試

調試 -> 性能查看器 -> CPU使用率 -> 開始 -> 外部代碼 -> 調用樹。如果外部代碼中沒有啥東西&#xff0c;則先清理&#xff0c;再生成一遍。在 Visual Studio 中獲取類似截圖中詳細的函數級耗時分析&#xff08;尤其針對 DLL 中的函數&#xff09;&#xff0c;…

Java JVM

前言 JVM是Java的重要組成部分&#xff0c;對于我這個Cpper轉Javaer也需要認真學習才對。 一、JVM內存結構 #mermaid-svg-rYtbHArIPV8iAK9I {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rYtbHArIPV8iAK9I .erro…

便捷刪除Android開發中XML中重復字符串資源的一個辦法

從android系統源碼中移植一些app到android studio開發的時候可能會遇到字符串重復的編譯報錯。一個辦法是把重復的刪除&#xff0c;只剩余一條即可。例如下面的編譯錯誤&#xff1a;Found item String/abc more than one time但是呢&#xff0c;xml中一般這種重復的很多很多&am…