1.代码
#include<stdio.h>
#include<malloc.h>
/**
*链队列节点.
*/
typedef struct LinkNode{
int data;
struct LinkNode* next;
}*LinkNodePtr;
/**
*链队列
*/
typedef struct LinkQueue{
LinkNodePtr front;
LinkNodePtr rear;
}*LinkQueuePtr;
/**
*Construct an empty queue.
*/
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;
}
/**
*Output the queue.
*/
void outputLinkQueue(LinkQueuePtr paraQueuePtr){
LinkNodePtr tempPtr=paraQueuePtr->front->next;
while(tempPtr!=NULL)
{
printf("%d ",tempPtr->data);
tempPtr=tempPtr->next;
}
printf("\r\n");
}
/**
*Enqueue.
*/
void enqueue(LinkQueuePtr paraQueuePtr,int paraElement){
LinkNodePtr tempNodePtr=(LinkNodePtr)malloc(sizeof(struct LinkNode));
tempNodePtr->data=paraElement;
tempNodePtr->next=NULL;
//create a new node.
paraQueuePtr->rear->next=tempNodePtr;
//Link to the rear.
paraQueuePtr->rear=tempNodePtr;
//new rear.
}
/**
*Dequeue.
*@return the value of the header
*/
int dequeue(LinkQueuePtr paraQueuePtr){
int resultValue;
LinkNodePtr tempNodePtr;
//judge the queue is the queue empty.
if(paraQueuePtr->front==paraQueuePtr->rear)
{
printf("The queue is empty.\r\n");
return -1;
}
//Change the queue.
tempNodePtr=paraQueuePtr->front->next;
resultValue=tempNodePtr->data;
paraQueuePtr->front->next=paraQueuePtr->front->next->next;
if(paraQueuePtr->rear==tempNodePtr)
{
paraQueuePtr->rear=paraQueuePtr->front;
}
//free space.
free(tempNodePtr);
//return.
return resultValue;
}
/**
*Unit test.
*/
void testLinkQueue(){
LinkQueuePtr tempQueuePtr;
tempQueuePtr=initQueue();
enqueue(tempQueuePtr,10);
enqueue(tempQueuePtr,20);
enqueue(tempQueuePtr,30);
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,40);
outputLinkQueue(tempQueuePtr);
}
/**
*The entrance.
*/
int main(){
testLinkQueue();
return 0;
}
2.运行结果
10 20 30
dequeue gets 10
dequeue gets 20
dequeue gets 30
The queue is empty.
dequeue gets -1
40
3.说明
链队列队尾入队,队头出队.
判断队空,队头等于队尾.