www.pudn.com > ActiveH263_V1.00.rar > Queue.cpp


// Queue.cpp: implementation of the Queue class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "ActiveH263.h" 
#include "Queue.h" 
#include  
#include  
#include  
#include  
 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
Queue::Queue() 
{ 
	count = 0; 
	dataLinkHead = dataLinkTail = NULL; 
} 
 
Queue::~Queue() 
{ 
	QueueDataNode *p = dataLinkHead; 
	while ((p = dataLinkHead) != NULL)  
	{ 
		dataLinkHead = dataLinkHead->next; 
		delete p; //释放空间  
	} 
} 
 
//在队尾加入一个新元素 
void Queue::put (unsigned char * newData)  
{  
	QueueDataNode *pNew = new QueueDataNode; //建立一个新的结点 
	if (pNew == NULL) 
	{ 
		cout << "Memory Insufficient!"; 
		return; 
	} 
	//	pNew->data = newData; 
	memcpy(pNew->data,newData,sizeof(pNew->data)); 
	pNew->next = NULL; 
	if (dataLinkTail == NULL) //队列为空, 新结点成为第一个结点 
		dataLinkHead = dataLinkTail = pNew; 
	else  
	{ 
		dataLinkTail->next = pNew;//队列不空, 将结点插入到链表中  
		dataLinkTail = pNew; 
	} 
	count++; 
} 
 
//从队头退出一个元素, 并释放空间。假定队列至少有一个元素 
void Queue::get (unsigned char * getData)  
{  
	QueueDataNode *pNode = dataLinkHead; 
	//	int retVal = pNode->data; 
	memcpy(getData,pNode->data,sizeof(pNode->data)); 
	//只有一个元素时,退出一个元素后,队列为空 
	if (dataLinkHead == dataLinkTail ) 
		dataLinkHead = dataLinkTail = NULL;  
	else 
		dataLinkHead = dataLinkHead->next; 
	count--; 
	//释放节点空间 
	delete pNode; 
}