#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#define MaxSize 4
/*
队头指针 front: 指向队头元素
队尾指针 rear: 指向队尾元素的下一个位置
初始时,Q.front = Q.rear = 0;
进队:队不满时,先 赋值给队尾,再讲队尾指针+1;
出队操作:队不空时,先 取队头元素值,再将队头指针+1.
循环队列
*/
typedef struct {
int data[MaxSize];
int front,rear;
}queue,*sQueue;
/*
1. 初始化队列
队首、队尾 指针都指向0
*/
void InitQueue(sQueue q){
q->rear = q->front = 0;
}
/*
2. 判队空
首尾 指针相等
*/
bool isEmpty(queue q){
if(q.front == q.rear) return true;
return false;
}
/*
3. 判队满
队尾指针 的下一个位置 是队首指针
*/
bool isQueueFull(queue q){
if((q.rear+1)%MaxSize == q.front) return true;
return false;
}
/*
4. 入队
队尾入队,队满 返回 false;元素 入队,队尾指针+1
*/
bool EnQueue(sQueue q,int x){
if((q->rear+1)%MaxSize == q->front) return false;
q->data[q->rear] = x;
q->rear = (q->rear+1)%MaxSize;
return true;
}
/*
5. 出队
队空(首尾指针相等),返回fasle;元素出队,队首指针 +1
*/
bool DeQueue(sQueue q,int *x){
if(q->front == q->rear) return false;
*x = q->data[q->front];
q->front = (q->front+1)%MaxSize;
return true;
}
/*
6. 打印队列
*/
bool printQueue(sQueue q){
int front = q->front;
int rear = q->rear;
printf("打印队列元素 ");
while(front != rear){
printf("%d ",q->data[front]);
front = (front + 1) %MaxSize;
}
printf("\n");
}
void main(){
queue q;
InitQueue(&q);
printf("判断队列是否为空 %d\n", isEmpty(q));
printf("队首指针位置 %d 队尾指针位置 %d \n",q.front,q.rear);
printf("插入元素 %d\n", EnQueue(&q,1));
printf("判断队列是否满 %d\n", isQueueFull(q));
printf("插入元素 %d\n", EnQueue(&q,2));
printf("判断队列是否满 %d\n", isQueueFull(q));
printf("插入元素 %d\n", EnQueue(&q,3));
printf("判断队列是否满 %d\n", isQueueFull(q));
printf("插入元素 %d\n", EnQueue(&q,4));
printf("判断队列是否满 %d\n", isQueueFull(q));
printQueue(&q);
int a;
bool b = DeQueue(&q,&a);
printf("出队 %d 出队元素 %d \n",b,a);
printQueue(&q);
b = DeQueue(&q,&a);
printf("出队 %d 出队元素 %d \n",b,a);
printQueue(&q);
b = DeQueue(&q,&a);
printf("出队 %d 出队元素 %d \n",b,a);
printQueue(&q);
b = DeQueue(&q,&a);
printf("出队 %d 出队元素 %d \n",b,a);
printQueue(&q);
b = DeQueue(&q,&a);
printf("出队 %d 出队元素 %d \n",b,a);
printQueue(&q);
return 0;
}
08-09
596
08-13
301