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

  • 相关阅读:
    三元表达式 列表和字典推导式 函数对象 名称空间 作用域 global和nonlocal 函数装饰器 枚举对象
    函数参数 打散机制 字符串比较 返回值
    函数简介
    三种字符串的介绍 文件的读写
    字符编码
    数据类型及其常用方法 数据类型转换 可变与不可变 值拷贝与深浅拷贝
    流程控制 while和for循环
    变量命名规范 常量 输入和输出 注释 数据类型 运算符 逻辑运算符
    语言分类 编译型和解释型语言分析 环境变量 代码执行的方式 pip介绍 变量
    Python django tests
  • 原文地址:https://www.cnblogs.com/mayifang/p/8834752.html
Copyright © 2011-2022 走看看