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