请实现顺序循环队列的基本操作,包括初始化、判断队空、队满,清空队列,销毁队列,进入,出队,取队头元素。
时间: 2024-06-13 15:08:47 浏览: 103
以下是顺序循环队列的基本操作实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 // 定义队列的最大长度
typedef struct {
int *base; // 队列的基地址
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *Q) {
Q->base = (int *)malloc(MAXSIZE * sizeof(int));
if (!Q->base) {
printf("初始化队列失败!\n");
exit(1);
}
Q->front = Q->rear = 0;
}
// 判断队列是否为空
int QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear) {
return 1;
} else {
return 0;
}
}
// 判断队列是否已满
int QueueFull(SqQueue Q) {
if ((Q.rear + 1) % MAXSIZE == Q.front) {
return 1;
} else {
return 0;
}
}
// 清空队列
void ClearQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
// 销毁队列
void DestroyQueue(SqQueue *Q) {
free(Q->base);
Q->base = NULL;
Q->front = Q->rear = 0;
}
// 进队
void EnQueue(SqQueue *Q, int e) {
if (QueueFull(*Q)) {
printf("队列已满,无法进队!\n");
return;
}
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
// 出队
void DeQueue(SqQueue *Q, int *e) {
if (QueueEmpty(*Q)) {
printf("队列为空,无法出队!\n");
return;
}
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
}
// 取队头元素
void GetHead(SqQueue Q, int *e) {
if (QueueEmpty(Q)) {
printf("队列为空,无法取队头元素!\n");
return;
}
*e = Q.base[Q.front];
}
int main() {
SqQueue Q;
int e;
// 初始化队列
InitQueue(&Q);
// 进队
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
// 出队
DeQueue(&Q, &e);
printf("出队元素为:%d\n", e);
// 取队头元素
GetHead(Q, &e);
printf("队头元素为:%d\n", e);
// 清空队列
ClearQueue(&Q);
// 销毁队列
DestroyQueue(&Q);
return 0;
}
```
阅读全文