说明:
循环队列:
队列满的条件:
(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;
}
说明:此文章为学习笔记,如有侵权联系删除。