链队的实现
#include <stdio.h>
#include <stdlib.h>
// 数据类型
typedef int datatype;
// 结点结构体
typedef struct node {
datatype data;
struct node *next;
} node, *node_p;
// 头尾指针结构体
typedef struct Q {
node_p front;
node_p rear;
} Q;
// 判断队列是否为空
int isEmpty(Q *q) {
return q->front == q->rear;
}
// 入队列
void enQueue(Q *q, datatype data) {
node_p newNode = (node_p)malloc(sizeof(node));
if (!newNode) {
printf("内存分配失败\n");
return 1;
}
newNode->data = data;
newNode->next = NULL;
q->rear->next = newNode;
q->rear = newNode;
}
// 出队列
void deQueue(Q *q, datatype *x) {
if (isEmpty(q)) {
printf("队列为空\n");
return 1;
}
node_p p = q->front->next;
*x = p->data;
q->front->next = p->next;
if (q->rear == p) {
q->rear = q->front;
}
free(p);
}