• DS博客作业02--栈和队列tt


    0.PTA得分截图

    1.本周学习总结

    1.1 总结栈和队列内容

    1.1.1栈

    • 栈的存储结构及操作
    • 在栈顶完成入出栈操作,先进后出
    • 结构体
    //顺序栈
    typedef struct SNode
    {
        int* data;
        int top;//top=-1
        int maxsize;
    }*Stack;
    
    • 顺序栈操作
    //入栈
    bool StackPush(Stack &S, int x)
    {
        if(S->data[S->top] == maxsize - 1)
        {
            return false;
        }
        S->top++;
        S->data[S->top] = x;
        return true;
    }
    //出栈
    bool StackPop(Stack &S)
    {
        if(S->top == -1)
        {
            return false;
        }
        S->top--;
        return true;
    }
    //返回栈顶元素
    int StackTop(Stack S)
    {
        return S->data[S->top];//栈空判断放在函数外
    }
    //栈空判断
    bool StackEmpty(Stack S)
    {
        if(S->top == -1)
        {
            return true;
        }
        return false;
    }
    
    • 栈的应用
      • 字符串对称
      • 符号配对
      • 表达式转换
      • 走迷宫
    • 栈的STL容器

    1.1.2队列

    • 队列的存储结构及操作
    • 队尾插入,队头出,先进先出
    • 结构体
    typedef struct QNode
    {
        int* data;
        int front;
        int rear;//front=rear=-1
        int maxsize;
    }*Queue;
    
    • 队列操作
    //入队
    bool EnQueue(Queue &Q, int x)
    {
        if(Q->rear == maxsize - 1)
        {
            return false;
        }
        Q->rear++;
        Q->data[Q->rear] = x;
        return true;
    }
    //出队
    bool DeQueue(Queue &Q)
    {
        if(Q->front == Q->rear)
        {
            return false;
        }
        Q->front++;
        return true;
    }
    //返回队头元素
    int QueueFront(Queue Q)
    {
        return Q->data[Q->front];//队空判断放在函数外
    }
    //队空判断
    bool QueueEmpty(Queue Q)
    {
        if(Q->front == Q->rear)
        {
            return true;
        }
        return false;
    }
    
    • 队列的应用
      • 报数游戏
      • 银行排队(单、双队列等)
      • 走迷宫
    • 队列的STL容器

    1.2.我对栈和队列的认识及学习体会

    队列和栈知识不难,难在其变化多端,因此PTA题目很多都难以下手

    2.PTA实验作业

    2.1.题目一:7-3jmu-ds-符号配对

    2.1.1代码截图




    2.1.2本题PTA提交列表说明

    • Q1&Q2:没有对不出现右括号的情况进行判断
    • Q3:没有对栈不空而且不匹配进行判断

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

    2.2.1代码截图





    2.2.2本题PTA提交列表说明

    • Q1&Q2:使用了c++语法,PTA不识别
    • Q3:测试点4最大N段错误,正确规定了结构体中Data的最大容量M解决

    3.阅读代码

    3.1 题目及解题代码

    • 题目
    • 代码截图

    3.1.1 该题的设计思路

    插入法,找到元素对应的位置,people[i][1]就是元素people[i]所在的位置 = 其前面的空位数量 + people[i][0]的数量
    时间复杂度O(n)
    空间复杂度O(n)

    3.1.2 该题的伪代码

    定义二维数组resort_people和位置pos
    分配内存
    三者比较
    for
        找出p[i]的位置,
        放入二维数组resort_people
    end for
    返回二维数组resort_people
    

    3.1.3 运行结果

    3.1.4分析该题目解题优势及难点

    • 优点:代码简洁,方法无后效性,先排最小的,再排次小的
    • 难点:不是单纯的排列,实质是h和k的搭配排列,难度要大一点

    3.2 题目及解题代码

    • 题目
    • 解题代码

    3.2.1 该题的设计思路

    本体通过不断与栈顶元素比较大小,从而让最小元素一直在栈顶

    3.2.2 该题的伪代码

    核心:push函数
    {
        s1为数据栈
        第一个直接进入s2
        接下来的数同栈顶比较,小的直接进,大的将栈顶元素保存出栈,大的进去,保存的元素再进去
    }
    

    3.2.3 运行结果

    3.2.4分析该题目解题优势及难点

    • 优势:利用c++STL容器,使代码简单明了
    • 难点:如何保持最小值一直在栈顶
  • 相关阅读:
    【裸机装系统】获取硬盘信息失败,请谨慎操作!
    【ORACLE】Win2008R2修改oracle数据库实例名
    【ORACLE】数据库空闲1分钟自动断开
    【ORACLE】oracle数据库用户密码复杂度配置
    【ORACLE】重写控制文件
    【ORACLE】oracle11g单实例安装
    【ORACLE】oracle打补丁
    【ORACLE】oracle11g dg搭建
    【ORACLE】oracle11g RAC搭建
    nginx负载均衡简单示例
  • 原文地址:https://www.cnblogs.com/bestACG/p/12549100.html
Copyright © 2020-2023  润新知