使用c语言使用顺序队列实现上述数据进队和出队的操作,每次进队和出队操作后需要遍历队列
时间: 2024-03-13 16:48:18 浏览: 68
好的,以下是使用 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 = 0;
Q->rear = 0;
}
// 判断队列是否为空
int isEmpty(SqQueue *Q) {
if (Q->front == Q->rear) {
return 1; // 队列为空
} else {
return 0; // 队列不为空
}
}
// 判断队列是否已满
int isFull(SqQueue *Q) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
return 1; // 队列已满
} else {
return 0; // 队列未满
}
}
// 入队操作
void EnQueue(SqQueue *Q, int x) {
if (isFull(Q)) {
printf("队列已满,无法入队!\n");
return;
}
Q->data[Q->rear] = x; // 将元素 x 插入队尾
Q->rear = (Q->rear + 1) % MAXSIZE; // 队尾指针加 1
}
// 出队操作
int DeQueue(SqQueue *Q) {
if (isEmpty(Q)) {
printf("队列为空,无法出队!\n");
return -1; // 返回一个非法值
}
int x = Q->data[Q->front]; // 获取队头元素
Q->front = (Q->front + 1) % MAXSIZE; // 队头指针加 1
return x; // 返回队头元素
}
// 遍历队列
void TraverseQueue(SqQueue *Q) {
if (isEmpty(Q)) {
printf("队列为空,无法遍历!\n");
return;
}
printf("队列的元素为:");
int i = Q->front;
while (i != Q->rear) {
printf("%d ", Q->data[i]);
i = (i + 1) % MAXSIZE; // 指针后移
}
printf("\n");
}
int main() {
SqQueue Q;
InitQueue(&Q); // 初始化队列
// 测试入队操作
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
// 测试遍历队列操作
TraverseQueue(&Q);
// 测试出队操作
int x = DeQueue(&Q);
printf("出队元素为:%d\n", x);
// 测试遍历队列操作
TraverseQueue(&Q);
return 0;
}
```
以上代码中,我们使用结构体 SqQueue 来定义了一个顺序队列,包括队列的最大长度 MAXSIZE、队列的元素数组 data、队头指针 front 和队尾指针 rear。其中,front 表示队头指针,rear 表示队尾指针,在队列为空时,它们都指向队列的第一个位置。在数据进队时,我们将元素插入到队尾,并将队尾指针后移;在数据出队时,我们取出队头元素,并将队头指针后移。遍历队列时,我们从队头指针开始遍历,依次输出队列中的元素,直到队尾指针。
阅读全文