📄 hlist.h
字号:
// HList.h: interface for the CHList class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_LASSLIST_H__F9E6BA57_E122_4002_B6B7_B265D6ABA007__INCLUDED_)
#define AFX_LASSLIST_H__F9E6BA57_E122_4002_B6B7_B265D6ABA007__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//////////////////////////////////////////////////////////////////////////////
//文件名 : HList.h
//功能 : 链表模板
//创建 : 2003.11.27
//修改日期 : 2004.4.5
//作者 : 韩国静
//
#include "public/UniType.h"
//本模板提供了一个链表,可以做为队列来使用,也可以作为普通链表使用
template <class ClassType>
class CHList
{
struct ClassChain{
ClassChain *pNext;
ClassType Node;
}*m_First;
public:
typedef ClassType NODETYPE;
typedef void * HLISTPOSTION;
//////////////构造与析构///////////////////////
CHList() {m_First=0;};
~CHList() {EmptyAll();};
/////////////////////////////////////
//从链表中删除一个节点
bool Remove(NODETYPE *pClass);
//在链表头添加一个新节点
NODETYPE *AddHead();
//在链表尾添加一个新节点
NODETYPE *AddTail();
//删除链表中全部节点
bool EmptyAll();
//得到链表长度
unsigned int GetCount();
//得到存储在链表中的下一个节点内存指针,反复调用可以访问链表所有节点
NODETYPE *MoveToNext(HLISTPOSTION & pPos);
//获取链表首位置,用于GetNextOne访问链表所有节点
HLISTPOSTION MoveToBegin(){return (HLISTPOSTION)m_First;};
NODETYPE *GetCurNode(HLISTPOSTION pPos)
{
return pPos?(&(((ClassChain *)pPos)->Node)):UNI_NULL;
}
////////////////////////////////////////////
};
//得到存储在链表中的一个节点内存指针
template<class ClassType>
ClassType *CHList<ClassType>::MoveToNext(HLISTPOSTION &pPos)
{
ClassChain *pCur;
ClassType *pTemp=UNI_NULL;
if(pPos)
{
pCur=(ClassChain *)pPos;
pTemp=&pCur->Node;
pPos=(void *)pCur->pNext;
}
return pTemp;
}
//得到链表长度
template<class ClassType>
unsigned int CHList<ClassType>::GetCount()
{
ClassChain *pTemp;
unsigned int dwCount=0;
pTemp=m_First;
while(pTemp!=0)
{
dwCount++;
pTemp=pTemp->pNext;
}
return dwCount;
}
//从链表中删除一个节点
template<class ClassType>
bool CHList<ClassType>::Remove(ClassType *pClass)
{
ClassChain *pTemp,*pPre;
/////////////////////////////////////////////////////
if(pTemp=m_First)
{
pPre=0;
while(pTemp)
{
if(&pTemp->Node==pClass)
{
break;
}
pPre=pTemp;
pTemp=pTemp->pNext;
}
if(pTemp)
{
if(pPre==0)
{
m_First=pTemp->pNext;
}
else
{
pPre->pNext=pTemp->pNext;
}
delete pTemp;
return true;
}
}
return false;
}
//在链表头添加一个新节点
template <class ClassType>
ClassType *CHList<ClassType>::AddHead()
{
ClassChain *pUser;
pUser=new ClassChain;
if(pUser)
{
pUser->pNext=m_First;
m_First=pUser;
return &(pUser->Node);
}
return 0;
}
//在链表尾添加一个新节点
template <class ClassType>
ClassType *CHList<ClassType>::AddTail()
{
ClassChain *pUser,*pTemp;
pUser=new ClassChain;
if(pUser)
{
pUser->pNext=0;
if(pTemp=m_First)
{
while(pTemp->pNext!=0)
pTemp=pTemp->pNext;
pTemp->pNext=pUser;
}
else
{
m_First=pUser;
}
return &(pUser->Node);
}
return 0;
}
//删除链表中全部节点
template <class ClassType>
bool CHList<ClassType>:: EmptyAll()
{
ClassChain *pTemp;
/////////////////////////////////////////////////////
while(m_First)
{
pTemp=m_First;
m_First=m_First->pNext;
delete pTemp;
}
//////////////////////////////////
return true;
}
#endif // !defined(AFX_LASSLIST_H__F9E6BA57_E122_4002_B6B7_B265D6ABA007__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -