栈的学习

栈是一个线性数据结构。

栈有手写栈,STL栈,stack栈。

手写栈即用数组模拟栈,STL栈有vector栈,其次就是stack栈。

所需头文件:#include

栈的操作函数:

定义一个栈   stacks;

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;

}

题目:洛谷,三连击

你可能感兴趣的:(栈的学习)