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

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 topKFrequent(vector& nums, int k) {

	// <数值,频率>
	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)

3.3 分析该题目解题优势及难点。

posted @   calizo  阅读(79)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示