> 文档中心 > 循环队列的实现

循环队列的实现

目录:

      • 说明:
      • 测试(主函数):
      • 输出结果:
      • 结果分析:
      • 相关操作
      • 定义结构体
      • 初始化队列
      • 入队操作:
      • 出队操作:
      • 判断队列是否为满
      • 判断队列是否为空
      • 输出队列数据
      • 获取数据长度:

说明:

循环队列:    队列满的条件: (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 #include #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;}

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