首页 > 其他分享 >队列

队列

时间:2023-10-20 15:33:09浏览次数:25  
标签:head 队列 ++ int tail 指针

问:给定一串数字{0, 6, 3, 1, 7, 5, 8, 9, 2, 4},把第一个数字出队,将第二个数字放到最后;把第三个数字出队,将第四个数字放到最后;把第五个数字出队,第六个数字放到最后。以此类推,知道没有数字量,打印出所有删除的数字。

#include <stdio.h>
int main() {
    int q[101] = {0, 6, 3, 1, 7, 5, 8, 9, 2, 4}; // 初始化数组
    int head = 1, tail = 10; // 初始化头尾指针

    while (head < tail) {
        printf("%d ", q[head]); // 打印头指针指向的元素
        head++; // 移动头指针到下一个位置

        q[tail] = q[head]; // 将头指针指向的元素复制到尾指针指向的位置
        tail++; // 移动尾指针到下一个位置

        head++; // 移动头指针到下一个位置
    }

    getchar(); // 等待用户按下回车键
    getchar(); // 等待用户按下回车键
    return 0; // 返回程序结束标志
}

PS,将tail初始只指向在队列的下一个位置,为了避免和头指针重合。

通常,我们会定义结构体,将数组,head,tail放在外面,增加对队列的理解。

#include <stdio.h>

// 定义队列结构体
struct queue {
    int data[100];
    int head;
    int tail;
};

int main() {
    struct queue q;
    int i;
    
    q.head = 0; // 初始化队列头
    q.tail = 0; // 初始化队列尾

    // 从用户输入中填充队列
    for (i = 0; i < 9; i++) {
        scanf("%d", &q.data[q.tail]);
        q.tail++;
    }

    // 输出队列中的元素
    while (q.head < q.tail) {
        printf("%d ", q.data[q.head]);
        q.head++;

        // 移动数据以填充空出的位置,这可以减少数据复制操作
        if (q.head < q.tail) {
            q.data[q.tail] = q.data[q.head];
            q.tail++;
        }
    }

    getchar(); // 等待用户按下回车键
    getchar(); // 等待用户按下回车键
    return 0;  // 返回程序结束标志
}

标签:head,队列,++,int,tail,指针
From: https://www.cnblogs.com/yzx-sir/p/17777157.html

相关文章

  • Rabbitmq消息队列调优
     RabbitMQ每增加一个连接,Erlang都会给这个连接分配三个Erlang进程,每个进程都会分配一定大小内存空间,所以随着连接数的增长,内存和Erlang进程数呈现有规律的增长,所以RabbitMQ连接数的无限增大会压垮mq服务,导致RabbitMQ服务崩溃。 客户端与RabbitMQ建立的是长连接,而不是建立短连......
  • GIL全局解释器锁、互斥锁、线程队列、进程池和线程池的使用、多线程爬取网页、协程理
    进程和线程的比较进程的开销比线程的开销大很多进程之间的数据是隔离的,但是,线程之间的数据不隔离多个进程之间的线程数据不共享----->还是让进程通信(IPC)------->进程下的线程也通信了---->队列GIL全局解释器锁(重要理论)Python在设计之初就考虑到要在主循环中,同时只有一......
  • 栈和队列
    栈先进后出,后进现出限定仅在表的一端进行插入和删除操作的线性表操作初始化入栈出栈取值判断栈满栈空双栈共享顺序栈//顺序栈类模板template<classElemType>classSqStack{protected://数据成员: ElemType*elems; //元素存储空间 intmax......
  • c# Queue 队列的基本使用
    C#中的 Queue 是一种基于链表的先进先出(FIFO)数据结构。以下是一个简单的 Queue 实例:///<summary>///普通队列///</summary>publicvoidQueueShow(){//创建一个QueueQueue<string>queue=newQu......
  • 实验五 队列的基本操作及应用
    实验五队列的基本操作及应用作业要求:实验时间:第7、8周实验目的:掌握队列的初始化、判空、取队头元素、出队、入队、输出队列元素等基本操作实验要求:1、认真阅读和掌握教材上和本实验相关的算法。2、上机将链队列或循环队列的相关算法实现。3、实现下面实验内容要求的功能,并......
  • 用Java语言简单实现MQ消息队列服务
    大致的结构:一个消息队列大致的结构:消息处理中心Brokerpackagecom.tntxia;importjava.util.concurrent.ArrayBlockingQueue;/***消息处理中心*/publicclassBroker{//队列存储消息的最大数量privatefinalstaticintMAX_SIZE=3;//保存消息数据......
  • 队列queue
    队列queue(包含头文件queue)首先说说什么是queue,queue就像是一根管子,数据可以从管子尾部进入,然后从头部出来,不能倒车从尾部出来,并且数据只能从尾部进入,不能从头部进入1.队列的定义queue<队列内输入的数据类型,队列的容器类型>变量名;queue<int>s;//创建一个类型为int变量名......
  • 数据结构之队列(优先队列)
    概念优先队列(PriorityQueue)为一种不必遵守队列特性FIFO(先进先出)的有序线性表,其中每个元素都赋予一个优先级(Priority),加入元素时可任意加入,但有最高优先级者(HighestPriorityOutFirstHPOF)则最先输出。 Java在Java中,PriorityQueue类实现了这样的一种有序队列。PriorityQue......
  • 数据结构之队列(双向队列)
    概念双向队列(Double-endsQueues简称Dequeue)是一种前后2端都可以添加数据(入队)、移除(出队)数据的有序线性表。特点双向队列(Deque,全名DoubleEndedQueue)是一种具有两个指针的线性表,允许从两端都可以进行插入和删除操作即双向队列可以在任意一端进行元素的插入和删除操作,而单向队......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(3)队列管理
    4.队列管理队列,在一些系统中被称为消息队列,可以理解为信息中转站。是任务和任务,任务和中断之间可以互相读和写的一个共享空间。4.2队列的特征存储数据队列本质上是一个先进先出的缓冲区(FIFO),所以可以存储一定容量的数据。有两种方式可以实现FIFO队列:1.将发送给队列的数据复......