当前位置: 首页 > article >正文

队列—学习

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.kler.cn/a/530246.html

相关文章:

  • 书生大模型实战营7
  • LeetCode:121.买卖股票的最佳时机1
  • TensorFlow 简单的二分类神经网络的训练和应用流程
  • 《 C++ 点滴漫谈: 二十五 》空指针,隐秘而危险的杀手:程序崩溃的真凶就在你眼前!
  • [Linux]从零开始的STM32MP157 U-Boot移植
  • x86-64数据传输指令
  • 基于RAG的知识库问答系统
  • DedeBIZ资源系统源码 高仿XDGAME模板源码
  • 流处理 CompletableFuture
  • 马铃薯叶子病害检测数据集VOC+YOLO格式1332张9类别
  • 基于SpringBoot的青年公寓服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • Flutter Raw Image Provider
  • Python 中 `finally` 的执行时机与 `return` 的微妙关系
  • SD存储卡功能特性解析
  • 【C++语言】卡码网语言基础课系列----11. 句子缩写
  • DeepSeek让英伟达狂跌三年?
  • openEuler系统磁盘管理方法
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror_init()函数
  • OpenAI发布o3-mini:免费推理模型,DeepSeek引发的反思
  • MySQL 基础学习(4):条件查询(WHERE)更新操作(UPDATE)删除操作(DELETE)分页查询(LIMIT)
  • 算法随笔_36: 复写零
  • 面向初学者的卷积神经网络_卷积神经网络好学吗
  • C++泛型编程指南03-CTAD
  • shell编程(1)——shell介绍
  • Hive分区和分桶
  • unity中的动画混合树