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

  • 相关阅读:
    使用反射调用某个类的成员方法
    java反射机制
    SVProgressHUD
    __objc__
    loadView
    v2ex 下拉刷新 SCRootViewController
    stuck with
    v2ex 下拉刷新模块
    转载
    vue-cli脚手架构建了项目如何去除Eslint验证(语法格式验证)
  • 原文地址:https://www.cnblogs.com/mayifang/p/8834752.html
Copyright © 2011-2022 走看看