本文C语言实现王道书上对队列的链式存储操作
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
//初始化一个链式队列
LinkQueue InitLinkQueue(LinkQueue Q){
Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));//都指向头节点
Q.front->next=NULL;
printf("链式队列的初始化成功!\n");
return Q;
}
//往队列里面插入数据
LinkQueue EnQueue(LinkQueue Q){
int x;
printf("请输入需要入队的元素:\n");
scanf("%d",&x);
while(x!=99){
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next=NULL;
Q.rear->next = s;
Q.rear = s;
printf("请输入下一个需要入队的元素:\n");
scanf("%d",&x);
}
return Q;
}
//进行队列的出队操作
LinkQueue OutQueue(LinkQueue Q){
if(Q.rear==Q.front){
printf("该队列为空,无法出队!\n");
}
LinkNode *p = Q.front->next;
printf("出队的元素为%d\n",p->data);
Q.front->next = p->next;
free(p);
return Q;
}
//获取队头元素
void GetHead(LinkQueue Q){
LinkNode *p;
p=Q.front->next;
printf("队头的元素为:%d\n",p->data);
}
//打印整个队列的元素
void Print(LinkQueue Q){
printf("队列中的数据为:\n");
Q.front = Q.front->next;
while(Q.front!=NULL){
printf("%d ",Q.front->data);
Q.front = Q.front->next;
}
}
int main()
{
LinkQueue Q;
LinkQueue q = InitLinkQueue(Q);
//GetHead(EnQueue(q));
LinkQueue enQ = EnQueue(q);
Print(enQ);
printf("执行出队操作并输出队列的元素:\n");
Print(OutQueue(enQ));
return 0;
}
运行结果: