zoukankan      html  css  js  c++  java
  • 博客作业03--栈和队列

    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历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。

  • 相关阅读:
    HDU 3152 Obstacle Course(BFS+优先队列 重载)
    芸芸毕业生
    shell学习三十四天----printf具体解释
    tomcat启动批处理——catalina.bat
    ZooKeeper启动过程2:FastLeaderElection
    R语言——数据分析的一把利剑
    Oracle blob字段的插入和更新
    [LeetCode] 698. Partition to K Equal Sum Subsets
    小知识!
    小知识!
  • 原文地址:https://www.cnblogs.com/smtwula/p/8824251.html
Copyright © 2011-2022 走看看