使用c语言编写 使用链式队列实现上述数据进队和出队的操作,每次进队和出队操作后需要遍历队列
时间: 2024-03-14 09:43:15 浏览: 31
下面是使用链式队列实现数据进队和出队操作,并在每次操作后遍历队列的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 链式队列结点定义
typedef struct Node {
int data;
struct Node *next;
} Node;
// 链式队列定义
typedef struct Queue {
Node *front; // 队头指针
Node *rear; // 队尾指针
} Queue;
// 初始化队列
Queue *initQueue() {
Queue *q = (Queue *)malloc(sizeof(Queue));
q->front = q->rear = NULL;
return q;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == NULL;
}
// 入队操作
void enQueue(Queue *q, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
printf("%d 已进队\n", data);
}
// 出队操作
void deQueue(Queue *q) {
if (isEmpty(q)) {
printf("队列已空\n");
return;
}
Node *tmp = q->front;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
printf("%d 已出队\n", tmp->data);
free(tmp);
}
// 遍历队列
void traverseQueue(Queue *q) {
if (isEmpty(q)) {
printf("队列已空\n");
return;
}
Node *p = q->front;
printf("队列元素:");
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Queue *q = initQueue();
enQueue(q, 1);
traverseQueue(q);
enQueue(q, 2);
traverseQueue(q);
enQueue(q, 3);
traverseQueue(q);
deQueue(q);
traverseQueue(q);
deQueue(q);
traverseQueue(q);
deQueue(q);
traverseQueue(q);
deQueue(q);
return 0;
}
```
上述代码实现了链式队列的初始化、判断队列是否为空、进队、出队、遍历等操作,并在每次进队和出队后遍历队列。