03--栈和队列
1.学习总结(2分)
2.PTA实验作业(4分)
2.1 题目1:7.3符号配对
2.2 设计思路(伪代码或流程图)
定义字符数组mid,post存放中缀表达式和后缀表达式
SqStack a;
初始化a;
最后出栈以#结束,先让#入栈
遍历中缀表达式,i=0 to len
if mid[i]是数字,则post[j]=mid[i],存放于post数组中
else if mid[i]是运算符,则判断与栈中元素的优先级,若优先级大于栈中元素,则post[i]=mid[i],否则将mid[i]入栈
else if mid[i]='(', 优先级最高,将其入栈
else if mid[i]=')',
{
while(取栈顶元素不等于'(')
{
podt[j]=Pop(a,e);
j++;
}
Pop(a,e);
}
遍历结束后,将栈内元素全部出栈,存入到post数组中
输出post
end
2.3 代码截图
2.4 PTA提交列表说明。
此题还没有解决问题,调了很久一直是编译错误,
2.1 题目2:7-1 jmu-报数游戏(15 分)
2.2 设计思路(伪代码或流程图)
1.定义m存放人员个数,n存放报的数字,SqQueue q;
2.初始化q;
3.i=1 to m
依次给队列元素编号
4.当队列不为空时,
i=0 to n-1
让队列元素出队,再重新入队,则此时队头元素为n
此时出队一个元素,即为报到的数字
输出出队元素
end
2.3 代码截图
2.4 PTA提交列表说明。
在给队列赋予编号时,i从0开始,导致输出错误
2.1 题目3:7-2 银行业务队列简单模拟(25 分)
2.2 设计思路(伪代码或流程图)
定义n存放银行服务的人数,data存放顾客的编号,SqQueue s1,s2;
初始化s1,s2,
遍历n
i=0 to n
cin>>data
if(data为偶数)
则入队到s2
else
则入队到s1
遍历队列s1,s2,当s1,s2都不为空时,先将s1中的两个队列元素出队,存放到数组中,再出队一个s2中的元素存放到数组中
将未遍历结束的队列中的元素都出队,并存放于数组中
i=0 to n
循环输出数组元素
end
2.3 代码截图
2.3pta列表提交说明
考虑的顾客的最大数值错误,题目要求说最大N为1000,然后不小心定义成了100
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:155
4. 阅读代码(必做,1分)
#include <string> // 使用 string 类时须包含这个文件
#include <iostream>
#include <queue> //调用c++中的类:queue
using namespace std;
int main()
{
int n,i,num,count=0,out;
cin>>n;
queue<int> A,B; //A,B窗口分别为两个队列
for(i=1;i<=n;i++){//进队列
cin>>num;//输入编号
if(num%2==0)//偶数
B.push(num);
else//奇数
A.push(num);
}
while(!B.empty()&&!A.empty()){
for(i=0;i<2;i++){
out=A.front();
A.pop();
cout<<out<<" ";
count++;}//奇数
out=B.front();
B.pop();
cout<<out<<" ";
count++;//偶数
}
while(B.size()!=0){
if(B.size()==1){
out=B.front();
B.pop();
cout<<out;
}
else {
out=B.front();
B.pop();
cout<<out<<" ";
}
}
while(A.size()!=0){
if(A.size()==1){
out=A.front();
A.pop();
cout<<out;
}
else {
out=A.front();
A.pop();
cout<<out<<" ";
}
}
return 0;
}
代码来源:https://gitee.com/ev32/queue_pta/blob/master/7-2.cpp
代码优势:此题调用c++中的类:queue,节省了代码量,避免函数错误,当时自己写的时候是采用的将顾客的标号存放于两个队列中,然后再根据题目要求将其出队输出,代码量比较大,没有调用queue来的简洁