用一段完整的C语言代码实现链队列的初始化、入队、出队等操作
时间: 2024-06-17 18:03:46 浏览: 111
好的,以下是一个完整的C语言代码实现链队列的初始化、入队、出队等操作的例子:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链队列结构体
typedef struct QueueNode {
int data;
struct QueueNode *next;
} QueueNode;
typedef struct {
QueueNode *front; //队头指针
QueueNode *rear; //队尾指针
} LinkQueue;
//链队列的初始化函数
void InitQueue(LinkQueue *q) {
q->front = q->rear = (QueueNode *)malloc(sizeof(QueueNode)); //创建一个空结点作为头结点
q->front->next = NULL; //头结点的下一个结点为空
}
//链队列的入队函数
void EnQueue(LinkQueue *q, int e) {
QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode)); //创建一个新结点
p->data = e;
p->next = NULL;
q->rear->next = p; //将新结点插入到队尾
q->rear = p; //修改队尾指针
}
//链队列的出队函数
int DeQueue(LinkQueue *q, int *e) {
if (q->front == q->rear) { //如果队列为空
return 0;
}
QueueNode *p = q->front->next; //指向队头结点
*e = p->data; //保存队头元素
q->front->next = p->next; //删除队头结点
if (q->rear == p) { //如果删除后队列为空
q->rear = q->front; //修改队尾指针
}
free(p); //释放原队头结点的空间
return 1;
}
//测试代码
int main() {
LinkQueue q;
int e;
InitQueue(&q);
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
while (DeQueue(&q, &e)) {
printf("%d ", e);
}
return 0;
}
```
阅读全文