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提交记录截图

     

  • 相关阅读:
    20155313 杨瀚 《网络对抗技术》实验九 Web安全基础
    20155313 杨瀚 《网络对抗技术》实验八 Web基础
    20155313 杨瀚 《网络对抗技术》实验七 网络欺诈防范
    20155313 杨瀚 《网络对抗技术》实验六 信息搜集与漏洞扫描
    20155313 杨瀚 《网络对抗技术》实验五 MSF基础应用
    20155313 杨瀚 《网络对抗技术》实验四 恶意代码分析
    20155313 杨瀚 《网络对抗技术》实验三 免杀原理与实践
    20155313 杨瀚 《网络对抗技术》实验二 后门原理与实践
    20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
    20155313 2017-2018-1 《信息安全系统设计基础》课程总结
  • 原文地址:https://www.cnblogs.com/chenyutin/p/8734781.html
Copyright © 2011-2022 走看看