队列—学习

news/2025/2/4 2:27:48 标签: 算法, c++, 数据结构, 蓝桥杯, 学习

1. 手写队列的实现

使用数组实现队列是一种常见的方法。队列的基本操作包括入队(enqueue)和出队(dequeue)。队列的头部和尾部分别用 headtail 指针表示。

代码实现
const int N = 10000;  // 定义队列容量,确保够用
int que[N];           // 队列,用数组模拟
int head = 0;         // head始终指向队头。que[head]是队头。开始时队列为空,head = 0
int tail = -1;        // tail始终指向队尾。que[tail]是队尾。开始时队列为空,tail = -1
操作
  • 入队que[++tail] = data; 先将 tail 指针加1,然后将数据 data 放入队列。

  • 出队head++;head 指针加1,表示队头元素出队。

  • 读队头que[head]; 读取队头元素。

2. 数组溢出问题

如果队列中的数据过多,tail 超过数组容量 N,会导致数组溢出。为了避免这个问题,可以使用循环队列。

3. 约瑟夫问题的实现

约瑟夫问题可以通过队列来模拟报数过程。以下是实现代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 10000; 
int que[N];
int head = 0, tail = -1;

int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        que[++tail] = i;  // 初始化队列,将所有人入队
    }

    while ((tail - head + 1) != 0) {  // 队列不为空
        for (int i = 1; i < m; i++) {  // 报数,将前m-1个人重新入队
            que[++tail] = que[head];
            head++;
        }
        cout << que[head] << " ";  // 输出第m个人
        head++;  // 第m个人出队
    }
    cout << endl;
    return 0;
}

4. 循环队列

为了避免数组溢出,可以使用循环队列。循环队列通过取模运算实现队列的循环使用。

循环队列的实现

5. 队列的查找问题

队列是一种线性数据结构,查找某个元素需要从头到尾逐个查找,时间复杂度为 O(n)。如果需要频繁查找元素,可以考虑使用其他数据结构,如哈希表或平衡树。


http://www.niftyadmin.cn/n/5841168.html

相关文章

kamailio-kamctl monitor解释

这段输出是 Kamailio 服务器的运行时信息和统计数据的摘要。以下是对每个部分的详细解释&#xff1a; 1. Kamailio Runtime Details cycle #: 3: 表示 Kamailio 的主循环已经运行了 3 个周期。Kamailio 是一个事件驱动的服务器&#xff0c;主循环用于处理事件和请求。if const…

【DeepSeek】本地快速搭建多模态理解和文生图 Janus-Pro-7B模型

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 博客内容主要围绕&#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 本地快速搭建多模态理解和文生图 Janus-Pro-7B模型一、创建运…

【FreeRTOS 教程 六】二进制信号量与计数信号量

目录 一、FreeRTOS 二进制信号量&#xff1a; &#xff08;1&#xff09;二进制信号量作用&#xff1a; &#xff08;2&#xff09;二进制信号量与互斥锁的区别&#xff1a; &#xff08;3&#xff09;信号量阻塞时间&#xff1a; &#xff08;4&#xff09;信号量的获取与…

【小白学AI系列】NLP 核心知识点(五)Transformer介绍

Transformer Transformer 是一种基于自注意力机制&#xff08;Self-Attention Mechanism&#xff09;的深度学习模型&#xff0c;首次由 Vaswani 等人于 2017 年在论文《Attention is All You Need》中提出。与 RNN 和 LSTM 不同&#xff0c;Transformer 不需要依靠序列顺序进…

自然语言处理-词嵌入 (Word Embeddings)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 词嵌入&#xff08;Word Embedding&#xff09;是一种将单词或短语映射到高维向量空间的技术&#xff0c;使其能够以数学方式表示单词之间的关系。词嵌入能够捕捉语义信息&#xff0c;使得相似的词在向量空间中具有…

踏入编程世界的第一个博客

我&#xff0c;一个双非一本大一新生&#xff0c;普通的不能再普通了&#xff0c;面对宏伟庞大的计算机世界仍显得举手无措&#xff0c;我自以为自身仍有些许骨气&#xff0c;不想普普通通&#xff0c;甚是浑浑噩噩的度过四年大学&#xff0c;经历了高考的打击&#xff0c;双非…

Hot100之图论

200岛屿数量 题目 思路解析 把访问过的格子插上棋子 思想是先污染再治理&#xff0c;我们有一个inArea&#xff08;&#xff09;函数&#xff0c;是判断是否出界了 我们先dfs&#xff08;&#xff09;放各个方向遍历&#xff0c;然后我们再把这个位置标为0 我们岛屿是连着…

Linux环境下的Java项目部署技巧:环境安装

安装 JDK&#xff1a; 第上传 jdk 压缩安装包到服务器 将压缩安装包解压缩&#xff1a; tar -xvf jdk-8uXXX-linux-x64.tar.gz 配置环境变量&#xff1a; 编辑 /etc/profile 文件&#xff0c;在文件末尾添加以下内容&#xff1a; export JAVA_HOME/path/to/jdk //JAVA_HOME…