第03次作业-栈和队列

第03次作业-栈和队列


1.学习总结


2.PTA实验作业

2.1题目一 7-3 表达式转换(25 分)

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

    定义变量result[100]存储需要输出的式子。
    定义变量str[100]存储输入的表达式
    for i=0 to strlen(str)
    if(str[i] 为 ‘-‘ 并且 str[i-1]不是数字)
        then  result[r++]=str[i];
        elseif  (str[i]不是数字)
           then
           while str[i]为数字或为"."
               do  result[r++]=str[i];
               i++;
               end
            elseif  str[i]为"+" 并 str[i-1] 为"("
             then  continue;
        elseif  str[i]为")"
           then
            while st.top()不为‘(‘
               do 把括号之间存在栈的元素吐出放到result里
               end
            把"("出栈
        elseif  str[i]为‘(‘或栈为空)
              then  str[i]进栈
        else
            then
             if(栈顶运算符优先级大于str[i])
               then  str[i]进栈
             else
              then while( 栈不为空或者栈顶不是()
                   do  吐出栈内元素到result
                   end
                   str[i]进栈
       end for 

2.3 代码截图

2.4 PTA提交列表说明。

  • 运算数前有正负号

错误原因写代码时没考虑正号,没有想到

解决方法增添如下语句即可

else   if(str[i] == ‘+‘ && str[i-1] == ‘(‘)
          continue;
  • 运算数超过1位整数且有非整数出现

错误原因题目中若是出现一位以上的数字如123,不能输出1 2 3,要输出123,中间不能有空格而且可能存在小数的情况。

解决方法 加下面语句

else  if(isNum(str[i])) //遇到数字
        {
            while(isNum(str[i])||str[i]==‘.‘)
            {
                result[r++]=str[i];
                i++;
            }
            i--;//if语句结束后,i还会再加一次!
            result[r++]=‘ ‘;//最后再加空格
        }
  • 嵌套括号 段错误

    错误原因: 在运算符小于栈顶元素时,在弹出栈内元素时没有想到嵌套括号,在遇到"("或栈为空时都应该停止出栈!

    解决方法:

     while( !st.empty())

    改为

    while( !st.empty()&& st.top() !=‘(‘)

    2.1题目二 7-2 银行业务队列简单模拟(25 分)

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

    queue <int> q1;//建队列q1,q2
    queue <int> q2;
    for i=0 to n-1
      输入客户p[i]
        if p[i] 为偶数
        then 进q1
        else
           then 进q2
    end for
   if p[0]为偶数
   then
       while(q1,q2均不为空)
         do  输出q1的队首
            输出q2的前两个元素
         end
      if q1不空
       then  while(q1不空)
         do  输出q1内元素
         end
      if q2不空
        then  while(q2不空)
              do  输出q2内元素
               end
    else
    then
       while(q1,q2均不为空)
         do  输出q2的前两个元素
             输出q1的队首
         end
     ....接下来同上

2.3 代码截图

2.4 PTA提交列表说明

  • 最大N,随机 段错误

    错误原因:存储客户的数组不够大。

    解决方法

    int p[100];

    改成

    int p[1000];
  • 最小N 段错误

    错误原因: 如果只有一个客户,就直接输出这个客户,如果没有客户直接return 0

    解决方法:增加下列语句

    if(n==0)
     return 0;
    if(n==1)
    {
    printf("%d",p[0]);
     return 0;
     }

    2.1题目三 7-3 银行排队问题之单队列多窗口服务(25 分)

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

typedef struct pnode//定义两个结构体,顾客和窗口
{
    int atime;//到达时间
    int ctime;//处理时间
    int wtime;//等待时间
}pnode ;
typedef struct wnode
{
    int num;//处理顾客数
    int endtime;//结束时间
}wnode;
   queue <pnode> q;//建队列q
    for i=0 to n-1
      输入顾客信息,并入队
      end for
  for i=0 to k-1
    初始化num,endtime 为0;
    end for
    if 顾客<=窗口数
      then
         for i=0 to n-1
           wtime为0;
           windows[i].num++;
           windows[i].endtime为atime+ctime;
         end for
    else
       while q不空
       do
         for j=0 to k-1
         寻找最小结束时间的窗口标记为flag。
         end for

     if 顾客来的晚
            then  windows[flag].num++;
                  windows[flag].endtime为atime+ctime;
                 wtime为0
       else
           then
                wtime 等于 endtime 减 atime
                windows[flag].endtime+=q.front().ctime;
                windows[flag].num++;
            }
            sumtime累加wtime
        end

2.3 代码截图

2.4 PTA提交列表说明。

  • 本题在提交前在codeblocks测试修改过,提交上去一次过

    在codeblocks上修改了两处。

  • 第一处:

    错误原因

    题目中要求“这里假设每位顾客事务被处理的最长时间为60分钟。 ”

    言下之意是如果处理时间大于60也把它当成60,刚开始理解为输入的数据会自动<60.

    解决方法

            if(p.ctime>60)
            p.ctime=60;
  • 第二处

    错误原因输出的平均等待时间小数与样例相反

    解决方法 sumtime 也要定义成double 型


3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:2.5分

必做题做完选做做部分。

4. 阅读代码

代码截图:

包含注释

代码优点:利用栈来实现计算器功能,能够实现更为复杂的运算式子,带有括号,带有负数,带有优先级的判断,功能比之前学的更强大。

代码地址 https://gitee.com/adressad/codes/9ystlgoh6b413n5vfupa839

5. 代码Git提交记录截图

原文地址:https://www.cnblogs.com/huangqingqing/p/8727906.html

时间: 2024-10-13 20:31:46

第03次作业-栈和队列的相关文章

第三次作业-栈和队列

1.学习总结 2.PTA实验作业 2.1 题目1:7-1 jmu-字符串是否对称(20 分) 2.2 设计思路(伪代码或流程图) 2.3 代码截图   2.4 PTA提交列表说明. 题目2:7-2 符号配对(20 分) 2.2 设计思路(伪代码或流程图) 循环中判断是否读到左符号,是则进栈, 读到右符号判断是否为空,若不为空则出栈,直到循环结束若是不配对则输出NO反之则输出YES 2.3 代码截图 2.4 PTA提交列表说明 题目3:7-1 jmu-报数游戏(15 分) 2.2 设计思路(伪代码

第3次作业 栈和队列

1.学习总结 到现在为止,已经学习了数据结构绪论.线性表.栈和队列等知识点.尝试使用思维导图将这些碎片化的概念.知识点组织起来.使用Xmind画出知识点及知识点之间的联系.步骤如下:1.1 写出你认为本周学习中比较重要的知识点关键词,如逻辑结构.栈.队列.存储结构等.1.2 使用思维导图将这些关键词组织起来. 2.PTA实验作业 题目1:7-3 表达式转换 设计思路(伪代码或流程图) 中缀表达式到后缀表达的转换思路: 1. 若是数字则直接放到输出: 2. 若是操作符'+'/'-'/'*'/'.'

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

02组_现代软件工程_第03次作业——对于自身评价(原有水平以及长远目标分析总结)

02组_现代软件工程_第03次作业 --对于自身评价(原有水平以及长远目标分析总结) 李聿轩 ---------------------------------------------------------------------------- 一.原有水平 1.技术水平 ①Java基础开发 A.基本语法逻辑的代码完成 B.利用基本内容完成控件功能的设计以及实现 C.多线程的管理控制,队列,栈的使用相对较少 ②Android开发 A.会使用原生的控件显示,利用诸如Activity,Servic

3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 行编辑程序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceStack.c        相关测试数据下载  链接? 无数据

图解堆算法、链表、栈与队列(Mark)

原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小.但很重要的作业,同样应当拥有优先权.而堆就是为了解决此类问题而设计的数据结构.--

3-9-模拟银行排队过程-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 模拟银行排队过程 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SinglyLinkedList.c.LinkQueue

3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 队列的链式存储 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h        相关测试数据下载  链接? 无数据    

3-5-表达式求值-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 表达式求值 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceStack.c        相关测试数据下载  链接? 无数据