stack(栈)简单应用

来源:互联网 发布:淘宝3c认证在哪里 编辑:程序博客网 时间:2024/06/05 10:02

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;}



 

 

 

 

 

0 0
原创粉丝点击