废话不多说,直接上代码:
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
char data;
struct node * next;
}LinkList;
typedef struct
{
LinkList * front, * rear;
}LinkQueue;
//建空队
LinkQueue * setQueue()
{
LinkQueue * Q = (LinkQueue *)malloc(sizeof(LinkQueue));
Q->front = (LinkList *)malloc(sizeof(LinkList));
Q->front->next = NULL;
Q->rear = Q->front;
return Q;
}
//判队空
int QueueEmpty(LinkQueue * Q)
{
if (Q->front == Q->rear)
return 1;
else
return 0;
}
//入队
void add(LinkQueue * Q, char ch)
{
LinkList * L = (LinkList *)malloc(sizeof(LinkList));
L->data = ch;
L->next = Q->rear->next; //L->next = null;
Q->rear->next = L; //说明Q->front是空的
Q->rear = L;
}
//出队
void Delete(LinkQueue * Q)
{
if(QueueEmpty(Q))
printf("queue empty");
else
{
LinkList * p = Q->front->next;
Q->front->next = p->next; //p->next 即 Q->front->next->next;
if (p->next == NULL)
Q->rear = Q->front; //如果链队列的长度为1,需要修改尾指针
free(p);
}
}
//置空队
LinkQueue * initQueue(LinkQueue * Q)
{
while(Q->front->next != NULL)
Delete(Q);
return Q;
}
int main(void)
{
LinkQueue * Q = setQueue();
int i;
char ch = 'A';
for (i = 0; i < 6; ++i, ch++)
add(Q, ch);
LinkList * p = Q->front->next;
for(i = 0; i < 6; ++i)
{
printf("%c ", p->data);
p = p->next;
}
printf("\n");
Delete(Q);
Delete(Q);
LinkList * L = Q->front->next;
for(i = 0; i < 4; ++i)
{
printf("%c ", L->data);
L = L->next;
}
return 0;
}
运行结果:
PS:发现之前的栈、顺序表、队列又忘了很多,看来学完要多花点时间回顾一下才行。