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

     一、学习总结

    1.我认为的本周学习中比较重要的知识点关键词

    逻辑结构、栈、队列、存储结构

    2.思维导图

    (1)绪论

    (2)顺序表

    (3)栈和队列

    二、PTA实验作业

    题目一、7-2 符号配对

    1.题目要求

    2.设计思路

    定义字符串 c 存放待匹配符号
    定义字符栈 s 做匹配处理
    定义 i,k 控制循环
    将字符串输入并存入a,逐个判断a中的字符是否为
    while(1){
            if 输入的是结束标志
                then 结束循环
            输入字符串a
            for(i=0;i<a.size();i++) 
                if a[i]是符号
                    then 存入b
                else if a[i]是/*
                    then 将<存入b且i+1
                else if a[i]是*/>存入b且i+1
            end
    定义 n=k;
    for i=0 to nif b[i]等于[、{、(或<
            then 将b[i]入栈
        else if 栈不为空
            if 栈顶元素与此时的b[i]匹配
                then 将栈顶出栈
            else
                将b[i]入栈
        else
            将b[i]入栈
    end for
    if 栈空 then输出YES else{ 输出NO 重置k=0 while 栈不空 将栈中元素逐个放入c中 将c数组中的元素逐个比较 for i=0 to k-1
    for j=i+1 to kif 匹配 then c[i]c[j]都置为0 for i=0 to kif c[i]等于(、[、{ then输出c[i]-? 结束循环 else if c[i]等于'<' then输出/*-? 结束循环 else if c[i]等于'>' then输出?-*/ 结束循环 else if c[i]等于)、]、} then输出?-c[i] 结束循环 end

    3.代码截图

    4.PTA提交列表说明

    错误点:在缺右边或缺左边时会出现错误。

    解决方法:我多输入了几组测试数据,发现结果时而正确时而错误。后来发现在判断符号是否匹配的函数(if_match函数)中,我只判断了()、{ }、[ ]、/* */这些情况,忽略了反过来也照样配对的情况。所以最后我在if_match函数中de条件循环的条件中补充了这些判断,结果就正确了。

    题目二:7-1 jmu-报数游戏

    1.题目要求

    2.设计思路

    void number(int i,int n)
    {
        if n大于i
            输出error!
        else{
            定义i,j控制循环
                    定义length保存队列长度
            定义元素类型的元素e
            创建队列q
            for j=1 to i
                将j入队
    end for
    while 队列长度大于n 一个元素出队并存放到e中且k+1 if k等于n then 输出e 并重置k为零 else 将e入队 计算此时队列长度 } while 长度不为零 一个元素出队并存放到e中 if 队长为1 then 输出e else 输出e(空格) 长度减一 }

    3.代码截图

     

     

    4.PTA提交列表说明

    错误点:m<n时,答案错误

    未修改前:                                                             正确结果应是:

                   

    修改方法:在number函数中第一个while循环结束的标志是队列长度小于给定n,在这个while循环里,我先计算了队列长度再进行其他操作,导致其他操作对队列长度的影响要在下一次while循环中才能体现,所以出现了上述错误。修改方法是将计算队列长度的运算式放在while循环内的最后一条语句。

    题目三、7-3 银行排队问题之单队列多窗口服务

    1.题目要求

    2.设计思路

    定义数组 wintime 存放各个窗口的等待时间
    定义数组 winnum 存放各个窗口的顾客数
    定义 sumwait为总的等待时间,lenwait为最长的等待时间,wait为单次等待时间  (全初置为零)
    while 栈不为空
    定义 minwait最快的完成时间(先设为无穷大),minindex为最快完成时间的下标(初值为零)
    定义 flag 标记变量
        for i=0 to k 遍历k个窗口
            if 队列首位,到达时间比完成时间大,就代表不需要等待
                    then 更新完成这个窗口完成的时间
                窗口人数加一
                标记一下,代表不需要等待
                队首元素出队 
                结束循环 
            if 需要等待
                        then 记录各个窗口里最快完成的那个窗口的完成时间,和下标
        end for
        if需要等待
        then 等待的时间等于最快完成的时间减去队列第一个人到达的时间
            if最长等待时间小于等待时间不断更新等待的最长时间
                then更新等待的最长时间
            求等待时间的和
            更新对应窗口的完成时间
            对应窗口人数++
            队首元素出队
    end while
    定义 maxtime为最大完成时间(初置为wintime[0]
    for i=0 to k 
        if 最大完成时间小于wintime[i]
            then更新最大完成时间
    end for

    3.代码截图

    4.PTA提交列表说明

    三、本周题目集的最后排名

    3.1栈PTA排名

     

     3.2队列PTA排名

     3.3我的总分

    2分

    四、代码阅读

    代码功能:判断带头结点的循环双向链表中的数据结点是否对称

    优点:代码条理简单清晰

    代码地址:https://gitee.com/QueGuangRenChen/data_structure/blob/master/chpt02/6-5.cpp

     五、代码Git提交记录截图

     

  • 相关阅读:
    [转]How can I create a design netlist without including my source design files?
    [转]基于FPGA的以太网开发
    [转]GMII/RGMII/SGMII/TBI/RTBI接口信号及时序介绍
    [原]Altium画PCB时鼠标十字不能对准焊盘中心
    [转]Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛
    [转]STM32正交编码器驱动电机
    [转]使用D触发器制作正交编码器的鉴相电路
    [转]解决STM32开启定时器时立即进入一次中断程序问题
    [转]ISE iMPACT bit生成mcs
    [转]NiosII处理器软件代码优化方法
  • 原文地址:https://www.cnblogs.com/chenyutin/p/8734781.html
Copyright © 2011-2022 走看看