LinkQueue.h
#include<stdio.h>
typedef int ElemType;
typedef struct StackNode
{
ElemType data;//值域
struct StackNode * pNext;//指向下一个元素
}StackNode;
typedef struct
{
StackNode * front;//指向队列中首元素
StackNode * rear;//指向队列中的尾元素
}LinkQueue;
void initLinkQueue(LinkQueue * LQ);//初始化链式队列
void enterLinkQueue(LinkQueue * LQ, ElemType e);//入队
ElemType deLinkQueue(LinkQueue * LQ);//出队
int getFront(LinkQueue * LQ);//获取队首元素,但出队
void printLinkQueue(LinkQueue * LQ);//打印队列中的所有元素
LinkQueue.c
#include"LinkQueue.h"
void initLinkQueue(LinkQueue * LQ)//初始化链式队列
{
//动态分配一个节点为头结点,让头尾指针指向它
LQ->front = LQ->rear = (StackNode *)malloc(sizeof(StackNode));
LQ->front->pNext = NULL;
LQ->front->data = 0;//用头结点的data域记录队列中的节点个数
printf("初始化成功!\n");
}
void enterLinkQueue(LinkQueue * LQ, ElemType e)//入队
{
StackNode * newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = e;
newNode->pNext = NULL;
LQ->rear->pNext = newNode;
LQ->rear = newNode;
LQ->front->data++;//节点数增加
}
ElemType deLinkQueue(LinkQueue * LQ)//出队
{
if (LQ->front == LQ->rear)
{
printf("队列为空!\n");
_sleep(3000);
exit(1);
}
if (LQ->front->pNext == LQ->rear)//队列中最后一个元素,需要单独处理
{
free(LQ->front->pNext);
LQ->front->pNext == NULL;
LQ->rear = LQ->front;
return;
}
StackNode * temp = LQ->front->pNext;
ElemType value = temp->data;
LQ->front->pNext = temp->pNext;
LQ->front->data--;//节点数减一,出队一个
free(temp);
return value;
}
int getFront(LinkQueue * LQ)//获取队首元素,但不出队
{
if (LQ->front == LQ->rear)
{
printf("队列为空!\n");
_sleep(3000);
exit(1);
}
return LQ->front->pNext->data;
}
void printLinkQueue(LinkQueue * LQ)//打印队列中的所有元素
{
if (LQ->front == LQ->rear)
{
printf("队列为空!\n");
return;
}
StackNode * pFront = LQ->front;
while (pFront->pNext != LQ->rear)
{
printf("data:%d\n", pFront->pNext->data);
pFront = pFront->pNext;
}
printf("data:%d\n", pFront->pNext->data);
}