队列的链式存储结构简称链队列
# include <stdio.h>
# include <stdlib.h>
/*定义链队列*/
typedef char NodeData;
typedef struct node
{
NodeData nodedata; //节点数据
struct node * next; //指向下一个节点的指针
}QueueNode;
typedef struct linkList
{
QueueNode * head; //队头指针
QueueNode * rear; //队尾指针
}LinkQueue;
/*初始化队列*/
void initQueue(LinkQueue * linkQueue)
{
linkQueue->head=linkQueue->rear=NULL;
}
/*判队空*/
int isEmptyQueue(LinkQueue * linkQueue)
{
return linkQueue->head==NULL&&linkQueue->rear==NULL;
}
/*入队*/
void inQueue(LinkQueue * linkQueue,NodeData nodeData)
{
//从队尾入队
QueueNode *inNode=(QueueNode *)malloc(sizeof(QueueNode));
inNode->nodedata=nodeData;
inNode->next=NULL;
//如果队为空
if(isEmptyQueue(linkQueue))
{
linkQueue->head=inNode;
linkQueue->rear=inNode;
}
else
{
QueueNode *rearNode=linkQueue->rear;
rearNode->next=inNode;
linkQueue->rear=inNode;
}
}
/*出队*/
NodeData outQueue(LinkQueue * linkQueue)
{
//从队首出队
QueueNode *outNode;
NodeData nodeDate;
if(isEmptyQueue(linkQueue))
{
printf("THE QUEUE LIST IS NULL");
exit(0);
}
outNode=linkQueue->head;
nodeDate=outNode->nodedata;
linkQueue->head=outNode->next;
if(linkQueue->rear==outNode)
{
linkQueue->rear=NULL;
}
free(outNode);
return nodeDate;
}
/*打印队列*/
void printQueue(LinkQueue * linkQueue)
{
QueueNode *headNode=linkQueue->head;
int i=0;
QueueNode *node=headNode;
while(node->next!=NULL)
{
printf("the node %d is %c/n",i,node->nodedata);
node=node->next;
i++;
}
}
void main()
{
LinkQueue * linkQueue;
char inData; //入队数据
linkQueue=(LinkQueue *)malloc(sizeof(LinkQueue));
//入队
initQueue(linkQueue);
printf("please input queue/n");
while(inData!='/n')
{
scanf("%c",&inData);
inQueue(linkQueue,inData);
}
//打印入队后的队列
printQueue(linkQueue);
//出队
while(isEmptyQueue(linkQueue)!=1)
{
NodeData nodedata=outQueue(linkQueue);
printf("out queue %c/n",nodedata);
}
}