棧是一個(gè)線性數(shù)據(jù)結(jié)構(gòu)。
棧有手寫棧,STL棧,stack棧。
手寫棧即用數(shù)組模擬棧,STL棧有vector棧,其次就是stack棧。
所需頭文件:#include<stack>
棧的操作函數(shù):
定義一個(gè)棧? ?stack<int>s;
bool empty()判斷是否為空棧,若為空返回true
s.top()訪問棧頂,取出最后進(jìn)入的一個(gè)元素但不刪除
s.push()進(jìn)棧
s.pop()彈出棧(但不知道會(huì)彈到哪里)刪除,但不返回該元素
s.size()返回棧內(nèi)元素的大小
PS:進(jìn)棧前首先檢查棧是否已滿,滿則溢出。出棧前首先檢查棧是否已為空棧,空則下溢。
對(duì)于出棧運(yùn)算中的下溢,程序中僅給出了一個(gè)標(biāo)志信息,而在實(shí)際應(yīng)用中,下溢可用來作為控制程序轉(zhuǎn)移的判斷標(biāo)志,是十分有用的。對(duì)于入棧運(yùn)算中的上溢,則是一種致命的錯(cuò)誤,將使程序無法繼續(xù)運(yùn)行,所以要設(shè)法避免。
棧的經(jīng)典習(xí)題有車站調(diào)度,括號(hào)的匹配,后綴表達(dá)式(亦稱逆波蘭表達(dá)式)。
可以自己多做練習(xí)。
另外附上我們機(jī)房一位可愛的dalao的代碼(密集恐懼癥勿下滑)
#include<bits/stdc++.h>
using? namespace std;
int m;
int main(){
int a=100,b=200,c=300,a1,b1,c1;
for(int i=0;i<=233;i++)
for(int j=0;j<=467;j++)
for(int e=0;e<=700;e++)
if(a+i==(b+j)/2.000000&&a+i==(c+e)/3.000000)
if((a+i)%10!=(b+j)%10&&(b+j)%10!=(c+e)%10&&(a+i)%10)
if((a+i)/100!=(b+j)/100&&(b+j)/100!=(c+e)/100&&(a+i)/100)
if((a+i)/10%10!=(b+j)/10%10&&(b+j)/10%10!=(c+e)/10%10&&(a+i)/10%10)
if((a+i)/100!=(a+i)%10&&(a+i)/100!=(a+i)/10%10&&(a+i)%10!=(a+i)/10%10)
if((b+j)/100!=(b+j)%10&&(b+j)/100!=(b+j)/10%10&&(b+j)%10!=(b+j)/10%10)
if((c+e)/100!=(c+e)%10&&(c+e)/100!=(c+e)/10%10&&(c+e)%10!=(c+e)/10%10)
if((a+i)/100!=(b+j)%10&&(a+i)/100!=(c+e)%10&&(a+i)/100!=(b+j)/10%10&&(a+i)/100!=(c+e)/10%10)
if((a+i)/10%10!=(b+j)%10&&(a+i)/10%10!=(c+e)%10&&(a+i)/10%10!=(b+j)/10%10&&(a+i)/10%10!=(c+e)/10%10)
if((a+i)%10!=(b+j)%10&&(a+i)%10!=(c+e)%10&&(a+i)%10!=(b+j)/10%10&&(a+i)%10!=(c+e)/10%10)
if((b+j)/100!=(a+i)%10&&(b+j)/100!=(c+e)%10&&(b+j)/100!=(a+i)/10%10&&(b+j)/100!=(c+e)/10%10)
if((b+j)/10%10!=(a+i)%10&&(b+j)/10%10!=(c+e)%10&&(b+j)/10%10!=(a+i)/10%10&&(b+j)/10%10!=(c+e)/10%10)
if((b+j)%10!=(a+i)%10&&(b+j)%10!=(c+e)%10&&(b+j)%10!=(a+i)/10%10&&(b+j)%10!=(c+e)/10%10)
if((c+e)/100!=(b+j)%10&&(c+e)/100!=(a+i)%10&&(c+e)/100!=(b+j)/10%10&&(c+e)/100!=(a+i)/10%10)
if((c+e)/10%10!=(b+j)%10&&(c+e)/10%10!=(a+i)%10&&(c+e)/10%10!=(b+j)/10%10&&(c+e)/10%10!=(a+i)/10%10)
if((c+e)%10!=(b+j)%10&&(c+e)%10!=(a+i)%10&&(c+e)%10!=(b+j)/10%10&&(c+e)%10!=(a+i)/10%10)
if((c+e)/10%10!=0)
cout<<a+i<<' '<<b+j<<' '<<c+e<<endl;
return 0;
}
題目:洛谷,三連擊