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

    1.学习总结

    思维导图

    2.PTA实验作业

    题目1:7-1 字符串是否对称

    1.设计思路

    定义栈指针s,定义n保存返回值;
    输入一个字符串str;
    动态申请空间;
    调用函数symmetry;
    n=0,输出no;n=1;输出yes;
    bool symmetry(ElementType str[])
    {
           定义e保存出栈元素,定义栈指针st;
           动态申请空间;
           for i=0  to str[i]!=''  i++;
                  进栈
           for i=0  to str[i]!=''  i++;{
                  出栈
                  如果str[i]!=e   return false;
           }
           return true;
    }
    

    2. 代码截图

    3.PTA提交列表说明

    • 这题没有遇到什么大问题,主要要理解判断的方法,先将数组元素进栈,再逐个出栈比较,在编译器上碰到死循环的时候,主要判断循环结束是str[i]==''。

    题目2:7-1 报数游戏

    1.设计思路

    定义n,m;定义队列指针q;定义e保存出队元素,flag判断输出格式,num=0判断何时输出
    输入n,m;
    如果m>=n    输出error;
    申请空间;
    for i=1  to  n
         入队1到n的元素
    while(!QueueEmpty(q)
    {
         num++;
         如果n!=m     出队;入队;
         否则   出队,按格式输出e,将num置为0;
    }
    
    

    2. 代码截图

    3.PTA提交列表说明

    • 一开始部分正确,只对了m>=n的情况,后面部分正确只对了m<n的情况,经过调试,发现m>=n的时候,输出error后,还会执行下面的代码,所以在m>=n的时候,缺少了结束程序,在输出error后return,得到正确答案。

    题目3:7-2 银行业务队列简单模拟

    1.设计思路

    定义两个队列指针p,q;p存偶数,q存奇数;
    定义n,m;定义e1,e2,e3保存出队元素;
    申请空间;
    输入n;
    for i=0  to  n-1
         输入m;
         如果m为偶     入p队;
         否则        入q队;
    while(!QueueEmpty(q)&&!QueueEmpty(p))
    {
            出队两个q队元素e1,e2,一个p队元素e3;
            按格式输出e1,e2,e3;
    }
    while(!QueueEmpty(q))
    {
            出队两个q队元素e1,e2;
            按格式输出e1,e2;
    }
    while(!QueueEmpty(p))
    {
            出队一个p队元素e3;
           按格式输出e3;
    }
    

    2. 代码截图


    3.PTA提交列表说明

    • 本题没有什么大的问题出现,主要有函数第二题为模板,需要注意的是,A,B两个的效率不一样,所以定义了三个e保存出队元素,还有就是,队列不为空时的判断,还要继续输出。

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

    • 本次总分:100+105=205

    3.1 栈PTA排名

    3.2 队列PTA排名

    3.3 我的总分:2分

    4. 阅读代码

    用栈表示队列

    class Queue {
    public:
        stack<int> tmp, s;
        // Push element x to the back of queue.
        void push(int x) {
    
            while (!s.empty()){
                tmp.push(s.top());
                s.pop();
            }
            tmp.push(x);
            while (!tmp.empty()){
                s.push(tmp.top());
                tmp.pop();
            }
        }
    
        // Removes the element from in front of queue.
        void pop(void) {
            s.pop();
        }
    
        // Get the front element.
        int peek(void) {
            return s.top();
        }
    
        // Return whether the queue is empty.
        bool empty(void) {
            return s.empty();
        }
    };
    
    • 用两个栈tmp和S,tmp当做中介。每次有push操作时,先将s中的元素全部倒入tmp中(s若为空则无操作),此时再进行push操作压入新元素。 操作完成后再将tmp中所有元素倒入s中,从s中弹出的元素即为队列元素的弹出顺序。pop操作则为s.pop(),empty则为s.empty()。top操作也是取s的top。

    5. 代码Git提交记录截图

  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/mayifang/p/8834752.html
Copyright © 2011-2022 走看看