简单链队列

//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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值