c++中的栈、stack的初步应用

1、定义

stack</*变量类型*/>/*变量名*/;
如:

stack<int>a;
就定义了一个叫a的栈

记得一定要加头文件

#include<stack>

2、相关函数及运用

注:以下所有函数表达在已定义栈a的情况下

①  a.push()//把一个元素推入栈a中
②  a.pop()//把最上面的元素踢出栈a
③  a.top()//访问栈最顶端
④  a.size()//返回元素个数
⑤  a.empty()//判断栈空(栈空返回true)
举个栗子例子吧

就拿洛谷P1739作为水题代表吧#洛谷P1739#
许多人看到这题,想:如此水,设备sb才会用栈呢~

。。。呵呵好吧,我就是那个设备【手动滑稽】

先上水打法

#include<bits/stdc++.h>
using namespace std;
void read(int &x){//字符串写读入优化
    x=0;char c=getchar();
    while(c<'0' || c>'9')c=getchar();
    while(c>='0' && c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
}
void write(int x){//输出优化
        int y=10,len=1;
        while(y<=x)  {y*=10;len++;}
        while(len--){y/=10;putchar(x/y+48);x%=y;}
    } 
char ch;int i,flag;
int main(){
    ios::sync_with_stdio(0);
   do 
    {    
        cin>>ch;
        if(ch=='(')
        {
            ++i;
flag=1;//没错,flag=1说明第一个括号是左括号
        }    
        else if(ch==')')
        {
            if(flag==0)    break;//如果第一个括号是右括号,那么就可以退出循环了(肯定不匹配啊~)
            --i;
        }
    }
    while(ch!='@');
    if(i==0&&flag==1)    cout<<"YES";
    else    cout<<"NO";
    return 0; 
}

再上传说中的栈

#include<bits/stdc++.h>
#include<stack>//虽然写了万能头文件,但还要再写一遍加粗表强调
using namespace std;
void read(int &x){//字符串写读入优化
    x=0;char c=getchar();
    while(c<'0' || c>'9')c=getchar();
    while(c>='0' && c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
}
void write(int x){//输出优化
        int y=10,len=1;
        while(y<=x)  {y*=10;len++;}
        while(len--){y/=10;putchar(x/y+48);x%=y;}
    } stack<char>st;
int main()
{
    ios::sync_with_stdio(false);
    char a;cin>>a;//读入
    while(a!='@')
    {
        if(a=='(')st.push('(');//左括号就扔到栈里
        else if(a==')'&&st.empty()){cout<<"NO";return 0;}//如果遇到右括号时栈已经空了就输出NO结束(也避免第一个是“)”的情况)
        else if(a==')')st.pop();//遇到右括号扔一个左括号
        cin>>a;//读下一个
    }
    if(st.empty()){cout<<"YES";return 0;}//如果表达式结束栈空了就可以
    cout<<"NO";//否则不行
}

好像没什么了233……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值