使用C语言写一个单链表队列
时间: 2023-06-09 14:04:08 浏览: 146
C语言使用非循环双向链表实现队列
好的,以下是使用 C 语言编写单链表队列的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列元素结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 队列结构体
typedef struct {
Node *front; // 队头指针
Node *rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = NULL;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == NULL;
}
// 入队
void enqueue(Queue *q, int data) {
Node *node = (Node*)malloc(sizeof(Node));
if (node == NULL) {
printf("Failed to allocate memory.\n");
exit(EXIT_FAILURE);
}
node->data = data;
node->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = node;
}
else {
q->rear->next = node;
q->rear = node;
}
}
// 出队
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
exit(EXIT_FAILURE);
}
Node *node = q->front;
int data = node->data;
q->front = node->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(node);
return data;
}
// 遍历队列
void traverseQueue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return;
}
Node *node = q->front;
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("Queue: ");
traverseQueue(&q);
printf("Dequeue: %d\n", dequeue(&q));
printf("Dequeue: %d\n", dequeue(&q));
printf("Queue: ");
traverseQueue(&q);
return 0;
}
```
以上代码实现了一个简单的单链表队列,可以使用 `initQueue` 初始化队列,使用 `isEmpty` 判断队列是否为空,使用 `enqueue` 入队,使用 `dequeue` 出队,使用 `traverseQueue` 遍历队列。
阅读全文