先进后出的栈(用法)
c++ (应用环境c++)stl栈stack的头文件为: #include <stack>
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
例题 1
#include<cstdio>
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n;
char c;
stack<char>st;//在c++里用
scanf("%d",&n);//几组数据
getchar();//吃一个回车
while (n--)
{
while(c=getchar(),c!='\n')//读到回车结束
{
if (c=='('||c=='[')
{
st.push(c);
}
else if(c==']'||c==')')
{
if(st.empty())
st.push(c);
else if(st.top()=='('&&c==')')
st.pop();
else if (c==']'&&st.top()=='[')
st.pop();
}
}
if (st.empty()==1)
printf("Yes\n");
else
printf("No\n");
while (!st.empty()) {//在下一组数据录入之前把上一组数据清空
st.pop();
}
}
return 0;
}
例题2
#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int main()
{
double n,m,q,s,sum=0;
char a,b;
while (scanf("%lf%c",&n,&a))//多组数据
{
if(n==0&&a=='\n')//0和回车作为整体结束
break;
stack<double>st;
st.push(n);
while (scanf("%c%lf",&b,&m)!=EOF)
{
if(b=='+')//先算乘除后算加减 运算完之后全部相加
st.push(m);
else if(b=='-')
st.push(-m);
else if(b=='*')
{
q=m*st.top();
st.pop();
st.push(q);
}
else
{
s=st.top()/m;
st.pop();
st.push(s);
}
if(a=getchar(),a=='\n')//读到回车之后一组数据结束
break;
}
while (st.empty()!=1)
{
sum+=st.top();
st.pop();
}
printf("%.2lf\n",sum);
sum=0;//在进行下一组数据之后现将本次运算结果清零
}
return 0;
}