【C语言入门必备】轻松创建与操作队列的实用指南

发布时间:2025-05-24 21:25:54

行列是一种进步先出(FIFO)的数据构造,它在一般生活中有很多利用,如打印行列、任务调理等。在C言语中,行列可能经由过程多种方法实现,比方数组、链表跟栈。本指南将重点介绍怎样利用数组来创建跟操纵行列。

行列的基本操纵

在实现行列之前,我们须要懂得以下基本操纵:

  • 创建行列:初始化行列的构造,包含行列的大小跟行列元素的存储。
  • 入行列(Enqueue):在行列的末端增加一个元素。
  • 出行列(Dequeue):从行列的头部移除一个元素。
  • 行列能否为空:检查行列中能否不元素。
  • 行列能否已满:检查行列能否曾经达到其最大年夜容量。

利用数组实现行列

以下是利用数组实现行列的基本步调:

1. 定义行列构造

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10

typedef struct {
    int data[MAXSIZE];
    int front;
    int rear;
    int itemCount;
} Queue;

2. 创建行列

void createQueue(Queue *q) {
    q->front = 0;
    q->rear = -1;
    q->itemCount = 0;
}

3. 入行列

int enqueue(Queue *q, int data) {
    if (q->itemCount >= MAXSIZE) {
        printf("Queue is full, cannot insert element.\n");
        return -1;
    }
    if (q->rear == MAXSIZE - 1) {
        q->rear = 0;
    }
    q->data[q->rear] = data;
    q->rear++;
    q->itemCount++;
    return 0;
}

4. 出行列

int dequeue(Queue *q, int *data) {
    if (q->itemCount <= 0) {
        printf("Queue is empty, cannot delete element.\n");
        return -1;
    }
    *data = q->data[q->front];
    if (q->front == MAXSIZE - 1) {
        q->front = 0;
    }
    q->front++;
    q->itemCount--;
    return 0;
}

5. 检查行列能否为空

int isEmpty(Queue *q) {
    return q->itemCount == 0;
}

6. 检查行列能否已满

int isFull(Queue *q) {
    return q->itemCount == MAXSIZE;
}

实例代码

以下是一个完全的行列示例代码:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10

typedef struct {
    int data[MAXSIZE];
    int front;
    int rear;
    int itemCount;
} Queue;

void createQueue(Queue *q) {
    q->front = 0;
    q->rear = -1;
    q->itemCount = 0;
}

int enqueue(Queue *q, int data) {
    if (q->itemCount >= MAXSIZE) {
        printf("Queue is full, cannot insert element.\n");
        return -1;
    }
    if (q->rear == MAXSIZE - 1) {
        q->rear = 0;
    }
    q->data[q->rear] = data;
    q->rear++;
    q->itemCount++;
    return 0;
}

int dequeue(Queue *q, int *data) {
    if (q->itemCount <= 0) {
        printf("Queue is empty, cannot delete element.\n");
        return -1;
    }
    *data = q->data[q->front];
    if (q->front == MAXSIZE - 1) {
        q->front = 0;
    }
    q->front++;
    q->itemCount--;
    return 0;
}

int isEmpty(Queue *q) {
    return q->itemCount == 0;
}

int isFull(Queue *q) {
    return q->itemCount == MAXSIZE;
}

int main() {
    Queue q;
    createQueue(&q);

    enqueue(&q, 10);
    enqueue(&q, 20);
    enqueue(&q, 30);

    int data;
    while (!isEmpty(&q)) {
        dequeue(&q, &data);
        printf("Dequeued: %d\n", data);
    }

    return 0;
}

经由过程以上指南跟示例代码,你可能轻松地开端利用C言语创建跟操纵行列。跟着经验的积聚,你可能实验更高等的数据构造跟算法。