您的位置:首页 > 编程语言 > C语言/C++

O(NlgK)问题队列实现文件C语言

2011-04-15 23:01 489 查看
/*	Queue.c -- 队列实现文件	*/
#include "Queue.h"

/*	局部函数声明	*/

static QueueNode * makeNode_Q (const Item item) ;

/*	接口函数定义	*/

BOOL Initialize_Q (Queue * const pq)
{
	*pq = (struct queue *) malloc (sizeof (struct queue)) ;
	if (NULL == *pq)
		return FALSE ;
	(*pq) -> front = (*pq) -> rear = NULL ;
	(*pq) -> current = 0 ;

	return TRUE ;
}

BOOL IsEmpty_Q (const Queue * const pq)
{
	if (0 == (*pq) -> current)
		return TRUE ;
	else
		return FALSE ;
}

BOOL EnQueue_Q (const Queue * const pq, const Item item)
{
	QueueNode * newNode ;

	newNode = makeNode_Q (item) ;
	if (NULL == newNode)
		return FALSE ;
	if (IsEmpty_Q (pq))
		(*pq) -> front = (*pq) -> rear = newNode ;
	else
	{
		(*pq) -> rear -> next = newNode ;
		(*pq) -> rear = newNode ;
	}
	(*pq) -> current++ ;

	return TRUE ;
}

BOOL DeQueue_Q (const Queue * const pq, Item * const messenger)
{
	QueueNode * record ;

	if (IsEmpty_Q (pq))
		return FALSE ;
	record = (*pq) -> front ;
	*messenger = record -> item ;
	(*pq) -> front = record -> next ;
	if (record == (*pq) -> rear)
		(*pq) -> rear = NULL ;
	free (record) ;
	(*pq) -> current-- ;

	return TRUE ;
}

void Release_Q (const Queue * const pq)
{
	QueueNode * record ;

	while ((*pq) -> front != NULL)
	{
		record = (*pq) -> front ;
		(*pq) -> front = record -> next ;
		free (record) ;
	}
	free (*pq) ;
}

/*	局部函数定义	*/

static QueueNode * makeNode_Q (const Item item)
{
	QueueNode * newNode ;

	newNode = (QueueNode *) malloc (sizeof (QueueNode)) ;
	if (NULL == newNode)
		return NULL ;
	newNode -> item = item ;
	newNode -> next = NULL ;

	return newNode ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: