1.概念:
棧簡單的說就是“先進後出”的數據結構,就相當於幾輛汽車進入了一個只允許一輛車通行的死衚衕,先進去的車輛只能等最後進去的車輛出來後才能出來。
2.頭文件:
#include<stack>
3.定義方式:
stack<數據類型>a;
4.關於棧的一些操作:
(1) a.top() ; 取出棧頂元素
(2) a.push(); 壓入/輸入新的元素
(3) a.pop() ; 刪除棧頂元素
(4) a.empty() ; 判斷棧是否爲空
(5) a.size() ; 計算棧中的元素
5. 例題: 判斷迴文串:
“迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。請寫一個程序判斷讀入的字符串是否是“迴文”。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string str;
stack<char>a;
cin>>str;
int mid=str.size()/2-1;
int i;
for(i=0;i<=mid;i++)
{
a.push(str.at(i)); //將字符串的前mid位壓入棧
}
int next;
if(str.size()%2==0) next=mid+1; //若長度爲偶數,則從第mid+1位開始判斷
else next=mid+2; //否則從第mid+2位開始判斷
for(i=next;i<str.size();i++)
{
if(str.at(i)==a.top()) //如果相等,則將棧頂元素刪除
{
a.pop();
}
else break; //若不相等,則直接跳出循環,輸出no
}
if(a.empty()) //當棧內元素爲空時,證明時迴文字符串,輸出yes
{
cout<<"Yes"<<endl;
}
else cout<<"No"<<endl;
return 0;
}