单调队列
发布日期:2021-05-14 16:43:32 浏览次数:18 分类:精选文章

本文共 1069 字,大约阅读时间需要 3 分钟。

C++代码示例:队列模拟

以下是关于队列模拟的C++代码示例,该代码用于对队列进行各种操作,主要以双向队列的理念为基础。

代码结构如下:

#include

using namespace std;

const int N = 1000010; int a[N], q[N];

int main() { int hh = 0, tt = -1; int n, k;

cin >> n >> k;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
for (int i = 0; i < n; ++i) {
if (hh <= tt && i - k + 1 < 0) {
if (q[hh])
hh++;
}
while (hh <= tt && a[i] <= a[q[tt]])
tt++;
q[++tt] = i;
if (i >= k - 1) {
cout << a[q[hh]];
cout << " ";
}
}
puts("");
hh = 0, tt = -1;
for (int i = 0; i < n; ++i) {
if (hh <= tt && i - k + 1 < 0) {
if (q[hh])
hh++;
}
while (hh <= tt && a[i] >= a[q[tt]])
tt--;
q[++tt] = i;
if (i >= k - 1) {
cout << a[q[hh]];
cout << " ";
}
}
return 0;

}

代码说明:

  • 包含头文件 #include

    用于标准输入输出

  • 使用 namespace std; 用于简化代码编写

  • 定义常量N为1000010,数组a和q分别用于存储元素和队列操作

  • 函数main()的实现步骤:

    • 初始化hh为0,tt为-1,用于遍历和队列头尾指针
    • 读取n和k值
    • 读取n个整数存入数组a
    • 遍历读取的数组a,执行队列操作
      • 头指针hh和尾指针tt的逻辑操作
      • 输出符合条件的数值
    • 输出换行字符
    • 再次初始化hh和tt进行第二次遍历
    • 输出结果
  • 主函数返回0,程序结束

  • 该代码模拟了双向队列的基本操作,适用于需要先进后进处理的场景。

    上一篇:kmp算法
    下一篇:双向链表

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月21日 08时21分08秒