栈是一个线性数据结构。
栈有手写栈,STL栈,stack栈。
手写栈即用数组模拟栈,STL栈有vector栈,其次就是stack栈。
所需头文件:#include
栈的操作函数:
定义一个栈 stack
bool empty()判断是否为空栈,若为空返回true
s.top()访问栈顶,取出最后进入的一个元素但不删除
s.push()进栈
s.pop()弹出栈(但不知道会弹到哪里)删除,但不返回该元素
s.size()返回栈内元素的大小
PS:进栈前首先检查栈是否已满,满则溢出。出栈前首先检查栈是否已为空栈,空则下溢。
对于出栈运算中的下溢,程序中仅给出了一个标志信息,而在实际应用中,下溢可用来作为控制程序转移的判断标志,是十分有用的。对于入栈运算中的上溢,则是一种致命的错误,将使程序无法继续运行,所以要设法避免。
栈的经典习题有车站调度,括号的匹配,后缀表达式(亦称逆波兰表达式)。
可以自己多做练习。
另外附上我们机房一位可爱的dalao的代码(密集恐惧症勿下滑)
#include
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<
return 0; } 题目:洛谷,三连击