• DS博客作业03--栈和队列


    1.本周学习总结

        本次学习了队列和栈的应用,学习了不同方式的堆栈(头指针指向栈顶或者栈顶的上一个位置)以及队列的操作,在了解栈和队的操作以及熟悉其对应的代码以后,还学习了STL容器的运用,使得栈和队列的操作变得更加简单明了,也学习了string类型变量的输入(比如说按行输出的getline(cin,x)和长度x.length())都对代码的简化以及程序的设计有了很大的帮助,但是得注意的是,STL容器的各个函数返回值是什么类型的(比如s.top()返回的是和定义s时的类型相同的值,s.empty()返回的时true或者false,队列也是如此)。然后本章的难点我觉得在于循环队列,我觉得循环队列的结构体定义的两种方式里面,没有定义尾指针,而是定义队列元素个数的结构体会比较好操作(优势就在于栈满条件Q->Count==Q->MaxSize和栈空条件Q->Count==0,比较好判断),若用有定义尾指针的结构体,还得判断头指针和尾指针的关系才可以再进行判断队列的状态。我们现在接触的栈和队列很少出现过链式结构的,所以对这部分的内容会比较生疏。
    

    2.PTA实验作业

    2.1.题目1:jmu-ds-是否合法出入栈操作

    假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。 比如输入字符串IOOI,表示栈操作为入栈出栈出栈入栈,这样操作序列是不合法。
    

    2.1.1 设计思路

    函数题整体思路题目基本已经确定的,我们做的操作都是基本的操作,在这里就省略了。
    

    2.1.2 代码截图

    2.1.3 本题PTA提交列表说明

    本题一次性通关
    

    2.2 题目2:6-11 另类循环队列

    如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
    

    2.2.1 设计思路

    省略
    

    2.2.2 代码截图


    2.2.3 本题PTA提交列表说明

       本题在进栈操作种(Q->Front++)以后忘了(Q->Front=Q->Front%Q->MaxSize)导致答案大部分答案错误
    

    2.3 题目3:7-3 符号配对

    请编写程序检查C语言源程序中下列符号是否配对:/*与*/、(与)、[与]、{与}。
    

    2.3.1 设计思路

       定义一个字符串数组a[i](也就是二维数组)存取输入
       然后用二重循环一个一个一个读取 读取到 /* 与 */、( 与 )、[ 与 ]、{ 与 }时用一个字符串变量str来存取对应的符号,每次循环str初始化成空格
       (在读取 /* 时,在a[i][j]读取到 / 时,判断一下a[i][j+1]是不是 * 如果时str==”/*“ 并使下一个循环直接跳过.(读取*/同本思路))
       然后判断str 
                     str为 /* ,( ,{ ,[ 进栈 
                     str为 */ ,) ,} ,] 时  判断栈顶元素
                                                                              配对就出栈
                                                                              不配对用str3存取不配对元素,goto跳出二重循环
      最后按要求输出
    

    2.3.2 代码截图





    2.3.3本题PTA提交列表说明

    编译错误是因为用c提交了,至于为什么我也不知道
    /*和*/的存取后没有跳过下一个循环
    然后就是不配对时的输出,也没有例子只能一个一个试,最后发现只要碰到第一个不配对的就可以不用继续判断了,我以为可能符号有好几个不配对时都要输出,建议下次把例子给全了不然很浪费时间
    

    2.4 题目4:7-6 银行业务队列简单模拟

    设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
    

    2.4.1设计思路

       建立A B两个队列
       输入  奇数存进A队,偶数进B队
       输出  定义一个 初值为1的变量 i 用于循环 
                当   i%3! =0 && A!空 时 A输出
                当   i%3==0 && B!空 时 B输出
                当   A和B都空时  跳出循环
      END
    

    2.4.2 代码截图


    2.4.3 本题PTA提交列表说明

    很显然编译错误是我又用c提交了
    部分正确是因为在A输出和B输出的条件上出了问题 当时脑子短路用了个 i%2是否=0 来判断
    

    3、栈和队列上机考试

        本次上机考试在一些细节的调试上花了比较多的时间,因为函数题没法在c++上面运行只能用看的,所以花费比较多的时间,也源于本人功底不够。最后一题看到题目字太多懒得理解直接跳过了
    

    第一题 选择题错题

    第二题 7-2 银行业务队列简单模拟

    错题代码



    改正部分的代码(前面都没问题,43行后面做些修改)

    两分错在格式上的错误最一个测试点没过,然后没有提示就没调整了
    错位:当输入的数全部为偶数或奇数(即A和B其中一个为空栈) 输出结果开头会多一个空格
    只要用flag操作一下就很ok
    
  • 相关阅读:
    Beta 冲刺(1/7)
    福大软工 · 第十次作业
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    vue 写一个瀑布流插件
    微信小程序页面滚动到指定位置
    写一个vue的滚动条插件
  • 原文地址:https://www.cnblogs.com/syt666/p/10745219.html
Copyright © 2020-2023  润新知