C++中Stack(棧)的使用方法與基本操作詳解
一、stack概述
Stack(棧)是一種線性數(shù)據(jù)結(jié)構(gòu),它具有"先進(jìn)后出“(Last In First Out,簡稱LIFO)的特點,即新元素進(jìn)棧后只能位于棧頂,元素出棧時也只能從棧頂開始。
在C++中,stack通常是通過STL(Standard Template Library)庫中的stack模板實現(xiàn)的。STL stack是基于deque(雙端隊列)實現(xiàn)的,通過deque模板我們可以實現(xiàn)stack的一些操作。
二、stack的基本操作
1、頭文件
在使用STL中stack模板之前,我們需要包括頭文件#include<stack>。
#include <iostream> #include <stack> using namespace std;
2、stack創(chuàng)建方式
在C++中,我們使用類模板stack 來實現(xiàn)stack。其中T是存儲元素的類型。stack通過調(diào)用默認(rèn)構(gòu)造函數(shù)生成一個空stack
stack<int>a; // 創(chuàng)建一個空stack
3、棧頂和棧底操作
在stack中,我們可以分別通過stack::top()和stack::back()來訪問棧頂和棧底元素
stack<int>a; a.push(1); a.push(2); cout << a.top() << endl; // 輸出2 cout << a.back() << endl; // 輸出1
4、元素添加和刪除
在stack中,我們通過push()函數(shù)向棧頂添加一個元素。同時,我們也可以使用pop()函數(shù)來從棧頂刪除一個元素
stack<int>a; a.push(1); // 數(shù)組變成[1] a.push(2); // 數(shù)組變成[1,2] cout << a.top() << endl; // 輸出2 a.pop(); // 彈出2 cout << a.top() << endl; // 輸出1
5、棧的大小操作
我們可以通過stack::size()函數(shù)獲取當(dāng)前棧中的元素數(shù)量
stack<int>a; a.push(1); // 數(shù)組變成[1] a.push(2); // 數(shù)組變成[1,2] a.push(3); // 數(shù)組變成[1,2,3] cout << a.size() << endl; // 輸出3
6、判斷棧是否為空
通過stack::empty()函數(shù)可以判斷當(dāng)前的棧是否為空。如果棧為空則返回值為true,否則為false
stack<int>a; cout << a.empty() << endl; // 輸出1,表示為空 a.push(1); // 數(shù)組變成[1] a.push(2); // 數(shù)組變成[1,2] cout << a.empty() << endl; // 輸出0,表示不為空
三、stack的實際應(yīng)用
stack在數(shù)學(xué)中經(jīng)常被用來解決數(shù)學(xué)表達(dá)式中的括號匹配問題。在這個問題中,我們需要使用stack來匹配左右括號,以確保所輸入的算式結(jié)果是正確的
假設(shè)我們有一個算式"( a + b ) / ( c - d )",那么我們可以像下面的代碼一樣用stack來檢查該算式中是否存在括號匹配問題
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<char>s;
string str = "( a + b ) / ( c - d )";
for(int i=0;i<str.length();i++){
if(str[i]=='(') s.push(str[i]);
else if(str[i]==')') s.pop();
}
if(s.empty()){
cout<<"括號匹配成功"<<endl;
}
else{
cout<<"括號匹配失敗"<<endl;
}
return 0;
}以上就是C++中Stack(棧)的使用方法與基本操作詳解的詳細(xì)內(nèi)容,更多關(guān)于C++ Stack的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實現(xiàn)LeetCode(26.有序數(shù)組中去除重復(fù)項)
這篇文章主要介紹了C++實現(xiàn)LeetCode(26.有序數(shù)組中去除重復(fù)項),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
盤點分析C語言中少見卻強(qiáng)大的字符串函數(shù)
這篇文章主要為大家盤點及分析C語言中少見卻強(qiáng)大的字符串函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

