acwing算法基础之数据结构--栈和队列

目录

  • [1 知识点](#1 知识点)
  • [2 模板](#2 模板)

1 知识点

栈:先进后出。先进的就是栈底,后进的就是栈顶。后进先出嘛,所以在栈顶弹出元素。

队列:先进先出。先进的就是队头,后进的就是队尾。先进先出嘛,所以在队头弹出元素。

单调栈:输入数组,求每个元素左边的某个元素,满足(1)比它小,(2)离它最近。

cpp 复制代码
//输入数组nums
//输出上述要求的数值
for (int i = 0; i < nums.size(); ++i) {
	while (tt && stk[tt] >= nums[i]) {
		tt--;
	}
	if (tt) {
		cout << stk[tt] << " ";
	} else {
		cout << "-1 ";
	}
	stk[++tt] = nums[i];
}
cout << endl;

单调队列:求滑动窗口中的最大值或最小值,

cpp 复制代码
//输入数组nums,区间长度k
//(1)找到滑动窗口的最小值
int hh = 0, tt = -1;
for (int i = 0; i < nums.size(); ++i) {
	if (hh <= tt && q[hh] < i - k + 1) {
		hh++;
	}
	while (hh <= tt && nums[q[tt]] >= nums[i]) {
		tt--;
	}
	q[++tt] = i;
	//最小值nums[q[hh]]
	if (i >= k-1) {
		cout << nums[q[hh]] << " ";
	}
}
cout << endl;

//滑动区间的最大值
int hh = 0, tt = -1;
for (int i = 0; i < nums.size(); ++i) {
	if (hh <= tt && q[hh] < i - k + 1) {
		hh++;
	}
	while (hh <= tt && nums[q[tt]] <= nums[i]) {
		tt--;
	}
	q[++tt] = i;
	//最大值nums[q[hh]]
	if (i >= k - 1) {
		cout << nums[q[hh]] << " ";
	}
}
cout << endl;

用数组来模拟上述数据结构。

2 模板

(一)用数组来模拟栈的模板,

cpp 复制代码
const int N = 1e6 + 10;
int stk[N], tt = 0;//tt表示栈顶下标,stk[tt]表示栈顶的值。

//(1)往栈中插入数值x
stk[++tt] = x;

//(2)删除栈顶元素
tt--;

//(3)栈顶元素的值
stk[tt];

//(4)判断栈是否为空
if (tt > 0) {
	//栈不为空
} else {
	//栈为空
}

(二)用数组来模拟队列的模板,

cpp 复制代码
const int N = 1e6 + 10;
int q[N], hh = 0, tt = -1;//hh表示队头下标,tt表示队尾下标。q[hh]表示队头的值,q[tt]表示队尾的值。

//(1)往队列中插入数值x
q[++tt] = x;

//(2)往队列中删除元素
hh++;

//(3)取队头元素
q[hh];

//(4)取队尾元素
q[tt];

//(5)判断队列是否为空
if (hh <= tt) {
	//队列不为空
} else {
	//队列为空
}
相关推荐
云和数据.ChenGuang6 分钟前
trace 是RAG检索链路的**全链路追踪日志对象
人工智能·深度学习·算法·排序算法
Evand J8 分钟前
【PMSM例程6】永磁同步电机(PMSM)基于增广EKF的d-q轴电感分阶段辨识算法|电机参数估计与误差分析
算法·matlab·电机·ekf
垆边人似月.9 分钟前
华为题:最多可以参加的会议数目
数据结构·c++·算法
Tongzhi202610 分钟前
2026 年考勤行业趋势:考勤正在从“打卡工具“变成“人力成本中枢“
大数据·数据结构·数据仓库·科技·数据库开发
Matlab程序猿13 分钟前
【MATLAB源码-第460期】基于matlab的OTFS通信系统SLM峰均比抑制及非线性功率放大器失真与误码性能仿真
开发语言·算法·matlab·slm·otfs
xiangyun6114 分钟前
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器
数据库·c++·算法·链表·stl·list
码爸9 小时前
线性回归算法
算法·机器学习·线性回归
Coder-magician9 小时前
《代码随想录》刷题打卡day51:图论-part09(dijistra堆优化,Bellman_ford算法)
算法·图论
Nil2089 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展
不会就选b10 小时前
算法日常・每日刷题--<动态规划>20
算法·leetcode·动态规划