stack常用的操作函数:top(),push(),pop(),size(),empty();
应用时的模板:
***********************
#include<stack>
using namespace std;
***********************
stack<ELem>c;//创建一个空的stack,ELem是类型名(char,int,double,.......),c是自定义名,满足标识符命名规则。
**********************
while(!c.empty()) //或者是c.size()!=0;
{
c.pop();
} //清空栈,这一步往往在多组测试数据中经常用到。
****************
c.push(Elem);//在栈顶增加Elem数据
**************
stack<Elem>c(c1);//复制stack;
********************
c.top(); //返回栈顶数据
*****************
c.pop(): //弹出栈顶数据
********************
简单例题:
/hdu--1022/
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
char a[12],b[12];
int n,i,j,k;
int flag[20];
stack<char>s;
memset(flag,0,sizeof(flag));
while(scanf("%d %s %s",&n,a,b)!=EOF)
{
while(!s.empty())
{
s.pop();
}
k=0;j=0;
for(i=0;i<n;i++)
{
s.push(a[i]);
flag[k++]=1;
while(!s.empty()&&s.top()==b[j])
{
s.pop();
flag[k++]=0;
j++;
}
}
if(j==n)
{
printf("Yes.\n");
for(i=0;i<k;i++)
if(flag[i])printf("in\n");
else printf("out\n");
}
else printf("No.\n");
printf("FINISH\n");
}
return 0;
}
/*hdu--简单计算器*/
#include<stdio.h>
#include<stack>
using namespace std;
int main()
{
double n,m,sum;//sum表示最后的结果
char a;//a表示运算符
while(~scanf("%lf",&m))
{
if(getchar()=='\n'&&m==0)//判断输入是否结束 ,此处巧妙的应用可以做到
// 使后面先运算后存储
break;
stack<double>s;
s.push(m);
//存入第一个数
scanf("%c",&a);
while(scanf("%lf",&m)!=EOF)
{
if(a=='*')
{
n=s.top();
s.pop();
n*=m;
s.push(n);
}
if(a=='/')
{
n=s.top();
s.pop();
n/=m;
s.push(n);
}
if(a=='+')
{
s.push(m);
}
if(a=='-')//将最后的计算都化成加法运算
{
s.push(-m);
}
if(getchar()=='\n')break;//判断一组数据是否结束
scanf("%c",&a);
}
sum=0.0;
while(!s.empty())//当string的长度为0是,empty返回值是ture,否则为false
{
sum+=s.top();
s.pop();
}
printf("%.2lf\n",sum);
}
return 0;
}