一般数组队列(具有伪溢出的队列)

 该队列中需要用到的函数和结构体声明:

#pragma once
#include <stdio.h>  
#include <stdlib.h>  
#include <stdbool.h>  
#include <assert.h>
// 定义队列中的元素类型  
typedef int Datatype;

// 定义队列结构体  
typedef struct Queue {
    Datatype* elements; // 指向队列元素的指针
    //数组下标
    int front;                 // 队列头部索引  
    int rear;                  // 队列尾部索引  
    //万金油参数
    int maxSize;             // 队列的容量  
    int curSize;             // 队列中元素的数量  
} Queue; 

// 初始化队列  
Queue* createQueue(int maxSize);

// 判断队列是否为空  
bool isEmpty(Queue* queue);

// 判断队列是否已满  
bool isFull(Queue* queue);

// 入队操作  
void enqueue(Queue* queue, Datatype element);

// 出队操作  
void dequeue(Queue* queue);

// 获取队列的前端元素  
Datatype peek(Queue* queue);

// 销毁队列  
void destroyQueue(Queue* queue);

函数实现:

Queue* createQueue(int maxSize)
{
    //创建队列内存
    Queue* newQueue = (Queue*)malloc(sizeof(Queue));
    assert(newQueue);
    //创建数据内存(注意该内存没有初始化)
    newQueue->elements = (Datatype*)malloc(maxSize * sizeof(Datatype));
    //初始化其余参数
    newQueue->front = 0;
    newQueue->rear = 0;
    newQueue->curSize = 0;
    newQueue->maxSize = maxSize;
    return newQueue;
}

bool isEmpty(Queue* queue)
{
    assert(queue);
    if (queue->curSize == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool isFull(Queue* queue)
{
    assert(queue);
    if (queue->curSize == queue->maxSize)
    {
        return true;
    }
    else
    {
        return false;
    }
}

//数据尾插
void enqueue(Queue* queue, Datatype element)
{
    if (isFull(queue))
    {
        printf("队满\n");
        return;
    }
    //如果没满,则向后放,然后++运算
    queue->elements[queue->rear] = element;
    queue->rear++;
    queue->curSize++;
}

//数据头删
void dequeue(Queue* queue)
{
    assert(queue);
    if (isEmpty(queue))
    {
        printf("队空\n");
        return;
    }
    //只需要对front进行++运算即可
    queue->front++;
    queue->curSize--;
}

Datatype peek(Queue* queue)
{
    assert(queue);
    return queue->elements[queue->front];
}

void destroyQueue(Queue* queue)
{
    free(queue->elements);
    free(queue);
}

说明:该队列不是循环队列,有数组溢出的风险。下面是循环队列的介绍:

循环队列:在循环队列中,当rear到达数组末尾时,它应该回到数组的起始位置。同样,front也应该在到达数组末尾时循环回起始位置。为了实现循环队列,需要在enqueuedequeue函数中处理rearfront的循环逻辑。

相关推荐

  1. 一般数组队列具有溢出队列

    2024-04-28 19:42:04       30 阅读
  2. 数组实现循环队列(新增一个空间)

    2024-04-28 19:42:04       66 阅读
  3. 数据结构 / 队列 / 循环队列 / 入队列和出队列

    2024-04-28 19:42:04       65 阅读
  4. 深入浅出队列:Python中数据驱动力

    2024-04-28 19:42:04       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 19:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 19:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 19:42:04       87 阅读
  4. Python语言-面向对象

    2024-04-28 19:42:04       96 阅读

热门阅读

  1. C程序调用C++函数,以及C++调用C函数

    2024-04-28 19:42:04       27 阅读
  2. IP地址的地理位置如何确定?

    2024-04-28 19:42:04       32 阅读
  3. js 下载音频的实现方式

    2024-04-28 19:42:04       27 阅读
  4. brew安装的软件在什么地方

    2024-04-28 19:42:04       32 阅读
  5. B+树(B+ Tree)

    2024-04-28 19:42:04       28 阅读
  6. web server apache tomcat11-14-CGI

    2024-04-28 19:42:04       32 阅读
  7. C#实战:图像清晰度增强介绍和案例实践

    2024-04-28 19:42:04       32 阅读
  8. windows10 安装iis 跑asp.net

    2024-04-28 19:42:04       35 阅读
  9. AIGC在医疗行业的应用、伦理风险、未来展望

    2024-04-28 19:42:04       35 阅读