legongju.com
我们一直在努力
2025-01-12 02:56 | 星期天

c语言列队怎样实现先进先出

在C语言中,实现队列的先进先出(FIFO)可以通过结构体、数组和链表三种数据结构来实现。这里我将分别介绍这三种方法:

  1. 使用结构体实现队列:
#include 
#include 

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

Queue* createQueue(int capacity) {
    Queue* queue = (Queue*)malloc(sizeof(Queue));
    queue->capacity = capacity;
    queue->front = queue->size = 0;
    queue->rear = capacity - 1;
    queue->data = https://www.yisu.com/ask/(int*)malloc(queue->capacity * sizeof(int));
    return queue;
}

int isFull(Queue* queue) {
    return (queue->size == queue->capacity);
}

int isEmpty(Queue* queue) {
    return (queue->size == 0);
}

void enqueue(Queue* queue, int item) {
    if (isFull(queue))
        return;
    queue->rear = (queue->rear + 1) % queue->capacity;
    queue->data[queue->rear] = item;
    queue->size = queue->size + 1;
}

int dequeue(Queue* queue) {
    if (isEmpty(queue))
        return -1;
    int item = queue->data[queue->front];
    queue->front = (queue->front + 1) % queue->capacity;
    queue->size = queue->size - 1;
    return item;
}

int main() {
    Queue* queue = createQueue(5);
    enqueue(queue, 10);
    enqueue(queue, 20);
    enqueue(queue, 30);
    enqueue(queue, 40);
    enqueue(queue, 50);

    while (!isEmpty(queue)) {
        printf("%d ", dequeue(queue));
    }

    free(queue->data);
    free(queue);
    return 0;
}
  1. 使用数组实现队列:
#include 
#include 

typedef struct {
    int *array;
    int front;
    int rear;
    int size;
    int capacity;
} QueueArray;

QueueArray* createQueueArray(int capacity) {
    QueueArray* queue = (QueueArray*)malloc(sizeof(QueueArray));
    queue->capacity = capacity;
    queue->front = queue->size = 0;
    queue->rear = capacity - 1;
    queue->array = (int*)malloc(queue->capacity * sizeof(int));
    return queue;
}

int isFull(QueueArray* queue) {
    return (queue->size == queue->capacity);
}

int isEmpty(QueueArray* queue) {
    return (queue->size == 0);
}

void enqueue(QueueArray* queue, int item) {
    if (isFull(queue))
        return;
    queue->rear = (queue->rear + 1) % queue->capacity;
    queue->array[queue->rear] = item;
    queue->size = queue->size + 1;
}

int dequeue(QueueArray* queue) {
    if (isEmpty(queue))
        return -1;
    int item = queue->array[queue->front];
    queue->front = (queue->front + 1) % queue->capacity;
    queue->size = queue->size - 1;
    return item;
}

int main() {
    QueueArray* queue = createQueueArray(5);
    enqueue(queue, 10);
    enqueue(queue, 20);
    enqueue(queue, 30);
    enqueue(queue, 40);
    enqueue(queue, 50);

    while (!isEmpty(queue)) {
        printf("%d ", dequeue(queue));
    }

    free(queue->array);
    free(queue);
    return 0;
}
  1. 使用链表实现队列:
#include 
#include 

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

typedef struct Queue {
    Node* front;
    Node* rear;
    int size;
} QueueLinkedList;

QueueLinkedList* createQueue() {
    QueueLinkedList* queue = (QueueLinkedList*)malloc(sizeof(QueueLinkedList));
    queue->front = queue->rear = NULL;
    queue->size = 0;
    return queue;
}

void enqueue(QueueLinkedList* queue, int item) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = https://www.yisu.com/ask/item;>next = NULL;

    if (queue->rear == NULL) {
        queue->front = queue->rear = newNode;
        return;
    }

    queue->rear->next = newNode;
    queue->rear = newNode;
}

int dequeue(QueueLinkedList* queue) {
    if (queue->front == NULL)
        return -1;

    Node* temp = queue->front;
    int item = temp->data;
    queue->front = queue->front->next;

    if (queue->front == NULL)
        queue->rear = NULL;

    free(temp);
    queue->size = queue->size - 1;
    return item;
}

int main() {
    QueueLinkedList* queue = createQueue();
    enqueue(queue, 10);
    enqueue(queue, 20);
    enqueue(queue, 30);
    enqueue(queue, 40);
    enqueue(queue, 50);

    while (!isEmpty(queue)) {
        printf("%d ", dequeue(queue));
    }

    return 0;
}

以上三种方法都可以实现队列的先进先出(FIFO)。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/61756.html

相关推荐

  • c语言怎么查找文件中的字符串

    c语言怎么查找文件中的字符串

    在C语言中,要查找文件中的字符串,可以使用以下步骤: 包含必要的头文件: #include
    #include 打开文件并进行错误检查: FILE *file = fopen("filename.tx...

  • c语言电子时钟程序怎么实现

    c语言电子时钟程序怎么实现

    在C语言中,实现一个简单的电子时钟程序需要使用time.h库。以下是一个简单的示例代码:
    #include
    #include int main() { while (1) { time_t currentT...

  • c语言如何遍历二叉树

    c语言如何遍历二叉树

    在C语言中,遍历二叉树有多种方法,包括前序遍历、中序遍历和后序遍历。这里给出一个简单的例子来说明如何实现这三种遍历方法。
    首先,我们需要定义一个二叉...

  • c语言的指针有什么用

    c语言的指针有什么用

    C语言中的指针具有多种用途,主要包括以下几点: 动态内存分配:通过指针,可以在程序运行时动态地分配和释放内存。这使得程序能够根据需要灵活地管理内存资源。...

  • c语言swtich有何学习资源

    c语言swtich有何学习资源

    C语言中的switch语句是一种多路选择结构,它允许根据一个表达式的值来选择执行不同的代码块。以下是一些学习资源,可以帮助你掌握C语言中的switch语句: 书籍: ...

  • c语言swtich能进行调试吗

    c语言swtich能进行调试吗

    C语言中的switch语句本身不能进行调试。switch语句是C语言中的一个控制结构,用于根据变量的值执行不同的代码块。虽然它可以用于条件判断,但它并不包含任何调试...

  • c语言swtich如何提高代码质量

    c语言swtich如何提高代码质量

    在C语言中,使用switch语句可以提高代码的可读性和可维护性。以下是一些建议,可以帮助你提高使用switch语句的代码质量: 使用枚举类型:将switch语句中的常量值...

  • c语言数集如何进行数值积分

    c语言数集如何进行数值积分

    在C语言中,进行数值积分的方法有很多种,其中一些常见的方法包括辛普森法则(Simpson’s Rule)、梯形法则(Trapezoidal Rule)和布伦特-萨尔明法则(Brent-Sal...