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容器,使代码简单明了
  • 难点:如何保持最小值一直在栈顶
posted @ 2020-03-22 22:53  林盛泓  阅读(211)  评论(0编辑  收藏  举报