队列和栈

前天复习了.Net的栈和队列的用法,为了深入领会下,现在用C++来简单说明一下它们。

队列,先进先出。现在有个问题,有一组0-9的数,要求先将第一个数删除,紧接着将第二个数放在末尾,再将第三个数删除,将第四个数放在末尾,如此反复,直至删除完毕,要求将这组数字按照删除的顺序显示出来。这用队列可以很好的实现。(下图来自百度,侵权删除)

队列和栈

#include <iostream>

using namespace std;

//定义一个结构体,表示队列
struct queue{
int data[100];//队列中的数据
int head;//队列的头
int tail;//队列的尾
};

int main()
{
    struct queue q;
    q.head=0;
    q.tail=0;
    //将数字装入队列
    for(int i=0;i<9;++i)
    {
        cin>>q.data[i];
        q.tail++;
    }
    while(q.head<q.tail)
    {
        cout<<q.data[q.head];
        q.head++;//删除数字就是将队列队首向前走一步
        q.data[q.tail]=q.data[q.head];//将队首放进队尾(第一次时,就是第二个数字放进队尾)
        q.tail++;//队尾要始终指向空的位置
        q.head++;//第一次时,第二个数字放进队尾了,现在要把第二个数字删除掉
    }

    return 0;
}

这时候用队列十分爽。

现在说栈的事情,栈嘛,先进后出,这东西有什么用呢?先提个括号匹配的问题,形如([{}()]),([)]这些括号是否可以正确匹配?(当然第一个是匹配的,第二个不匹配)

下图来自百度,侵权删除

队列和栈

#include <iostream>

using namespace std;

//判断一对括号是否匹配,a代表一个括号,b也应该是一个括号
bool IsPair(char a,char b)
{
    if((a==40&&b==41)||(a==41&&b==40))
        return true;
    if((a==91&&b==93)||(a==93&&b==91))
        return true;
    if((a==123&&b==125)||(a=='}'&&b=='{'))
        return true;
    return false;
}

//问题的主要函数实现
bool IsMatchBrackets(char *p)
{
    //栈定义,就没用结构体
    //top指的是栈顶
    char data[20]={0};
    int top=0;

    //把传进来的字符串首指针赋值给q,当然你也可以直接用p,这里我习惯问题
    char *q=p;
    while(*q)
    {
        //如果匹配,则退栈;否则进栈
        //上面的意思是,如果是一对括号,比如(遇到了)就把(退出数据区
        //如果不是,比如(下面是[,就把[放进数据区
        //以保证栈(数据区)里面的括号至今都仍是单身汪
        if(IsPair((*q),data[top]))
            top--;
        else
        {
            ++top;
            data[top]=*q;
        }
        ++q;
    }

    //判断栈内是否都清空了,如果top==0则括号匹配王朝,数据区没有单身汪了
    //栈内还有,就说明括号没匹配完,还有单身汪,当然就不对了
    if(top==0)
        return true;
    else
        return false;
}

int main()
{
    char str[20]={0};
    cin>>str;
    if(IsMatchBrackets(str))
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    return 0;
}

诚惶诚恐,还请大家批评
原文链接: https://www.cnblogs.com/mengnan/p/4896230.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/223387

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
adminadmin
0 0
Ubuntu环境下安装Bochs
上一篇 2023年2月13日 下午12:03
烂泥:ubuntu下配置msmtp+mutt发送邮件
下一篇 2023年2月13日 下午12:04

相关推荐

  • sort函数_C++ 2023年2月13日
  • C++连连看外挂 2023年2月9日
  • Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出 2023年2月9日
  • C# while loop Running until user press key 2023年4月19日
  • [C++基础]019_指针和引用(int*、int&、int*&、int&*、int**) 2023年2月9日
  • std::bind绑定unique_ptr 2023年3月31日
  • 12.7K

    我是职场上失宠的妃子

  • C++性能真的不如C吗?

    7.1K
  • 大话数据结构 高清PDF

    6.7K
  • string底层实现之SSO

    6.3K
  • 千百撸

    4.4K
  • GDB调试-从入门实践到原理

    3.7K
  • 什么是COM

    3.6K
  • std::string底层实现之COW(Copy-On-Write)

    3.6K
  • 智能指针-使用、避坑和实现

    3.6K
  • 彻底搞通TCP send和recv原理

    3.4K

聚圣源潮牌店铺起名亦字起名大全笔画八笔画的字起名叶的姓起名大全起名字,芮字猪胎儿宜用字起名姓氏史女孩起名萨伏伊别墅西餐加盟店连锁华为腾讯彭男孩起名字大全女人起名熊猫人武僧名字bt之家论坛cad2014注册机合作社起什么名称好马姓儿童起名我爱你韩文给龙凤胎起什么名字好乐歌董事长拉黑平安资管走进新中国华开头的公司 起名星座起名大全2019年超兽vps群王卡宽带情定三生电视剧全集chengrenluntan酒公司免费起名大全gta5手机版肥肥胖胖打一生肖淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化