1、栈在括号匹配中的应用

1、假设一个算术表达式中包含圆括号、方括号、花括号3种类型的括号,编写一个算法来判断表达式中的括号是否匹配,以字符‘\0’作为算术表达式的结束符

bool BracketCheck(char *str)
{int i=0;while(str[i]!='\0'){switch(str[i]){//左括号入栈case '(':Push(S,'(');break;case '[':Push(S,'[');break;case '{':Push(S,'{');break;//遇到右括号,检测栈顶case ')':Pop(S,e);if(e!='(') return false;break;case ']':Pop(S,e);if(e!='[') return false;case '}':Pop(S,e);if(e!='(') return false;break;default:break; }i++; }if(!IsEmpty(S)){printf("括号不匹配\n");return false;}else{printf("括号匹配\n");return true;}}
}

2、栈在表达式求值中的应用

3、栈在递归中的应用


算法思想:设置一个栈用于保存n和对应的P(x)值,栈中相邻元素p(x)有题中关系。然后边出栈边计算P(x),栈空后该值就计算出来了

double p(int n,double x)
{struct stack{int no;//保存n double val;//保存p(x)值 }st[MaxSize];int top=-1,i;//top为栈st的下标值变量 double fv1=1,fv2=2*x;//n=0,n=1时的初值 for(i=n;i>=2;i--){top++;st[top].no=i;}                   //入栈 while(top>=0){st[top].val=2*x*fv2-2*[st[top].no-1]*fv1;fv1=fv2;fv2=st[top].val;top--;           //出栈 }if(n==0){return fv1;}return fv2;
}

4、队列在层次遍历中的应用

5、队列在计算机系统中的应用


两侧的铁道均为单向行使道,且两侧不相通。所有车辆都必须通过‘栈道’进行调度。算法的基本思想:所有车厢依次前进并逐一检查,若为硬座车厢则入栈,等待最后调度。检查完后,所有的硬座车厢已全部入栈道,车道中的车厢均为软座车厢,此时将栈道的车厢调度出来,调整到软座车厢之后。

void Train_Arrange(char *train)
{//用字符串train表示火车,H表示硬座,S表示软座 char *p=train,*q=train,c;stack s;InitStack(s);//初始化栈结构 while(*p){if(*p=='H')Push(s,*p);else*(q++)=*p;//把S调到前部 p++; }while(!StackEmpty(s)){Pop(s,c);*(q++)=c;//把H接在后部 }
}


算法思想:假设数组q的最大下标为10,恰好是每次载度的最大量。假设客车的队列为q1,火车的队列为q2.若q1充足,则取4个q1元素后再去一个q2元素,直到q的长度为10.若q1不充足,则直接用q2补齐

Queue q;//过江渡船载度队列
Queue q1;//客车队列
Queue q2;//货车队列
void manager()
{int i=0,j=0;//j表示渡船上的总车辆数 while(j<10){//不足10辆时 if(!QueueEmpty(q1)&&i<4){//客车队列不空,则未上足4辆 DeQueue(q1,x);//从客车队列出队 EnQueue(q,x);//客车上渡船 i++;//客车数加1 j++; //渡船上的总车辆数加1 }else if(i==4&&!QueueEmpty(q2)){//客车已上足4两 DeQueue(q2,x);//从货车队列出队 EnQueue(q,x);//货车上渡船 j++;//渡船上的总车辆数加1 i=0;//每上一辆货车,i重新计数 }else{//其他情况 (客车队列空或货车队列空) while(j<10&&i<4&&!QueueEmpty(q2)){//客车队列空 DeQueue9(q2,x);//从货车队列出队 EnQueue(q,x);// 货车上渡船 i++;//i计数,i>4,退出本循环 j++; //渡船上的总车辆数加1 }i=0;}if(QueueEmpty(q1)&&QueueEmpty(q2))j=11; //若货车和客车加起来不足10两 }
}

3.3栈和队列的应用相关推荐

  1. 栈和队列在python中的实现

    栈和队列是两种基本的数据结构,同为容器类型,队列是先进先出,栈是先进后出. 栈 栈提供 push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterat ...

  2. c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列

    前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...

  3. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  4. leetcode-232 用栈实现队列

    使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为空 栈的特点 ...

  5. 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解

    一.解释定义 1. 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 如果还是不太清楚下面会举例说明的. 2. 数据存储结 ...

  6. 数据结构,堆和栈和队列的概念

    数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...

  7. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  8. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  9. 剑指offer_第5题_用两个栈实现队列

    题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...

  10. 栈和队列存储结构总结

    认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...

最新文章

  1. linux与window中sleep函数的头文件
  2. 关于SAMBA的关键参考资源
  3. android记事本添加图片功能,安卓手机上有什么便签app既可以写日记又可以添加照片?...
  4. linux c当程序接受来自按键q或q后退出程序_Linux 命令行 整理(四)
  5. javascript实现页面跳转的方法
  6. 【王道计组笔记】总线(1):总线的概念和分类
  7. webpack-Hot Module Replacement(热更新)
  8. mysql 查找入职时间最早_(2)查找入职员工时间排名倒数第三的员工所有信息...
  9. 右下角出现“测试模式 win7 内部版本7601”如何去掉?
  10. 串口调试工具--SecureCRT的使用
  11. python读取txt文档乱码解决
  12. 坐禅修行木鱼诵经流量主小程序开发
  13. NOIP(CSP)初赛知识总结
  14. CRM如何进行客户关系管理
  15. 搞懂Linux内存屏障(值得收藏)
  16. 播放失败,请在设置中切换输出设备
  17. MySQL基础之查询语句
  18. 2010年软件外包企业排名, 软件外包公司排名2010
  19. NT、WDM、WDF驱动概念
  20. 电脑提示无法启动此程序,因为计算机中丢失msvcp110.dll”解决办法

热门文章

  1. 1.gstreamer USB摄像头保存至图片及视频
  2. linux天文软件下载,八款优秀的Linux天文学软件
  3. GHOST系统封装教程 系统封装工具 XP系统封装(二)
  4. C语言-商品销售管理系统
  5. linux之文件系统
  6. 仓储管理业务入门学习
  7. 5.关于laravel框架中Contorller
  8. swoole 框架swoft使用
  9. 房价每平米80万”是天方夜谭么
  10. 如何将html内容解码,3.5.3 对HTML进行编码和解码