【C语言】链表实现队列
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
} Node, *Queue;
typedef struct
{
Queue front;
Queue rear;
} LinkQueue;
void initQueue(LinkQueue *q)
{
Queue p = (Queue)malloc(sizeof(Node));
if (p == NULL) {
return;
}
p->data = 0;
p->next = NULL;
q->front = p;
q->rear = p;
q->front->next = NULL;
return;
}
int isEmpty(LinkQueue *q)
{
return q->front == q->rear ? 1 : 0;
}
void insertQueue(LinkQueue *q, int a)
{
Queue p = (Queue)malloc(sizeof(Node));
if (p == NULL) {
return;
}
p->data = a;
p->next = NULL;
q->rear->next = p;
q->rear = p;
return;
}
void deQueue(LinkQueue *q)
{
Queue p = NULL;
if (!isEmpty(q)) {
p = q->front->next;
q->front->next = p->next;
if (p == q->rear) {
q->front = q->rear;
}
free(p);
}
return;
}
void traversalQueue(LinkQueue *q)
{
int i = 1;
if (!isEmpty(q)) {
Queue p = q->front->next;
while (p != NULL) {
printf("\n第%d个元素是%d", i, p->data);
p = p->next;
i++;
}
} else {
printf("\n空队列!");
}
return;
}
void destroyQueue(LinkQueue *q)
{
if (!isEmpty(q)) {
while (q->front != NULL) {
q->rear = q->front->next;
free(q->front);
q->front = q->rear;
}
}
return;
}
int main(void)
{
LinkQueue p;
initQueue(&p);
//printf("\n激活函数!");
puts("\n初始化队列,0, 1, 2, 3");
insertQueue(&p, 0);
insertQueue(&p, 1);
insertQueue(&p, 2);
insertQueue(&p, 3);
traversalQueue(&p);
puts("\n第一个元素出队列");
deQueue(&p);
traversalQueue(&p);
puts("\n第二个元素出队列");
deQueue(&p);
traversalQueue(&p);
puts("\n第三个元素出队列");
deQueue(&p);
traversalQueue(&p);
puts("\n第四个元素出队列");
deQueue(&p);
traversalQueue(&p);
destroyQueue(&p);
traversalQueue(&p);
return 0;
}