循环队列的实现

说明:

循环队列:
    队列满的条件:
        (rear + 1) % Queue_Size == front
    队列长度:
        (rear - front + Queue_Size) % Queue_Size

测试(主函数):

void main()
{
    Queue_Node *queue = InitQueue();
    EnQueue(queue,2);
    EnQueue(queue,3);
    EnQueue(queue,4);
    EnQueue(queue,5);
    DeQueue(queue);
    DeQueue(queue);
    DeQueue(queue);
    EnQueue(queue,6);
    EnQueue(queue,7);
    EnQueue(queue,8);
    EnQueue(queue,9);

    show(queue);
    int len = GetLength(queue);
    printf("数据元素长度为:\t%d\n",len);
    
    system("pause");
    return ;
}

输出结果:

在这里插入图片描述

结果分析:

在这里插入图片描述

相关操作:

Queue_Node *InitQueue();            //初始化队列
void EnQueue(Queue_Node *queue,int val);    //入队操作
void DeQueue(Queue_Node *queue);            //出队操作 
boolean isFull(Queue_Node *queue);         //判断队列是否为满
boolean isEmpty(Queue_Node *queue);         //判断队列是否为满
void show(Queue_Node *queue);               //显示队列元素
int GetLength(Queue_Node *queue);           //获取队列长度

定义结构体

#include <stdio.h>
#include <windows.h>

#define  Queue_Size 5   //定义队列长度

typedef struct Queue
{
    int val[Queue_Size];	//队列空间
    int front;				//队头
    int rear;				//队尾
}Queue_Node;

初始化队列:

Queue_Node *InitQueue()
{
    Queue_Node *node = (Queue_Node *)malloc(sizeof(Queue_Node));
    if(node == NULL)
    {
        printf("内存申请失败\n");
        exit(-1);
    }
    node->front = 0;
    node->rear = 0;
    return node;
}

入队操作:

void EnQueue(Queue_Node *queue,int val)
{
    if(isFull(queue))
    {
        printf("队列已满,无法入队\n");
        return ;
    }
    else
    {
        queue->val[queue->rear] = val;
        queue->rear = (queue->rear + 1) % Queue_Size;
    }
}

出队操作:

void DeQueue(Queue_Node *queue)
{
    if(isEmpty(queue))
    {
        printf("队列为空,无法出队\n");
        return ;
    }
    else
    {
        int del = queue->val[queue->front];
        queue->front = (queue->front + 1) % Queue_Size;
    }
}

判断队列是否为满

boolean isFull(Queue_Node *queue)
{
    if(((queue->rear + 1) % Queue_Size) == queue->front)
        return TRUE;
    return FALSE;
}

判断队列是否为空

boolean isEmpty(Queue_Node *queue)
{
    if(queue->front == queue->rear)
        return TRUE;
    return FALSE;
}

输出队列数据:

void show(Queue_Node *queue)
{
    if(isEmpty(queue))
    {
        printf("队列为空,无法输出\n");
        return ;
    }
    int index = queue->front;
    int length = GetLength(queue);
    for(int i = 0;i < length;i++)
    {
        printf("队列数据为:\t%d\n",queue->val[index]);
        index = (index + 1) %Queue_Size;
    }
}

获取数据长度:

int GetLength(Queue_Node *queue)
{
    return (queue->rear - queue->front + Queue_Size) % Queue_Size;
}

说明:此文章为学习笔记,如有侵权联系删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Byte_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值