请编写C程序,实现顺序队列的以下功能:初始化并建立队列、元素入队、元素出队、判断队列是否为空、取队头元素、遍历队列
时间: 2023-11-01 18:06:44 浏览: 139
好的,以下是实现顺序队列的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 队列最大长度
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 元素入队
int enQueue(Queue *q, int x) {
if (isFull(q)) {
return 0; // 队列已满,入队失败
} else {
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1; // 入队成功
}
}
// 元素出队
int deQueue(Queue *q, int *x) {
if (isEmpty(q)) {
return 0; // 队列为空,出队失败
} else {
*x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1; // 出队成功
}
}
// 取队头元素
int getFront(Queue *q, int *x) {
if (isEmpty(q)) {
return 0; // 队列为空,取队头元素失败
} else {
*x = q->data[q->front];
return 1; // 取队头元素成功
}
}
// 遍历队列
void traverseQueue(Queue *q) {
int i;
for (i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
}
int main() {
Queue q;
int i, x;
initQueue(&q);
// 入队
for (i = 1; i <= 5; i++) {
enQueue(&q, i);
}
// 遍历队列
traverseQueue(&q); // 输出 1 2 3 4 5
// 取队头元素
if (getFront(&q, &x)) {
printf("队头元素为:%d\n", x); // 输出 1
} else {
printf("队列为空,无法取队头元素!\n");
}
// 出队
if (deQueue(&q, &x)) {
printf("出队元素为:%d\n", x); // 输出 1
} else {
printf("队列为空,出队失败!\n");
}
// 遍历队列
traverseQueue(&q); // 输出 2 3 4 5
return 0;
}
```
以上代码实现了顺序队列的初始化、元素入队、元素出队、判断队列是否为空、取队头元素、遍历队列等功能。在 `main` 函数中,我们先初始化队列,然后入队 1 到 5 这 5 个元素,接着遍历队列并输出队列中的元素,然后取出队头元素并输出,再出队一个元素并输出,最后再遍历队列并输出队列中剩余的元素。
阅读全文