0.PTA得分截图
栈和队列题目集总得分,请截图,截图中必须有自己名字。题目至少完成2/3(不包括选择题),否则本次作业最高分5分。
1.本周学习总结(0-5分)
1.1 栈
画一个栈的图形,介绍如下内容。
顺序栈的结构、操作函数
链栈的结构、操作函数
1.2 栈的应用
表达式
中缀表达式转后缀表达式
后缀表达式求值
1.3 队列
画一个队列的图形,介绍如下内容。
顺序队列的结构、操作函数
环形队列的结构、操作函数
链队列的结构、操作函数
队列应用,要有具体代码操作。
2.PTA实验作业(4分)
此处请放置下面2题代码所在码云地址(markdown插入代码所在的链接)。如何上传VS代码到码云
2.1 符号配对
2.1.1 解题思路及伪代码
思路: 如果当前的符号是前一半,那么推入栈,如果是后一半就找最近的匹配括号,如果是就推出,遍历下一个,如果不匹配那么久失败退出
2.1.2 总结解题所用的知识点
2.2 银行业务队列简单模拟
2.2.1 解题思路及伪代码
将输入的人数N使用求余运算进行奇偶入队,在两队不为空的情况下,利用标志变量对2进行求余运算
由于A队的业务处理速度是B队的两倍,所以,标志变量每轮递增,A队每轮循环都出队,B队只有当余数为0的时候出队,出队
后重新将标志变量记为0。循环结束后,判断两队是否均为空,如果不为空,则将剩余队员出列。
2.2.2 总结解题所用的知识点
对于出队速度的控制,可以使用
3.阅读代码(0--1分)
3.1 题目及解题代码
可截图,或复制代码,需要用代码符号渲染。
`
class Solution2 {
public:
vector
// <数值,频率>
unordered_map<int, int> freq;
for (int i = 0; i < nums.size(); i++) {
freq[nums[i]]++;
}
// 开始维护K长的优先队列,pair<频率,数值>
priority_queue< pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> > pq;
for (unordered_map<int, int>::iterator iter = freq.begin(); iter != freq.end(); iter++) {
// 队列长度已到达k
if (pq.size() == k) {
if (iter->second > pq.top().first) {
pq.pop();
pq.push(make_pair(iter->second, iter->first));
}
}
else {
pq.push(make_pair(iter->second, iter->first));
}
}
// 整理输出
vector<int> res;
while (!pq.empty()) {
res.push_back(pq.top().second);
pq.pop();
}
return res;
}
};`
3.2 该题的设计思路及伪代码
思路: 维护一个k数据长的优先队列,如果后来的数据的频率高于优先队列中的最小频率,那么替换,最终的优先队列中的数值就是我们的结果,复杂度为o(nlogk)