1.学习总结(2分)
1.2 使用思维导图将这些关键词组织起来
2.PTA实验作业(4分)
2.1 题目1:表达式转换
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
2.2 设计思路(伪代码或流程图)
初始化运算符栈op;
将'='进栈;
从exp读取字符ch;
while(ch!=' '){
if(ch不为运算符)
将后续的所有数字依次存放到postexp中,并以' '标志结束
else
switch(Precede(op栈顶运算符,ch)){
case '<':
将ch进栈;
从exp读取下一个字符ch;
break;
case '=':
退栈;
从exp读取下一个字符ch;
break;
case '<':
退栈运算符并将其存放到postexp中;
从exp读取下一个字符ch;
break;
}
}
exp扫描完毕,退栈到'='为止;
2.3 代码截图
2.4 PTA提交列表说明。
- 得分情况:0 -> 1 -> 5 -> 23
- 格式错误:题目要求结尾不得有多余空格
解决方法:控制结尾,不输出空格
- 段错误:有非整数出现情况没有考虑
解决方法:添加判断有小数的情况
- 运行时超时:postexp数组越界
解决方法:题目提到表达式不超过20个字符,因此开始时设为postexp[20]
,但是我的postexp数组中还包括了空格,因此空间不够,改为postexp[50]
- 答案错误:运算数前有正负号
解决方法:未解决
2.1 题目2:银行业务队列简单模拟
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
2.2 设计思路(伪代码或流程图)
void CreateQueue(SqQueue &Q1,SqQueue &Q2,int N){
定义num为顾客编号
for i=0 to N
{
输入顾客编号num
偶数顾客进队Q2,奇数顾客进队Q1
}
}
void PrintfQueue(SqQueue &Q1,SqQueue &Q2,SqQueue Q3,int N)
{
while(Q1,Q2都不为空队时 ){
奇数顾客两名,偶数顾客一名,依次出队并进队Q3
}
Q1或Q2队列中有剩余的顾客出队并进队Q3
输出顾客编号
}
2.3 代码截图
修改后代码:
2.4 PTA提交列表说明。
- 得分情况:23 -> 25
-
答案错误:最大N情况,答案错误
解决方法:N(≤1000)为顾客总数,所以把#define MAXQSIZE 100
改为#define MAXQSIZE 10001
-
一个在写代码时遇到的错误
错误:找到有剩余顾客的队列后进行出队并入队Q3,但只输出一个顾客的编号,又试了一组数据还是同样的情况。
解决方法:说明在最后剩余顾客入队进Q3的部分出错,发现是没有对有剩余顾客的队列进行遍历,导致入队Q3只执行了一次。
改正后代码:
2.1 题目3:报数游戏
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(m<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。要求用队列结构完成。输出数字间以空格分隔,但结尾不能有多余空格。
2.2 设计思路(伪代码或流程图)
输入人数n;
for i=1 to n
元素 i 进队
void Game(SqQueue &Q, int m){//报数游戏
if(m>总人数){
输出error,退出
}
遍历队列{
if(报的数小于m){
该人出队再入队,改变头尾指针位置
}
else if(报的数为m){
出队并输出编号;
从头开始报数;
}
}
}
2.3 代码截图
2.4 PTA提交列表说明。
-
得分情况:15(本题出现的问题在devc上修改正确)
-
错误:输出没有内容
发现问题及解决方法:调试发现程序一直在以下部分循环,发现 i 没有改变,于是加上i++;
,并在找到报数为m的人后重头开始报数,令i=0;
改正后代码:
3.截图本周题目集的PTA最后排名(3分)
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:78+80=158(2分)
4. 阅读代码(必做,1分)
代码功能:堆栈模拟队列 (两个堆栈S1和S2,用这两个堆栈模拟出一个队列Q。)
代码理解:将栈s1里的全部元素出栈,并入栈到栈s2,出栈栈s2的栈顶元素,得到队头元素
代码地址:[https://gitee.com/zhoubinghui/data_structure/blob/master/队列/7-5(选做) 堆栈模拟队列.cpp]
- 利用
#include<bits/stdc++.h>
包含C++的所有头文件,比较方便 - 利用
#include<stack>
,可以不用写Pop、Push等函数,使代码更简洁
5. 代码Git提交记录截图
在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。