///////////////////////////////////////////////////////////////////////////////
#define define_Type template
#define data_Type VUALESTYPE
//*/////////////////////////////////////////////////////////////////////////////
//**节点************************************************************************
//*/////////////////////////////////////////////////////////////////////////////
///栈、队列节点结构体
define_Type
class _node
{
public:
data_Type m_data;//数据类型
_node *next;//下一个节点指针
};
#define CNode _node
#define LPCNode _node
////////////////////////////////////////
//*///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
类定义部分。
*/
//*////////////////////////////////////////////////////////////////////////////////////////////////////////
//*/////////////////////////////////////////////////////////////////////////////
//****队列********************************************************************
//*/////////////////////////////////////////////////////////////////////////////
define_Type
class CQueueUserDefine
{
LPCNode rear_queue_node;//队尾
long queue_size;
long current_node;
public:
CQueueUserDefine(void);
virtual ~CQueueUserDefine(void);
data_Type PopQueue(data_Type *desData = NULL);
bool PushQueue(const data_Type new_data);
void *GetTop() const ;
long GetQueueSize() const ;
data_Type GetQueueHead() ;
data_Type GetQueueRear() const ;
data_Type GetNextQueueNode() ;
data_Type GetQueueNodeData(const long current_node) ;
private :
bool Empty() const ;
void *MallocMem();
bool FreeMem(void *memory) const ;
void *GetSecondHeadNode(void);
};
//*///////////////////////////////////////////////////////////////////////////////////////////////////////
//****队列************************************************************************************************
//*////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
define_Type
CQueueUserDefine
{
queue_size = current_node = 0;
rear_queue_node = NULL;
}
define_Type
CQueueUserDefine
{
while (!Empty())
{
PopQueue();
}
}
////////////////////////////////////////////////////////
/*
作用:判断是否为空。
*/
////////////////////////////////////////////////////////
define_Type
bool CQueueUserDefine
{
if (rear_queue_node == NULL || queue_size <= 0)
return true;
return false;
}
////////////////////////////////////////////////////////
/*
作用:分配内存。
*/
////////////////////////////////////////////////////////
define_Type
void *CQueueUserDefine
{
CNode *temp_struct = (LPCNode)malloc(sizeof(CNode));
temp_struct->next = NULL;
return (void*)temp_struct;
}
////////////////////////////////////////////////////////
/*
作用:释放内存。
*/
////////////////////////////////////////////////////////
define_Type
bool CQueueUserDefine
{
free(memory);
return true;
}
////////////////////////////////////////////////////////
/*
作用:得到倒数第二个头节点的指针 。
*/
////////////////////////////////////////////////////////
define_Type
void *CQueueUserDefine
{
if (!Empty())
{
LPCNode temp_data = rear_queue_node;
LPCNode temp_data_temp = rear_queue_node;
while (rear_queue_node->next != NULL && !Empty())
{
temp_data_temp = rear_queue_node;
rear_queue_node = rear_queue_node->next;
}
rear_queue_node = temp_data;
return (void *)(temp_data_temp);
}
return NULL;
}
////////////////////////////////////////////////////////
/*
作用:出队列。
*/
////////////////////////////////////////////////////////
define_Type
data_Type CQueueUserDefine
{
if (!Empty())
{
LPCNode temp_data = (LPCNode)GetSecondHeadNode();
LPCNode temp = temp_data;
if (temp_data == NULL) return NULL;
{
if (temp_data->next != NULL)
temp_data = temp_data->next;
if (desData != NULL)
{
ZeroMemory((void*)desData,sizeof (desData));
memcpy((void*)desData,(void *)(&(temp_data->m_data)),sizeof (temp_data->m_data));
}
}
LPCNode temp_data_temp = rear_queue_node;
while (rear_queue_node != temp_data && !Empty())
rear_queue_node = rear_queue_node->next;
FreeMem(rear_queue_node);
if (temp != temp_data) temp->next = NULL;
else temp_data_temp = NULL;
rear_queue_node = NULL;
rear_queue_node = temp_data_temp;
queue_size--;
if (desData != NULL)
return *desData;
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////
/*
作用:入队列。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
bool CQueueUserDefine
{
LPCNode node_temp = (LPCNode)MallocMem();
if (memcpy((void*)(&(node_temp->m_data)),(void *)(&new_data),sizeof (new_data)) != NULL)
{
node_temp->next = rear_queue_node;
rear_queue_node = node_temp;
queue_size++;
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////
/*
作用:得到队列长度。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
long CQueueUserDefine
{
return size_stack;
}
/////////////////////////////////////////////////////////////////////////
/*
作用:得到队列头。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
data_Type CQueueUserDefine
{
LPCNode temp_data = (LPCNode)GetSecondHeadNode();
if (temp_data->next != NULL) return temp_data->next->m_data;
else return temp_data->m_data;
}
/////////////////////////////////////////////////////////////////////////
/*
作用:得到队列尾。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
data_Type CQueueUserDefine
{
return rear_queue_node->m_data;
}
/////////////////////////////////////////////////////////////////////////
/*
作用:遍历队列。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
data_Type CQueueUserDefine
{
return GetQueueNodeData(current_node ++ );
}
/////////////////////////////////////////////////////////////////////////
/*
作用:遍历队列。
*/
/////////////////////////////////////////////////////////////////////////
define_Type
data_Type CQueueUserDefine
{
long _current = 0;
LPCNode temp_node = rear_queue_node;
LPCNode temp = NULL;
current_node = current_node_temp;
if (current_node_temp > queue_size) current_node = 1;
while (current_node > ++_current
&& rear_queue_node != NULL)
rear_queue_node = rear_queue_node->next;
temp = rear_queue_node;
rear_queue_node = temp_node;
current_node = _current+1;
if (current_node > queue_size) current_node = 1;
if (temp != NULL)
return temp->m_data;
return rear_queue_node->m_data;
}
这些函数实现只能在.h文件内……