队列源码全解析:从入门到精通

队列的基本概念

队列是一种先进先出(FIFO)的线性数据结构,只允许在表的前端进行删除操作,在表的后端进行插入操作。队列的应用场景广泛,如任务调度、消息队列等。

队列的初始化

队列的初始化通常包括创建一个空队列,并设置队列的头指针和尾指针。以下是使用C语言实现的队列初始化代码:

typedef struct {
    int *data;
    int front;
    int rear;
    int size;
} Queue;

Queue* initQueue(int size) {
    Queue *q = (Queue*)malloc(sizeof(Queue));
    q->data = (int*)malloc(size * sizeof(int));
    q->front = -1;
    q->rear = -1;
    q->size = size;
    return q;
}

入队操作

入队操作是将元素添加到队列的尾部。如果队列已满,则无法继续添加元素。以下是入队操作的实现:

int enqueue(Queue *q, int value) {
    if (q->rear == q->size - 1) {
        printf("Queue is full\n");
        return -1;
    }
    if (q->front == -1) {
        q->front = 0;
    }
    q->rear++;
    q->data[q->rear] = value;
    return 0;
}

出队操作

出队操作是从队列的头部移除元素。如果队列为空,则无法进行出队操作。以下是出队操作的实现:

int dequeue(Queue *q) {
    if (q->front == -1 || q->front > q->rear) {
        printf("Queue is empty\n");
        return -1;
    }
    int value = q->data[q->front];
    q->front++;
    if (q->front > q->rear) {
        q->front = q->rear = -1;
    }
    return value;
}

队列的源码全解析

以下是一个完整的队列实现,包括初始化、入队、出队以及队列状态的检查:

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

typedef struct {
    int *data;
    int front;
    int rear;
    int size;
} Queue;

Queue* initQueue(int size) {
    Queue *q = (Queue*)malloc(sizeof(Queue));
    q->data = (int*)malloc(size * sizeof(int));
    q->front = -1;
    q->rear = -1;
    q->size = size;
    return q;
}

int isFull(Queue *q) {
    return q->rear == q->size - 1;
}

int isEmpty(Queue *q) {
    return q->front == -1 || q->front > q->rear;
}

int enqueue(Queue *q, int value) {
    if (isFull(q)) {
        printf("Queue is full\n");
        return -1;
    }
    if (isEmpty(q)) {
        q->front = 0;
    }
    q->rear++;
    q->data[q->rear] = value;
    return 0;
}

int dequeue(Queue *q) {
    if (isEmpty(q)) {
        printf("Queue is empty\n");
        return -1;
    }
    int value = q->data[q->front];
    q->front++;
    if (q->front > q->rear) {
        q->front = q->rear = -1;
    }
    return value;
}

void printQueue(Queue *q) {
    if (isEmpty(q)) {
        printf("Queue is empty\n");
        return;
    }
    for (int i = q->front; i <= q->rear; i++) {
        printf("%d ", q->data[i]);
    }
    printf("\n");
}

int main() {
    Queue *q = initQueue(5);
    enqueue(q, 1);
    enqueue(q, 2);
    enqueue(q, 3);
    printQueue(q);
    dequeue(q);
    printQueue(q);
    return 0;
}

队列的应用场景

队列在计算机科学中有广泛的应用,如操作系统中的进程调度、网络中的数据包传输、打印任务队列等。理解队列的基本操作和实现原理,有助于在实际开发中更好地利用这一数据结构。

BbS.okane428.info/PoSt/1121_047401.HtM
BbS.okane429.info/PoSt/1121_115100.HtM
BbS.okane430.info/PoSt/1121_492697.HtM
BbS.okane431.info/PoSt/1121_238340.HtM
BbS.okane432.info/PoSt/1121_279463.HtM
BbS.okane433.info/PoSt/1121_103673.HtM
BbS.okane434.info/PoSt/1121_190862.HtM
BbS.okane435.info/PoSt/1121_860607.HtM
BbS.okane436.info/PoSt/1121_709807.HtM
BbS.okane437.info/PoSt/1121_347250.HtM
BbS.okane428.info/PoSt/1121_406631.HtM
BbS.okane429.info/PoSt/1121_267239.HtM
BbS.okane430.info/PoSt/1121_085693.HtM
BbS.okane431.info/PoSt/1121_953686.HtM
BbS.okane432.info/PoSt/1121_992181.HtM
BbS.okane433.info/PoSt/1121_703263.HtM
BbS.okane434.info/PoSt/1121_712591.HtM
BbS.okane435.info/PoSt/1121_026094.HtM
BbS.okane436.info/PoSt/1121_118685.HtM
BbS.okane437.info/PoSt/1121_582873.HtM
BbS.okane438.info/PoSt/1121_086014.HtM
BbS.okane439.info/PoSt/1121_505461.HtM
BbS.okane440.info/PoSt/1121_322149.HtM
BbS.okane441.info/PoSt/1121_685178.HtM
BbS.okane442.info/PoSt/1121_000671.HtM
BbS.okane443.info/PoSt/1121_729268.HtM
BbS.okane444.info/PoSt/1121_341599.HtM
BbS.okane445.info/PoSt/1121_304760.HtM
BbS.okane446.info/PoSt/1121_873852.HtM
BbS.okane447.info/PoSt/1121_963130.HtM
BbS.okane438.info/PoSt/1121_931468.HtM
BbS.okane439.info/PoSt/1121_304641.HtM
BbS.okane440.info/PoSt/1121_696929.HtM
BbS.okane441.info/PoSt/1121_449837.HtM
BbS.okane442.info/PoSt/1121_043865.HtM
BbS.okane443.info/PoSt/1121_960726.HtM
BbS.okane444.info/PoSt/1121_358721.HtM
BbS.okane445.info/PoSt/1121_700462.HtM
BbS.okane446.info/PoSt/1121_363337.HtM
BbS.okane447.info/PoSt/1121_732259.HtM
BbS.okane438.info/PoSt/1121_007021.HtM
BbS.okane439.info/PoSt/1121_828827.HtM
BbS.okane440.info/PoSt/1121_327886.HtM
BbS.okane441.info/PoSt/1121_546391.HtM
BbS.okane442.info/PoSt/1121_763516.HtM
BbS.okane443.info/PoSt/1121_289478.HtM
BbS.okane444.info/PoSt/1121_839840.HtM
BbS.okane445.info/PoSt/1121_973111.HtM
BbS.okane446.info/PoSt/1121_623711.HtM
BbS.okane447.info/PoSt/1121_323478.HtM
BbS.okane438.info/PoSt/1121_497772.HtM
BbS.okane439.info/PoSt/1121_784850.HtM
BbS.okane440.info/PoSt/1121_320828.HtM
BbS.okane441.info/PoSt/1121_150030.HtM
BbS.okane442.info/PoSt/1121_450892.HtM
BbS.okane443.info/PoSt/1121_389768.HtM
BbS.okane444.info/PoSt/1121_891394.HtM
BbS.okane445.info/PoSt/1121_244229.HtM
BbS.okane446.info/PoSt/1121_401279.HtM
BbS.okane447.info/PoSt/1121_034041.HtM
BbS.okane438.info/PoSt/1121_413525.HtM
BbS.okane439.info/PoSt/1121_285123.HtM
BbS.okane440.info/PoSt/1121_548335.HtM
BbS.okane441.info/PoSt/1121_931102.HtM
BbS.okane442.info/PoSt/1121_744332.HtM
BbS.okane443.info/PoSt/1121_678872.HtM
BbS.okane444.info/PoSt/1121_548268.HtM
BbS.okane445.info/PoSt/1121_828522.HtM
BbS.okane446.info/PoSt/1121_878202.HtM
BbS.okane447.info/PoSt/1121_772086.HtM
BbS.okane438.info/PoSt/1121_946310.HtM
BbS.okane439.info/PoSt/1121_249802.HtM
BbS.okane440.info/PoSt/1121_151616.HtM
BbS.okane441.info/PoSt/1121_996405.HtM
BbS.okane442.info/PoSt/1121_834440.HtM
BbS.okane443.info/PoSt/1121_721615.HtM
BbS.okane444.info/PoSt/1121_267336.HtM
BbS.okane445.info/PoSt/1121_933269.HtM
BbS.okane446.info/PoSt/1121_226557.HtM
BbS.okane447.info/PoSt/1121_336083.HtM

#牛客AI配图神器#

全部评论

相关推荐

10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务