顺序循环队列及其实现

lixiangrong
2024-01-05 / 0 评论 / 24 阅读 / 正在检测是否收录...
#include <stdio.h>
#include <stdlib.h>

// 定义队列的容量,可以修改为更小的值测试循环队列
#define MAX_SIZE 100
typedef int dataType;

// 2.4.3 顺序存储的循环队列
typedef struct
{
    dataType a[MAX_SIZE];
    int front,rear; // 队头指针和队尾指针
}seqQueue;

// 1.初始化队列
void init(seqQueue *queue)
{
    queue->front = queue->rear = 0;
}

// 2.判断队列是否为空
int empty(seqQueue queue)
{
    return queue.rear == queue.front;
}

// 3.打印队列
void display(seqQueue queue)
{
    if(empty(queue))
    {
        printf("队列为空!\n");
        return;
    }
    while (!empty(queue))
    {
        printf("%d ",queue.a[queue.front]);
        queue.front = (queue.front + 1)%MAX_SIZE;
    }
    printf("\n");
}

// 4.获取队首结点的值
dataType get(seqQueue queue)
{
    if(empty(queue))
    {
        printf("队列为空!\n");
        exit(1);
    }
    return queue.a[queue.front];
}

// 5.入队操作
void insert(seqQueue *queue, dataType x)
{
    if((queue->rear + 1)%MAX_SIZE == queue->front)
    {
        printf("队列已满,无法入队!\n");
        exit(1);
    }
    queue->a[queue->rear] = x;
    queue->rear = (queue->rear + 1)%MAX_SIZE;
}

// 6.出队操作
void del(seqQueue *queue)
{
    if(queue->rear == queue->front)
    {
        printf("队列为空,无法出队!\n");
        exit(1);
    }
    queue->front = (queue->front + 1)%MAX_SIZE;
}

// 7.获取队列中元素的个数
int getSize(seqQueue queue)
{
    return (queue.rear-queue.front+MAX_SIZE)%MAX_SIZE;
}

int main()
{
    seqQueue queue; // 声明队列
    init(&queue); // 初始化队列
    dataType a = 1, b = 2;
    insert(&queue,a); // 元素入队
    insert(&queue,b); // 元素入队
    printf("此时队列中元素有%d个\n", getSize(queue));
    display(queue); // 打印队列元素
    del(&queue); // 队首元素出队
    printf("队首元素是%d\n", get(queue));
    display(queue); // 打印队列元素
    return 0;
}
0

评论 (0)

取消