数据结构实验之栈和队列
来源:互联网 发布:福州哪里收淘宝模特 编辑:程序博客网 时间:2024/06/01 20:01
数据结构实验之队列一:排队买饭
Time Limit: 1000MS Memory limit: 65536K
题目描述
中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是很聪明的,直接奔政通超市,哈哈,确实,政通超市里面也卖饭,有好几种菜,做的比食堂好吃多了,价格也不比食堂贵,并且买菜就送豆浆,吸引了不少童鞋。所以有时吧,人还是很多的,排队是免不了的,悲剧的是超市只有两个收银窗口。
问题是这样的:开始有两队人在排队,现在咱们只研究第一队,现在我们给每个人一个编号,保证编号各不相同,排在前面的人买完饭就走了,有些人挑完饭就排在后面等待付款,还有一些人比较聪明,看到另一个队人比较少,直接离开这个队到另一个队去了。我要问的是队的总人数和某个位置上人的编号。
输入
首先输入一个整数m(m<10000),代表当前有m个人,第二行输入m个数,代表每个人的编号,第三行输入一个整数n(n<10000),代表队列变动和询问一共n次,以后n行,JOIN X表示编号为X(保证与以前的编号不同)的人加入;LEAVE Y表示第Y(Y小于当前队列长度)个位置 上的人离队 ;ASK Z(Z小于当前队列长度)表示询问第Z个位置上的人的编号;FINISH D表示有D个人买完饭离开了;LENGTH表示询问队列的长度 。保证所有数据在int 范围内.
输出
对每个询问输出相应的答案,每个答案占一行。
示例输入
31 2 36JOIN 4ASK 2LEAVE 2LENGTHFINISH 2LENGTH
示例输出
231
#include<stdio.h>#include<string.h>int main(){ //freopen("1.txt","r",stdin); int front=0,tail=0; int que[10000]; int n,i,t,m; char ch[100]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&que[tail++]); scanf("%d",&t); while(t--) { scanf("%s",ch); if(strcmp(ch,"JOIN")==0) { scanf("%d",&que[tail++]); n++; } else if(strcmp(ch,"LEAVE")==0) { scanf("%d",&m); for(i=front+m-1;i<tail;i++) que[i]=que[i+1] ; n--; } else if(strcmp(ch,"ASK")==0) { scanf("%d",&m); printf("%d\n",que[front-1+m]); } else if(strcmp(ch,"FINISH")==0) { scanf("%d",&m); front+=m; n-=m; } else if(strcmp(ch,"LENGTH")==0) { printf("%d\n",n); } }}
这题要注意的就是对查询队伍长度的问题,进行删除元素,完成排队,添加元素都要操作。。。
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
这里介绍下关于怎么求后缀式。。。
读入的有操作数和运算符,和括号。
遵循几个规则:
(1)如果读入操作数,则直接放入输出操作数;
(2)如果读入一般运算符如+-*/,则准备(还没放)放入堆栈,但是放入堆栈之前必须要检查栈顶,并确定栈顶运算符的优先级比放入的运算符的优先级低;如果放入的优先级较低,则需要将栈顶的运算符输出,并把准备放进去的运算符放入栈顶;
(3)如果读入(,因为左括号优先级最高,因此放入栈中,但是注意,当左括号放入栈中后,则优先级最低;
(4)如果读入),则将栈中运算符输出,直到取出(为止,注意:()不输出;
(5)顺序读完表达式,如果栈中还有操作符,则弹出;
#include<stdio.h>#include<string.h>int cmp(char c){ if(c=='+'||c=='-') return 1; if(c=='*'||c=='/') return 2; if(c==')') return 3; if(c=='(') return 4;}int main (){ int i,t=0; char c; char stk[1000]; int tail=-1; while((c=getchar())!='#') { if(c>='a'&&c<='z') printf("%c",c); else { if(tail<0) { stk[++tail]=c; } else { if(cmp(stk[tail])>=cmp(c)) { if(stk[tail]=='(') { stk[++tail]=c; } else { printf("%c",stk[tail]); stk[tail]=c; } } else { if(c==')') { //printf("%c",stk[tail-1]); while(stk[tail]!='(') { printf("%c",stk[tail]); tail--; } //printf("%c",stk[tail]); tail--; } else { stk[++tail]=c; } } } t=1; } }for(;tail>=0;tail--) printf("%c",stk[tail]);}/**************************************Problem id: SDUT OJ F User name: acm2013叶思俊 Result: Accepted Take Memory: 224K Take Time: 0MS Submit Time: 2014-01-16 18:04:45 **************************************/
数据结构实验之栈三:后缀式求值
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
59*684/-3*+#
示例输出
57
提示
解题报告
后缀式求值比较简单。。。
规则如下:
(1)如果是操作数,则放入栈中;
(2)如果是操作符,则取出栈顶和栈顶下的两个操作数,进行运算后,将结果放入栈顶;
(3)直到最后栈中只有一个元素,此元素就是计算结果;
#include<stdio.h>int main(){ double stk[1000]; int top=-1; char c; double num; while((c=getchar())!='\n') { if(c>='0'&&c<='9') { stk[++top]=(c-'0')/1.0; } else { switch(c) { case '+': { num=(stk[top]+stk[top-1])/1.0; top--; stk[top]=num; }break; case '*': { num=(stk[top]*stk[top-1]); top--; stk[top]=num; }break; case '-': { num=(stk[top-1]-stk[top])/1.0; top--; stk[top]=num; }break; case '/': { num=stk[top-1]/stk[top]; top--; stk[top]=num; }break; } } } printf("%.lf\n",stk[top]);}
手残把%lf写出%d,一直输出0。。。
数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
sin(20+10)
{[}]
示例输出
yes
no
提示
#include<stdio.h>#include<string.h>int main(){ char ch[10000],c; char stk[10000]; int top,l,i; while(gets(ch)!=NULL) { top=0; i=0; while((c=ch[i])!='\0') { i++; l=0; if(c=='(' || c=='{' || c=='[') stk[top++]=c; else if(c==']'&& (stk[top-1]=='(' || stk[top-1]=='{') ) { l=1; break; } else if(c=='}'&& (stk[top-1]=='(' || stk[top-1]=='[') ) { l=1; break; } else if(c==')'&& (stk[top-1]=='[' || stk[top-1]=='{') ) { l=1; break; } else if(c==')' || c=='}' || c==']') { if(top>=0)top--; else { l=1; break; } } } if(l==0&&top==0)printf("yes\n"); else printf("no\n"); }}
- 数据结构实验之栈和队列
- 数据结构实验 栈和队列
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三:栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三:栈和队列实验
- 数据结构:实验三 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三:栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三:栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- 《数据结构》实验三: 栈和队列实验
- JQuery 入门指南(4):添加删除元素
- Tiled源码分析(二): 多文档支持
- Windows/Linux下C/C++内存泄露检测工具
- 学习网站收集
- 单链表逆置
- 数据结构实验之栈和队列
- 关于QT中显示中文的一些研究
- 算法之计算 整数乘法
- 数据库的一些基础研究和性能探讨(触发器)
- HTTP协议详解
- 我来请教一个简单java问题,求解答
- Qt Creator的配置和开发初步测试
- 【as3】外部swf动画复制
- Can't connect to X11 window server using ':0.0'