C语言 本关任务:编写一个链队列,实现入队、出队操作,判断队空等特殊情况。
时间: 2023-06-10 20:03:34 浏览: 219
好的,我了解。下面是一个简单的C语言链队列的实现代码,包括入队、出队、判断队空和初始化操作:
```
#include <stdio.h>
#include <stdlib.h>
/* 定义链表节点 */
typedef struct Node {
int data;
struct Node* next;
} Node;
/* 定义链队列 */
typedef struct Queue {
int size;
Node* front;
Node* rear;
} Queue;
/* 初始化链队列 */
void initQueue(Queue* q) {
q->size = 0;
q->front = q->rear = NULL;
}
/* 入队操作 */
void enqueue(Queue* q, int data) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 队列为空的情况
if (q->rear == NULL) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
q->size++;
}
/* 出队操作 */
int dequeue(Queue* q) {
if (q->front == NULL) {
return 0; // 队列为空
}
// 取出队头元素
int data = q->front->data;
// 删除队头节点
Node* temp = q->front;
if (q->front == q->rear) {
q->front = q->rear = NULL;
} else {
q->front = q->front->next;
}
free(temp);
q->size--;
return data;
}
/* 判断队列是否为空 */
int isEmpty(Queue* q) {
return (q->front == NULL);
}
int main() {
Queue q;
// 初始化队列
initQueue(&q);
// 添加元素到队列
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
// 出队并打印元素
printf("%d\n", dequeue(&q));
printf("%d\n", dequeue(&q));
printf("%d\n", dequeue(&q));
// 检查队列是否为空
printf("isEmpty(): %d\n", isEmpty(&q));
return 0;
}
```
此代码实现基于链表实现的队列,可以通过不断的添加和删除元素测试队列的功能。
阅读全文