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


    1.学习总结

    栈只能在同一端进行入栈出栈操作(FILO),而队列是在一端入队,在另一端出队(FIFO)。

    查找了一些算法,灰色部分是目前还未接触过的算法

    2.PTA实验作业

    2.1.1 题目1:字符串是否对称

    2.1.2 设计思路

        定义变量X,数组a[]存放数据;
        定义变量N=0,i控制循环,记录元素个数;
        定义栈S;
        
        输入字符串,并记录字符串的大小N;
        
        以N为栈的最大容纳量创建栈S;
    
        for i=0 to N
            字符串进入栈;
        end for
    
        for i=0 to a[i]!=''
            X=S出栈的数值;
            if a[i]与X不相等
                输出"no",并结束程序;
        end for
    
        输出 “yes”;
    

    2.1.3 代码截图

    2.1.4 PTA提交列表说明

    一开始因为C/C++部分操作弄混了,修改后第二个测试点对了,但是第一个一直不对,以为是数组设置的不够大,但是在我增大到让程序运行超时时仍然不正确,也让其他同学替我看了,找不到到底错在哪,但题目给的样例能正确输出。

    2.2.1 题目2:符号配对

    2.2.2 设计思路

        定义栈S;
        定义自变量flag=1作为正误判断标志,i控制循环,len记录字符串长度;
        定义变量s[100000],X,e记录数据;
        
        初始化栈S;
        while(1)
        {
            输入字符串s;
            if s[0]为'.'并且s[1]为0   退出循环;
    
            len = 字符串s的长度;
            栈S的大小Size加上len;
    
            for i=0 to s[i]!=''
                if s[i]为'/' 或'[' 或'{'
                    s[i]入栈;
                else if s[i]为'/'并且s[i+1]为'*' 且 i+1<len
                        令'<'进栈;   //用'<'代替' /* '
    
                else if s[i] == ')'
                        if 栈不空
                            if S栈顶的元素为 '('
                                出栈;
                        else if 栈空或不匹配
                            输出"NO""?-)"并退出程序;
    
                else if s[i] == ']'
                        if 栈不空
                            if S栈顶的元素为 '['
                                出栈;
                        else if 栈空或不匹配
                            输出"NO""?-]"并退出程序;
    
                else if s[i] == '}'
                        if 栈不空
                            if S栈顶的元素为 '{'
                                出栈;
                        else if 栈空或不匹配
                            输出"NO""?-}"并退出程序;
    
                else if s[i] == '*',s[i+1]=='/' 且 i+1<字符串长度
                        i++;
                        if 栈不空
                            if S栈顶的元素为 '<'
                                出栈;
                        else if 栈空或不匹配
                            输出"NO""?-*/"并退出程序;
            end for
        }
    
        if 栈内无右括号与之匹配
            输出"左括号-?";
        else 括号全部能匹配
            输出"YES";
    
    

    2.2.3 代码截图

    2.2.4 PTA提交列表说明

    经过漫长的编写,测试后发现题目给的sample3输出结果不对,调试后找到了问题:我采取的是在一开始先录入所有的数据,直到收到'.'和' ',但是第三个样例中这样输入会导致后面的数据不能进入数组,造成结果错误,所以我改变了数据输入的方式,也的确对了,但是第六个测试点“左右符号个数相同,达到最大值,但不匹配”不明白是什么意思,也没办法找数据测试。

    2.3.1 题目3:银行业务队列简单模拟

    2.3.2 设计思路

        定义变量N记录总人数,n为顾客编号;
        定义变量i控制循环,na,nb为格子队列的元素数,e记录出队元素,数组a[1000]记录完成业务的顾客编号;
        定义并初始化队列QA,QB;
        输入N;
        if N>0
        {
            循环N次,按奇偶将顾客编号放入不同的队列中;
    
            i=0;flag=1;
    
            循环N次
                if flag==1且QA不为空
                    QA连续两次出队列,并将编号记录在数组a中;
                    if QB不为空 flag=0;
                else
                    QB出队一次,记录出队的编号;
                    if QA不为空 flag=1;
    
            for i=0 to N-1
                输出a[i]+" "
            end for
            输出a[i]
        }
    

    2.3.3 代码截图

    2.3.4 PTA提交列表说明

    • 第一次提交时只有第一个测试点(题目给的样例)正确,经过调试后对代码进行了修改
      修改前:

    修改后:

    • 1.无论是na还是nb,当其为0时皆表示队列中没有元素存在,边界情况应该注意这一点;

    • 2.建立在上面那一点错误的情况下的错误。考虑到flag的初始值为1,而变为0是在flag==1的前提下,若是将QB出队的条件限制太多,反而不能够成功让QB队列中的元素出队。

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

    3.1栈的PTA排名

    3.2队列的PTA排名

    总分:128分

    4. 阅读代码

    将十进制数转为任意进制的数

    原地址:{https://blog.csdn.net/qianqin_2014/article/details/51031090}

    该段代码可将输入的十进制数转化为自定义的进制数

    优点:以前做进制转化可能还要考虑输出数的顺序、考虑放入数组的顺序,但是使用栈,直接将转化后的数逐个进栈再全部出栈,不必考虑顺序的问题。一个简单的代码体现了栈的特点。

    5. 代码Git提交记录截图

    emmm...下次应该一次提交一个代码的

  • 相关阅读:
    springboot jpa 的使用
    《 mysiteforme 》 学习之wangEditor的使用
    《 mysiteforme 》 学习之layui table 的使用
    《 mysiteforme 》 学习之数据字典的使用
    Shiro + redis + 登录 + 记住我 + 验证码 + 登出(mysiteforme)
    spring boot 使用kindeditor上传传照片到nginx
    easypoi excel 文件导入导出
    猜年龄
    Kth number
    乌龟棋
  • 原文地址:https://www.cnblogs.com/wwwwxy128/p/8734407.html
Copyright © 2020-2023  润新知