c语言循环顺序队列 完成出队入队获取队列长度等操作
时间: 2024-01-10 18:04:24 浏览: 73
数据结构(C语言版)——循环顺序队列(代码版)
好的,以下是基于C语言的循环顺序队列实现,包括入队、出队和获取队列长度等操作:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *Q) {
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; // 队列未满
}
}
// 入队操作
int EnQueue(SqQueue *Q, int x) {
if (QueueFull(*Q)) {
return 0; // 队列已满,入队失败
} else {
Q->data[Q->rear] = x; // 将新元素存入队尾
Q->rear = (Q->rear + 1) % MAXSIZE; // 队尾指针后移一位,如果到达数组末尾,则回到数组开头
return 1; // 入队成功
}
}
// 出队操作
int DeQueue(SqQueue *Q, int *x) {
if (QueueEmpty(*Q)) {
return 0; // 队列为空,出队失败
} else {
*x = Q->data[Q->front]; // 取出队头元素
Q->front = (Q->front + 1) % MAXSIZE; // 队头指针后移一位,如果到达数组末尾,则回到数组开头
return 1; // 出队成功
}
}
// 获取队列长度
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
int main() {
SqQueue Q;
int x, len;
InitQueue(&Q);
// 入队操作
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
EnQueue(&Q, 4);
// 出队操作
DeQueue(&Q, &x);
printf("%d ", x);
DeQueue(&Q, &x);
printf("%d ", x);
// 获取队列长度
len = QueueLength(Q);
printf("%d", len);
return 0;
}
```
以上代码实现了循环顺序队列的入队、出队和获取队列长度等操作。其中,`InitQueue`用于初始化队列,`QueueEmpty`用于判断队列是否为空,`QueueFull`用于判断队列是否已满,`EnQueue`用于入队操作,`DeQueue`用于出队操作,`QueueLength`用于获取队列长度。
阅读全文