掌握排队逻辑,C语言编程轻松入门

发布时间:2025-05-24 21:21:43

引言

排队逻辑是一般生活中罕见的景象,如银行排队、超市结账等。在打算机科学中,行列是一种重要的数据构造,用于实现排队逻辑。本文将介绍行列的基本不雅点、C言语实现以及怎样利用行列处理现实成绩。

行列的基本不雅点

行列的定义

行列(Queue)是一种进步先出(FIFO)的数据构造,它容许在表的一端拔出元素(称为队尾),在另一端删除元素(称为队头)。

行列的存储方法

行列可能利用数组或链表来实现。

  • 数组实现:利用牢固大小的数组存储行列元素,经由过程首尾指针把持行列的入队跟出队操纵。
  • 链表实现:利用链表存储行列元素,每个节点包含数据跟指向下一个节点的指针。

C言语实现行列

数组实现

以下是一个利用数组实现的行列示例:

#define MAX_SIZE 10

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

void InitQueue(Queue *q) {
    q->front = q->rear = 0;
}

int IsEmpty(Queue *q) {
    return q->front == q->rear;
}

int IsFull(Queue *q) {
    return (q->rear + 1) % MAX_SIZE == q->front;
}

void EnQueue(Queue *q, int value) {
    if (IsFull(q)) {
        printf("Queue is full.\n");
        return;
    }
    q->data[q->rear] = value;
    q->rear = (q->rear + 1) % MAX_SIZE;
}

int DeQueue(Queue *q) {
    if (IsEmpty(q)) {
        printf("Queue is empty.\n");
        return -1;
    }
    int value = q->data[q->front];
    q->front = (q->front + 1) % MAX_SIZE;
    return value;
}

链表实现

以下是一个利用链表实现的行列示例:

typedef struct Node {
    int data;
    struct Node *next;
} Node;

typedef struct {
    Node *front;
    Node *rear;
} Queue;

void InitQueue(Queue *q) {
    q->front = q->rear = NULL;
}

int IsEmpty(Queue *q) {
    return q->front == NULL;
}

void EnQueue(Queue *q, int value) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    if (IsEmpty(q)) {
        q->front = q->rear = newNode;
    } else {
        q->rear->next = newNode;
        q->rear = newNode;
    }
}

int DeQueue(Queue *q) {
    if (IsEmpty(q)) {
        printf("Queue is empty.\n");
        return -1;
    }
    Node *temp = q->front;
    int value = temp->data;
    q->front = q->front->next;
    free(temp);
    return value;
}

利用行列处理现实成绩

以下是一个利用行列实现银行排队体系的示例:

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

#define MAX_SIZE 10

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

void InitQueue(Queue *q) {
    q->front = q->rear = 0;
}

int IsEmpty(Queue *q) {
    return q->front == q->rear;
}

int IsFull(Queue *q) {
    return (q->rear + 1) % MAX_SIZE == q->front;
}

void EnQueue(Queue *q, int value) {
    if (IsFull(q)) {
        printf("Queue is full.\n");
        return;
    }
    q->data[q->rear] = value;
    q->rear = (q->rear + 1) % MAX_SIZE;
}

int DeQueue(Queue *q) {
    if (IsEmpty(q)) {
        printf("Queue is empty.\n");
        return -1;
    }
    int value = q->data[q->front];
    q->front = (q->front + 1) % MAX_SIZE;
    return value;
}

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

    EnQueue(&queue, 1);
    EnQueue(&queue, 2);
    EnQueue(&queue, 3);

    printf("DeQueue: %d\n", DeQueue(&queue));
    printf("DeQueue: %d\n", DeQueue(&queue));

    return 0;
}

总结

本文介绍了行列的基本不雅点、C言语实现以及怎样利用行列处理现实成绩。经由过程进修行列,可能帮助你更好地懂得数据构造跟编程头脑,为后续进修其他数据构造跟算法打下基本。