栈的应用---------有关字符串的输入
来源:互联网 发布:手机淘宝 发文件 编辑:程序博客网 时间:2024/06/05 08:07
题目1108:堆栈的使用
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:11671
解决:3392
题目描述:
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
- 输入:
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。
- 输出:
对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。
- 样例输入:
3AP 5A4P 3P 6O A0
- 样例输出:
E53
- 来源:
- 2011年吉林大学计算机研究生机试真题
#include<stdio.h>#include<stack>#include<cstring>using namespace std;int main(){int n;stack<int> ch;while(scanf("%d",&n)!=EOF&&n!=0){// getchar();while(!ch.empty()) ch.pop();while(n--!=0){char c[4];scanf("%s",c);//这里原本是使用gets来读取字符串的,它与scanf的区别就是可以接受空格、TAB等制表符 ,//如果用gets,P操作需要压栈 的数字也会被读入字符串,不如直接用scanf处理来的方便 if(c[0]=='A'){// if(ch.empty()){// printf("go1\n");}// if(!ch.empty()){// printf("go2\n");}if(!ch.empty()){// printf("go!\n");printf("%d\n",ch.top());}elseprintf("E\n");} else if(c[0]=='O'){if(!ch.empty()){ch.pop();}}else if(c[0]=='P'){int a;scanf("%d",&a);// if(c[2]=='5')// printf("ding!\n");// else// printf("%c\n",c[2]);ch.push(a);}}printf("\n");} return 0;}
题目1101:计算表达式
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:7388
解决:2307
- 题目描述:
对于一个不存在括号的表达式进行计算
- 输入:
存在多种数据,每组数据一行,表达式不存在空格
- 输出:
输出结果
- 样例输入:
6/2+3+3*4
- 样例输出:
18
- 来源:
- 2010年上海交通大学计算机研究生机试真题
#include<stack>#include<cstdio>#include<iostream>using namespace std;stack<int> op;stack<double> in;int mat[][5]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,};char str[1000];void getE(double &retn,int &i,bool &reto){if(i==0&&op.empty()==true){reto=true;retn=0;return;}if(str[i]==0){reto=true;retn=0;return;}if(str[i]>='0'&&str[i]<='9'){reto=false;}else{reto=true;if(str[i]=='+')retn=1;if(str[i]=='-')retn=2;if(str[i]=='*')retn=3;if(str[i]=='/')retn=4;i++;return;}retn=0; for(;str[i]<='9'&&str[i]>='0'&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0';}double d=1,dd=0;if(str[i]=='.'){i++; for(;str[i]<='9'&&str[i]>='0';i++){ d/=10; dd+=(str[i]-'0')*d; }} retn+=dd;return;}int main(){while(scanf("%s",str)!=EOF){while(!op.empty()) op.pop();while(!in.empty()) in.pop();double ren;int index=0;bool reop;while(true){getE(ren,index,reop);if(reop==false){in.push(ren);}else{ if(op.empty()==true||mat[(int)ren][op.top()]==1) op.push(ren); else{ while(mat[(int)ren][op.top()]==0){ int o; o=op.top(); op.pop();double b=in.top();in.pop();double a=in.top();in.pop();if(o==1)a=a+b;else if(o==2)a=a-b;else if(o==3)a=a*b;else if(o==4)a=a/b;in.push(a);} op.push(ren); }}if(op.size()==2&&op.top()==0)break;}cout<<in.top()<<endl;}return 0;}//1+3/2-1*3
阅读全文
0 0
- 栈的应用---------有关字符串的输入
- C++中有关字符串输入的探讨
- 应用:字符串的输入(1702)
- 有关StringBuilder字符串的一些应用
- 有关输入的总结
- 有关字符串的操作
- 有关字符串的处理
- 有关字符串的题目
- 有关字符串的问题
- 有关数据输入的问题
- 有关Appium输入的问题
- 有关Zigbee的应用
- 有关事务的应用
- 有关TreeView的应用
- 有关%和/的应用
- 有关字符串的算法集合
- 字符串处理的有关事项
- js的字符串有关函数
- leetcode--Populating Next Right Pointers in Each Node II
- 欢迎使用CSDN-markdown编辑器
- 直播预告 | 极限挑战:在最短时间内定位性能瓶颈!
- [P1896][SCOI2005]互不侵犯King
- iOS横竖屏的问题
- 栈的应用---------有关字符串的输入
- 封装自己的js组件
- 数据结构实验之排序四:寻找大富翁
- Linux进程相关命令-ps、kill
- 【2017多校第二场】HDU 6075 Questionnaire【思维】
- Eclipse代码格式模板导入
- leetcode--Binary Tree Postorder Traversal
- J-02. 向导快速设置 ❀ 瞻博 (Juniper) 防火墙
- Andriod使用dimens资源文件进行适配