#include <stdio.h>
#include<malloc.h>
typedef struct LinkNode{
int data;
struct LinkNode* next;
}*LinkNodePtr;
typedef struct LinkQueue
{
LinkNodePtr front;
LinkNodePtr rear;
}*LinkQueuePtr;
LinkQueuePtr initQueue()
{
LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue));
LinkNodePtr headerPtr =(LinkNodePtr)malloc(sizeof(struct LinkNode));
headerPtr->next=NULL;
resultPtr->front = headerPtr;
resultPtr->rear = headerPtr;
return resultPtr;
}
void outputLinkQueue(LinkQueuePtr paraQueuePtr)
{
LinkNodePtr tempPtr = paraQueuePtr->front->next;
while(tempPtr!=NULL)
{
printf("%d ",tempPtr->data);
tempPtr = tempPtr->next;
}
printf("\r\n");
}
void enqueue(LinkQueuePtr paraQueuePtr,int paraElement)
{
//1.创造新节点
LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
tempNodePtr->data=paraElement;
tempNodePtr->next=NULL;
//2.连接尾巴
paraQueuePtr->rear->next=tempNodePtr;
//3.新尾巴
paraQueuePtr->rear=tempNodePtr;
}
//dequeue
int dequeue(LinkQueuePtr paraQueuePtr)
{
int resultValue;
LinkNodePtr tempNodePtr;
//1.判断是否为空
if(paraQueuePtr->front==paraQueuePtr->rear)
{
printf("the queue if empty.\r\n");
return -1;
}
//2.改变
tempNodePtr=paraQueuePtr->front->next;
resultValue = tempNodePtr->data;
paraQueuePtr->front->next=paraQueuePtr->front;
if(paraQueuePtr->rear==tempNodePtr)
{
paraQueuePtr->rear=paraQueuePtr->front;
}
tempNodePtr=NULL;
//free(tempNodePtr); //释放内存
//3.返回值
return resultValue;
}
void testLinkQueue(){
LinkQueuePtr tempQueuePtr;
tempQueuePtr=initQueue();
enqueue(tempQueuePtr,10);
enqueue(tempQueuePtr,30);
enqueue(tempQueuePtr,50);
outputLinkQueue(tempQueuePtr);
printf("dequeue gets %d\r\n",dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n",dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n",dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n",dequeue(tempQueuePtr));
enqueue(tempQueuePtr,8);
outputLinkQueue(tempQueuePtr);
}
int main()
{
testLinkQueue();
return 1;
}