1.学习总结(2分)

1.2 使用思维导图将这些关键词组织起来

2.PTA实验作业(4分)

2.1 题目1:表达式转换

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

2.2 设计思路(伪代码或流程图)

初始化运算符栈op;
将'='进栈; 
从exp读取字符ch;
while(ch!='\0'){
	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历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。

posted on 2018-04-14 22:01  呜啦  阅读(503)  评论(3编辑  收藏  举报