用c语言链表写一个队列
时间: 2023-08-04 22:23:38 浏览: 39
好的,下面是用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* queue = (Queue*)malloc(sizeof(Queue));
queue->front = queue->rear = NULL;
return queue;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->front == NULL;
}
// 入队
void enQueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (isEmpty(queue)) {
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队
int deQueue(Queue* queue) {
if (isEmpty(queue)) {
printf("队列为空,无法出队!\n");
exit(1);
}
int value = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return value;
}
// 输出队列元素
void printQueue(Queue* queue) {
if (isEmpty(queue)) {
printf("队列为空,无法输出!\n");
exit(1);
}
Node* p = queue->front;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Queue* queue = initQueue();
enQueue(queue, 1);
enQueue(queue, 2);
enQueue(queue, 3);
printf("队列元素为:");
printQueue(queue);
printf("队首元素为:%d\n", queue->front->data);
int value = deQueue(queue);
printf("出队元素为:%d\n", value);
printf("队列元素为:");
printQueue(queue);
return 0;
}
```
以上是基于链表实现的队列,代码中包括了初始化队列、判断队列是否为空、入队、出队、输出队列元素等操作。