//LinkQueue.h
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
#define NULL 0x00
#include <stdlib.h>
#include <stdio.h>
struct Node
{
int iValue;
struct Node* pNext;
};
typedef struct Node Node;
typedef struct
{
Node* pFront;
Node* pRear;
int iLength;
}LinkQueue;
#endif
//LinkQueue.c
#include "LinkQueue.h"
LinkQueue* InitQueue()
{
LinkQueue* pQueue = (LinkQueue*)malloc( sizeof( LinkQueue ));
if( !pQueue )
return NULL;
pQueue->pFront = NULL;
pQueue->pRear = NULL;
pQueue->iLength = 0;
return pQueue;
}
int EnQueue( LinkQueue* pQueue, Node* pNode )
{
if( !pQueue || !pNode)
return -1;
if( pQueue->pRear )
{
pQueue->pRear->pNext = pNode;
pQueue->pRear = pNode;
}
else
{
pQueue->pRear = pNode;
pQueue->pFront = pNode;
}
pQueue->iLength++;
return 0;
}
Node* DeQueue( LinkQueue* pQueue )
{
if( !pQueue )
return NULL;
Node* pTmp = pQueue->pFront;
pQueue->pFront = pTmp->pNext;
pQueue->iLength--;
return pTmp;
}
void ClearQueue( LinkQueue* pQueue )
{
if( !pQueue )
return;
Node* pTmp = pQueue->pFront;
while( pTmp )
{
free( DeQueue( pQueue ));
pTmp = pQueue->pFront;
}
pQueue->pFront = NULL;
pQueue->pRear = NULL;
}
void DestroyQueue( LinkQueue** pQueue )
{
ClearQueue( *pQueue );
free( *pQueue );
*pQueue = NULL;
}
int QueueLength( LinkQueue* pQueue )
{
if( !pQueue )
return 0;
return pQueue->iLength;
}
Node* GetHeader( LinkQueue* pQueue )
{
if( !pQueue )
return NULL;
return pQueue->pFront;
}
void PrintNode( Node* pNode )
{
if( pNode )
printf( "%d ", pNode->iValue );
}
void QueueTraverse( LinkQueue* pQueue )
{
if( !pQueue )
{
puts( "Queue Empty!" );
return;
}
puts( "" );
Node* pTmp = pQueue->pFront;
while( pTmp )
{
PrintNode( pTmp );
pTmp = pTmp->pNext;
}
puts( "" );
}
Node* CreateNode( int iValue )
{
Node* pNode = (Node*)malloc( sizeof( Node ) );
if( !pNode )
return NULL;
pNode->pNext = NULL;
pNode->iValue = iValue;
return pNode;
}
int main( int argc, char* argv[] )
{
LinkQueue* pQueue = InitQueue();
if( !pQueue )
return -1;
EnQueue( pQueue, CreateNode( 1 ));
EnQueue( pQueue, CreateNode( 2 ));
EnQueue( pQueue, CreateNode( 3 ));
QueueTraverse( pQueue );
printf( "\nQueue Length: %d\n", QueueLength(pQueue ) );
PrintNode( GetHeader( pQueue ));
PrintNode( DeQueue( pQueue ) );
QueueTraverse( pQueue );
EnQueue( pQueue, CreateNode( 4 ));
//ClearQueue( pQueue );
QueueTraverse( pQueue );
DestroyQueue( &pQueue );
QueueTraverse( pQueue );
return 0;
}