C语言实现数据结构中的链队列

队列的链式存储结构简称链队列

# 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);
 }
}
 

原文地址:https://www.cnblogs.com/xiejava/p/15171482.html