队列源码全解析:从入门到精通
队列的基本概念
队列是一种先进先出(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


