數據結構篇3—《龍門客“棧”》

在這里插入圖片描述

文章目錄

  • 🚩前言
    • 1、棧的概念
    • 2、棧的實現框架
    • 3、棧的代碼實現
      • 3.1、棧的初始化和銷毀
      • 3.2、入棧\出棧\返回棧頂元素\元素個數\判空
      • 3.3、棧定義注意事項
    • 4、棧的應用實例——《括號匹配問題》

🚩前言

前面記錄了關于順序表和鏈表的數據結構,這一篇文章就來說一下“棧”這一個數據結構。當然不是什么龍門客棧了哈哈。接下來就來實現一下棧這個結構吧,并用實例來展示棧的應用!?

1、棧的概念

棧 :一種特殊的線性表,在存儲數據的時候和順序表以及單鏈表有所區別。我們通過圖來展示:
在這里插入圖片描述

2、棧的實現框架

在這里插入圖片描述

3、棧的代碼實現

該棧的實現是用順序表的結構,模擬實現棧。

3.1、棧的初始化和銷毀

void STInit(ST* pst)
{assert(pst);pst->a = NULL;//此處可以給空間,也可以先不給,//在插入的時候再給。pst->capacity = 0;pst->size = 0;
}void STDestory(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->capacity = 0;pst->size = 0;
}

3.2、入棧\出棧\返回棧頂元素\元素個數\判空

void STPush(ST* pst, STDataType data)
{assert(pst);if (pst->top == pst->capacity){int NewCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a,NewCapacity*sizeof(STDataType));if (tmp == NULL){perror("STPush::realloc fail!");return;}else{pst->a = tmp;pst->capacity = NewCapacity;}}pst->a[pst->top++]=data;
}void STPop(ST* pst)
{assert(pst && pst->top > 0);pst->top--;
}STDataType STTop(ST* pst)
{assert(pst&&pst->top);return pst->a[pst->top - 1];
}int STSize(ST st)
{assert(&st);return st.top;
}bool STEmpty(ST st)
{assert(&st);return st.top == 0;
}

3.3、棧定義注意事項

①對于top初值的大小:
在這里插入圖片描述

4、棧的應用實例——《括號匹配問題》

oj括號匹配問題

思路:
①首先括號匹配需要考慮兩個點:數量上匹配和方向上匹配(左括號要匹配右括號)。
②利用棧結構實現該題:只要是左括號(全部類型的),就入棧;如果遇到右括號,則出棧頂元素(也就是和棧頂左括號進行匹配)。在這我們直接判斷不匹配是情況,就是只判斷不匹配情況,匹配的情況不用管。
代碼如下:

bool isValid(char* s) {ST st;STInit(&st);while(*s!='\0'){if((*s=='(') || (*s=='{') || (*s=='[')){STPush(&st,*s);}else{if(STEmpty(&st)){return false;STDestory(&st);}DataType ret=GetTopElement(&st);STPop(&st);if((ret == '(' && *s != ')')||(ret == '{' && *s != '}')||(ret == '[' && *s != ']')){return false;}}s++;}return STEmpty(&st);STDestory(&st);
}

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

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

相關文章

【CF1965A】Everything Nim

題目鏈接 前置trick&#xff1a; 使用vector去重&#xff1a; vector<int> a(n);for(int i0;i<n;i) cin>>a[i];sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());na.size();題意&#xff1a; 有 n n n堆石子&#xff0c;第 i i i堆有 a i a…

【企業宣傳片】拍攝思維提升,專業影視質感核心揭密,一課搞定

課程下載&#xff1a;【企業宣傳片】拍攝-課程網盤鏈接提取碼下載.txt資源-CSDN文庫 更多資源下載&#xff1a;關注我。 課程介紹 大量案例分析宣傳片拍攝的痛點要點 根據案例告訴你解決方案&#xff0c;講透概念 改變你對企業宣傳片的思維層級與認知 歸納總結對比不同案…

C++語法|類直接包含與自身類型相同的成員變量?

在C中&#xff0c;一個類不能直接包含與自身類型相同的成員變量。這是因為類的大小需要在編譯時確定&#xff0c;而一個包含自身類型的成員變量會導致遞歸定義&#xff0c;從而無法確定類的大小。 文章目錄 示例代碼&#xff08;非法定義&#xff09;解決辦法1.使用指針2.使用智…

k8s 二進制安裝 優化架構之 部署負載均衡,加入master02

目錄 一 實驗環境 二 部署 CoreDNS 1&#xff0c;所有node加載coredns.tar 鏡像 2&#xff0c;在 master01 節點部署 CoreDNS 3&#xff0c; DNS 解析測試 4&#xff0c; 報錯分析 5&#xff0c;重新 DNS 解析測試 三 master02 節點部署 1&#xff0…

AI學習指南數學工具篇-PCA的應用場景

AI學習指南數學工具篇-PCA的應用場景 在人工智能領域&#xff0c;數據處理是非常重要的一環。對于大量高維數據&#xff0c;我們往往需要進行數據降維來減少計算復雜度&#xff0c;同時利用可視化工具對數據進行分析和理解。主成分分析&#xff08;Principal Component Analys…

C++ 利用標準庫多字節轉寬字節字符

在 C/C 之中&#xff0c;通常建議使用&#xff1a;mbstowcs &#xff08;C語言函數庫&#xff09;來實現多字節字符轉寬字節字符&#xff0c;這是因為如果使用。 std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板來實現&#xff0c;它可能導致程序崩潰的風險…

【利用數組處理批量數據-譚浩強配套】(適合專升本、考研)

無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 完整資料如下&#xff1a;純干貨、純干貨、純干貨&#xff01;&#xff01;…

點云成圖原理

點成圖&#xff08;Point Cloud&#xff09;是指由一組離散的點構成的圖形&#xff0c;它們在空間中沒有任何連接關系。點成圖通常是由激光雷達、相機或其他傳感器獲取的三維數據&#xff0c;用于表示現實世界中的物體或場景。 三角成圖&#xff08;Triangulation&#xff09;…

element ui Tree樹形控件

lazy 是否懶加載子節點&#xff0c;需與 load 方法結合使用 boolean 默認為falseload 加載子樹數據的方法&#xff0c;僅當 lazy 屬性為true 時生效 function(node, resolve)使用懶加載load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一層的數據要寫…

PMR-440N7Q韓國施耐德三和相序繼電器EOCR-PMR

韓國施耐德三和EOCR繼電器PMR-440N7Q PMR-440-N 直流電動機保護器:DCL、DOCR-S/H 欠電流繼電器:EUCR-3C 交流電壓繼電器:EOVR、EVR-PD、EVR-FD、EUVR 韓國三和EOCR電動機保護器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基礎02 多機器協作等命令

前言 首先我們知道git給我們提供了分支管理的功能 我們一般使用master分支作為線上環境,master分支一般是一個穩定的分支 我們通常是會創建一個其他分支進行開發,這樣不會影響線上的機器運行 如果沒有git提供這樣的分支功能,就無法做到這一套了 指令學習 假設軟件出現問題咋辦…

LBSS138LT1G 絲印J1 SOT-23 N溝道 50V/200mA 貼片MOSFET

LBSS138LT1G的應用領域廣泛&#xff0c;主要因為它是一種N溝道金屬氧化物半導體場效應晶體管&#xff08;MOSFET&#xff09;&#xff0c;具有低電荷、快速開關速度和高阻斷特性。以下是一些典型的應用領域&#xff1a; 1. 消費電子產品&#xff1a;LBSS138LT1G常用于電視、音響…

debian apt 更改阿里源

1. 備份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件內容為&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT狀態機1-三態循環狀態機

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C邁向Cpp (6):靜態、友元和內部類

標題&#xff1a;【C -&#xff1e; Cpp】由C邁向Cpp &#xff08;6&#xff09;&#xff1a;靜態、友元和內部類 水墨不寫bug &#xff08;圖片來源于網絡&#xff09; 目錄 &#xff08;一&#xff09;靜態成員 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生產性服務業與生活性服務業如何區分

服務業的興旺發達是現代經濟的顯著特征&#xff0c;是經濟社會發展的必然趨勢&#xff0c;是衡量經濟發展現代化、國際化、高端化的重要標志。生產性服務業和生活性服務業是服務業的重要組成部分&#xff0c;是當前中國經濟最具活力的產業&#xff0c;也是未來經濟發展最具潛力…

2024OD機試卷-解密犯罪時間 (java\python\c++)

題目:解密犯罪時間 題目描述 警察在偵破一個案件時,得到了線人給出的可能犯罪時間,形如 “HH:MM” 表示的時刻。 根據警察和線人的約定,為了隱蔽,該時間是修改過的,解密規則為:利用當前出現過的數字,構造下一個距離 當前時間 最近的時刻,則該時間為可能的犯罪時間。…

為pytorch前向和反向的Tensor生成描述性統計

為pytorch前向和反向的Tensor生成描述性統計 代碼 在調試Megatron-DeepSpeed的精度時&#xff0c;我們希望對比每一層前向和反向傳播的輸入輸出誤差。然而&#xff0c;由于數據量過大&#xff0c;直接保存所有數據不太現實。因此&#xff0c;我們生成了輸入輸出tensor的描述性統…

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件&#xff1f; Mesh Insert 3DMAX網格插入插件Mesh Insert&#xff0c;在選擇的面上安門窗、打螺絲、挖洞、插入眼耳口鼻及其它網格模型等可以分分鐘搞定&#xff01;它通過將面選擇替換為庫中的資源來加快建模過程。非常適合硬網格和有機建模&#xf…

Go 一個類型轉換工具包strconv包

Go 語言的 strconv 包提供了用于基本數據類型之間轉換的函數&#xff0c;包括字符串到其他基本類型的轉換&#xff0c;以及其他基本類型到字符串的轉換。 字符串轉換為基本數據類型 strconv.Atoi&#xff1a;將字符串轉換為 intstrconv.ParseBool&#xff1a;將字符串轉換為 b…