3.3栈和队列的应用
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栈和队列的应用相关推荐
- 栈和队列在python中的实现
栈和队列是两种基本的数据结构,同为容器类型,队列是先进先出,栈是先进后出. 栈 栈提供 push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterat ...
- c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列
前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...
- 剑指offer:面试题09. 用两个栈实现队列
题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...
- leetcode-232 用栈实现队列
使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为空 栈的特点 ...
- 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解
一.解释定义 1. 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 如果还是不太清楚下面会举例说明的. 2. 数据存储结 ...
- 数据结构,堆和栈和队列的概念
数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...
- Java数据结构与算法(第四章栈和队列)
2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...
- 学习JavaScript数据结构与算法(一):栈与队列
本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...
- 剑指offer_第5题_用两个栈实现队列
题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...
- 栈和队列存储结构总结
认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...
最新文章
- linux与window中sleep函数的头文件
- 关于SAMBA的关键参考资源
- android记事本添加图片功能,安卓手机上有什么便签app既可以写日记又可以添加照片?...
- linux c当程序接受来自按键q或q后退出程序_Linux 命令行 整理(四)
- javascript实现页面跳转的方法
- 【王道计组笔记】总线(1):总线的概念和分类
- webpack-Hot Module Replacement(热更新)
- mysql 查找入职时间最早_(2)查找入职员工时间排名倒数第三的员工所有信息...
- 右下角出现“测试模式 win7 内部版本7601”如何去掉?
- 串口调试工具--SecureCRT的使用
- python读取txt文档乱码解决
- 坐禅修行木鱼诵经流量主小程序开发
- NOIP(CSP)初赛知识总结
- CRM如何进行客户关系管理
- 搞懂Linux内存屏障(值得收藏)
- 播放失败,请在设置中切换输出设备
- MySQL基础之查询语句
- 2010年软件外包企业排名, 软件外包公司排名2010
- NT、WDM、WDF驱动概念
- 电脑提示无法启动此程序,因为计算机中丢失msvcp110.dll”解决办法