#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MaxSize 9
typedef int ElementType; /*元素类型定义*/
/*三、队列*/
/*(1) 循环队列*/
/**1.定义*/
typedef struct SqQueue
{
ElementType data[MaxSize]; // 队列元素
int front; // 队首指针
int rear; // 队尾指针
} SqQueue;
/*2.操作*/
void InitSqQueue(SqQueue *Q)
{
Q->front = Q->rear = 0;
}
bool SqQueueEmpty(SqQueue *Q)
{
if (Q->front == Q->rear)
return true;
else
return false;
}
bool SqQueueFull(SqQueue *Q)
{
if ((Q->rear + 1) % MaxSize == Q->front)
return true;
else
return false;
}
bool EnQueue(SqQueue *Q, ElementType e)
{
if (SqQueueFull(Q))
{
printf("队满\n");
return false;
}
else
{
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MaxSize;
printf("%d 入队\n", e);
return true;
}
}
bool DeQueue(SqQueue *Q, ElementType *e){
if (SqQueueEmpty(Q)){
printf("队空\n");
return false;
}
else{
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSize;
printf("%d 出队\n", *e);
return true;
}
}
//测试
int main()
{
SqQueue *Q;
Q = (SqQueue *)malloc(sizeof(SqQueue));
InitSqQueue(Q);
int a[]={1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < 10; i++){
if(SqQueueFull(Q)){
int c;
DeQueue(Q,&c);
}
EnQueue(Q,a[i]);
}
for (int i = 0; i < 10; i++){
ElementType b;
if(!DeQueue(Q,&b))break;
}
return 0;
}
一天一个c语言数据结构与算法实现----循环队列
最新推荐文章于 2024-06-14 10:22:04 发布