队列的实现与应用

队列的实现与应用

在这里插入图片描述

队列(Queue)是一种常见的数据结构,遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被移出。在程序设计中,队列常用于实现任务调度、缓冲区管理等场景。本文将介绍如何使用C语言实现一个基于数组的队列,并展示其基本操作和应用示例。

代码实现

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

#define TYPE int

typedef struct ArrayQueue
{
    TYPE *ptr;
    size_t cap;
    size_t front;
    size_t rear;
} ArrayQueue;

// 创建队列
ArrayQueue *create_queue(size_t val)
{
    ArrayQueue *queue = malloc(sizeof(ArrayQueue));
    queue->ptr = malloc(sizeof(TYPE) * (val + 1));
    queue->cap = val + 1;
    queue->front = 0;
    queue->rear = 0;
    return queue;
}

// 队空判断
bool empty_queue(ArrayQueue *queue)
{
    return queue->front == queue->rear;
}

// 队满判断
bool full_array_queue(ArrayQueue *queue)
{
    return (queue->rear + 1) % queue->cap == queue->front;
}

// 入队操作
bool push_array_queue(ArrayQueue *queue, TYPE val)
{
    if (full_array_queue(queue))
        return false;
    queue->ptr[queue->rear] = val;
    queue->rear = (queue->rear + 1) % queue->cap;
    return true;
}

// 出队操作
bool pop_array_queue(ArrayQueue *queue)
{
    if (empty_queue(queue))
        return false;
    queue->front = (queue->front + 1) % queue->cap;
    return true;
}

// 获取队尾元素
TYPE tail_array_queue(ArrayQueue *queue)
{
    return queue->ptr[(queue->rear + queue->cap - 1) % queue->cap];
}

// 获取队头元素
TYPE head_array_queue(ArrayQueue *queue)
{
    return queue->ptr[queue->front];
}

// 获取队列中元素数量
int queue_num(ArrayQueue *queue)
{
    return (queue->rear - queue->front + queue->cap) % queue->cap;
}

// 销毁队列
void destroy_queue(ArrayQueue *queue)
{
    while (!empty_queue(queue))
        pop_array_queue(queue);
    free(queue->ptr);
    free(queue);
    queue->ptr = NULL;
    queue = NULL;
}

int main(int argc, const char *argv[])
{
    ArrayQueue *queue = create_queue(10);

    for (int i = 0; i < 10; i++)
    {
        push_array_queue(queue, i);
        printf("%d ", tail_array_queue(queue));
    }
    
    pop_array_queue(queue);
    printf("\n%d ", head_array_queue(queue));
    
    destroy_queue(queue);
    
    return 0;

}

队列操作说明

  • create_queue(size_t val) :创建一个容量为 val 的队列,并返回指向队列的指针。
  • push_array_queue(ArrayQueue *queue, TYPE val) :将元素 val 入队。
  • pop_array_queue(ArrayQueue *queue) :将队头元素出队。
  • tail_array_queue(ArrayQueue *queue) :获取队尾元素。
  • head_array_queue(ArrayQueue *queue) :获取队头元素。
  • queue_num(ArrayQueue *queue) :获取队列中元素的数量。
  • destroy_queue(ArrayQueue *queue) :销毁队列,释放内存。

应用示例

在示例代码中,我们创建了一个容量为10的队列,并进行了入队和出队操作。最后展示了队头元素的值。通过这个简单的示例,展示了队列的基本操作和使用方法。

结语

队列是一种重要的数据结构,在实际编程中具有广泛的应用。通过本文的介绍,希望读者能够更加深入地了解队列的实现和应用。如果您有任何疑问或建议,请随时联系我。

希望本文对您有所帮助,谢谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值