首页 > 其他分享 >队列

队列

时间:2023-11-15 22:35:50浏览次数:26  
标签:QNode 队列 queue front NULL data rear

#include <stdio.h>
#include <stdlib.h>

// 队列结点的定义
typedef struct QNode {
    int data;
    struct QNode* next;
} QNode;

// 链式队列的定义
typedef struct {
    QNode* front; // 队头指针
    QNode* rear;  // 队尾指针
} LinkedQueue;

// 初始化链式队列
void InitQueue(LinkedQueue* queue) {
    queue->front = queue->rear = NULL;
}

// 入队
void Enqueue(LinkedQueue* queue, int data) {
    QNode* newNode = (QNode*)malloc(sizeof(QNode));
    if (newNode == NULL) {
        printf("内存分配失败\n");
        exit(EXIT_FAILURE);
    }
    newNode->data = data;
    newNode->next = NULL;

    if (queue->rear == NULL) {
        // 空队列,插入第一个元素
        queue->front = queue->rear = newNode;
    }
    else {
        // 队尾插入新结点
        queue->rear->next = newNode;
        queue->rear = newNode;
    }
}

// 出队
int Dequeue(LinkedQueue& Q) {
    if (Q.front == NULL) {
        printf("队列为空,无法出队\n");
        exit(EXIT_FAILURE);
    }

    QNode* p = Q.front;
    int data = p->data;

    Q.front = p->next;
    free(p);

    // 如果出队后队列为空,更新队尾指针
    if (Q.front == NULL) {
        Q.rear = NULL;
    }

    return data;
}

int main() {
    LinkedQueue queue;
    InitQueue(&queue);

    // 入队操作
    Enqueue(&queue, 1);
    Enqueue(&queue, 2);
    Enqueue(&queue, 3);

    // 出队操作
    int data = Dequeue(queue);
    printf("出队元素:%d\n", data);

    return 0;
}

 

标签:QNode,队列,queue,front,NULL,data,rear
From: https://www.cnblogs.com/muzhaodi/p/17834992.html

相关文章

  • 循环队列
    一、普通队列(顺序存储结构)说明:rear指向队尾元素,front指向对头元素的下一个元素。i.判断元素个数:number=rear-front;ii.判断队空:rear==frontiii.插入元素:rear++;iiii.删除元素:front++;iiiii.队满操作:rear==length-1;2.2遇到假溢出问题如严蔚敏老师数据结构书中,写道,每次插......
  • 代码随想训练营第三十五天打卡(Python)| 860.柠檬水找零、406.根据身高重建队列、452. 用
    860.柠檬水找零classSolution:deflemonadeChange(self,bills:List[int])->bool:five,ten,twenty=0,0,0forbillinbills:ifbill==5:five+=1elifbill==10:iffive......
  • 灵活、可用、高扩展,EasyMR 带来全新 Yarn 的队列管理功能及可视化配置
    YARN(YetAnotherResourceNegotiator)是Hadoop生态系统中的资源调度器,主要用于资源管理和作业调度。YARN自身具备队列管理功能,通过对YARN资源队列进行配置和管理,实现集群资源的分配,以满足不同应用和用户的需求。YARN的引入为集群在利用率、资源统一管理和数据共享等方面带来......
  • Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmedia
    下列关于Vue的描述错误的是()A当给某个组件修改某个值时,该组件不会立即重新渲染BVue内部使用原生Promise.then、MutationObserver和setImmediate实现异步队列,不会采用setTimeout(fn,0)C$nextTick()返回一个Promise对象D$nextTick()可以配合async/await使用正确答案:B官......
  • C实现循环队列
    1.循环队列的基本模型1.1此模型采用的队列判空条件是rear==front为真1.2此模型采用的队列已满条件是(rear+1)%maxsize==front为真,因此有一个数组单元(也就是front指向的数组单元)不可使用1.3可以在队列结点加一个成员表示最近一次对队列的操作为入队操作或者出队操作,这样......
  • 单调队列
    acwing154滑动窗口,单调队列q存的是下标,真正的值需要再套一个a数组1#include<iostream>2usingnamespacestd;34constintN=1e6+10;56intn,k;7inta[N],q[N];//q代表单调队列89intmain()10{11scanf("%d%d",&n,&k);12for(in......
  • 高效利用队列的空间
      大家都知道队列是可以用数组来模拟的,可以先开辟一段定长的数组空间,然后分别使用两个变量head和tail来代指队列的头和尾,从而维护整个队列,相信到这里大家都比较熟悉。不过这种做法是有弊端的,比如说下图这种情况  假设经过不断地增删元素,Head和Tail已经来到了数组最后两个位......
  • 【chatgpt问答记录】双端队列、栈和函数调用栈
    collections.deque和queue.Queue的区别Q:collections.deque()跟queue.Queue()有什么区别?collections.deque()和queue.Queue是两种不同的数据结构,它们有一些区别:实现方式:collections.deque()是Python标准库提供的双端队列数据结构,使用双向链表实现,具有高效的在两端进行......
  • 数据结构-队列
    一、概念1、队列的定义队列是仅限在一端进行插入,另一端进行删除的线性表。队列又被称为先进先出(FirstInFirstOut)的线性表,简称FIFO。2、队首允许进行元素删除的一端称为队首3、队尾允许进行元素插入的一端称为队尾二、接口1、可写接口(1)数据入队队列的插入操作,叫做入队。它是......
  • 数组&队列&关联数组的总结
    定宽数组:可以直接赋值,也可以先声明再赋值其中还有多维数组intarray2[0:7][0:3];intarray3[8][4];//先个后位intascend[4]='{0,1,2,3};intdescend[5];descend='{4,3,2,1,0};descend[0:2]='{5,6,7};ascend='{4{8}};descend='{9,8,default:-1};数组的声明全在左......