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容器,使代码简单明了
- 难点:如何保持最小值一直在栈顶