栈中有几个通用的函数,但他们都不是程序自带的,需要手动写出
1.void pop(){top--;return;}
2.void push(int x){top++;z[top]=x;return;}
3. int front(){return z[top];}
4.bool empty(return top==0;)
注:top为栈的深度(后面讲)z[]是栈(后面讲)
---------------------------------------------------------------------------------------------------------------------------------
先来讲栈的概念
开枪是这样的
上膛是这样的
开枪=弹出一颗子弹,这种操作在栈里表示元素弹出
上膛=压入一颗子弹,这种操作在栈里表示元素压入
---------------------------------------------------------------------------------------------------------------------------------
接下来讲每个函数的用途
push(x)代表上膛[元素压入]
pop()代表开枪[元素弹出]
而为什么说是元素而不是数据,字符捏
因为栈有各种类型[char z][long long z][string z]....
empty()返回栈(弹匣)里是否有元素[子弹]
front()返回第一个元素
---------------------------------------------------------------------------------------------------------------------------------
因此栈就是这个
右边的字母表示等待进栈的元素,中间的长方形就代表栈
但是,这里的东西第一个放入的却不会第一个出来[出了某些特殊情况]
换成英文就是(F)ist (I)n (L)ast (O)ut 简写为FILO
---------------------------------------------------------------------------------------------------------------------------------
接下来,就可以开始程序了,在洛谷里有一道题【模板】栈
接下来就是开敲时间了
首先程序框架不能忘
忘得看
#include<bits/stdc++.h>
using namesapce std;
int main(){
return 0;
}
接下来,这个题目用"query"代替了"front"(栈有多个版本)并且多了一个未提到的部分"size",
而"top“(栈的深度/高度)就已经可以代替函数返回栈中元素个数,所以直接cout<<top<<endl;即可
这里,还有几个比较特殊的部分
1,pop()要检测栈中是否为空,需要使用empty判断
if(empty()){//如果栈是空的(bool返回0)
cout<<"Empty"<<endl;//empty没有感叹号
}
2,front()要检测栈是否为空,方法如上!
3,在输入字符串时,如果使用char x[100]的方式不可取,需要使用string x字符串
if(x=="xxx"){
xxx//做什么
}
4,本人亲测,这题仅使用cin,cout不可取,会出现TLE超时,至少要把两个改成scanf/printf
5,此题如果不使用unsigned long long 也会出错(所有int改成他),意思是去掉符号(负号)因为题
里说明0≤x<2*2(64)
---------------------------------------------------------------------------------------------------------------------------------
接下来就可以开敲,具体问题私信我改正,附AC程序一份
#include<bits/stdc++.h>
using namespace std;
unsigned long long top=0,i=0,j=0;
string z[114514];
string a;
char b[100001];
void pop(){
top--;
return;
}
void push(string x){
top++;
z[top]=x;
return;
}
string front(){
return z[top];
}
bool empty(){
if (top==0) return true;
else return false;
}
int main(){
cin>>i;
while(i--){
cin>>j;
while(j--){
cin>>a;
if(a=="push"){
scanf("%s",b);
push(b);
}
else if(a=="pop"){
if(top<=0) printf("Empty\n");
else pop();
}
else if(a=="query"){
if(top==0) printf("Anguei!\n");
else cout<<front()<<endl;
}
else if(a=="size")
cout<<top<<endl;
}
top=0;
}
return 0;
}