/*单向链表
链表的功能包括:向尾节点添加数据,遍历链表中的节点,在链表结束时释放所有节点
*/
class CNode //定义一个节点类
{
public:
CNode *m_pNext; //定义一个节点指针,指向下一个节点
int m_Data; //定义节点的数据
CNode() //定义节点类的构造函数
{
m_pNext = NULL; //将m_pNext设置为空
}
};
class CSLList // 定义链表类CSLList类
{
private:
CNode *m_pHeader; //定义头节点
int m_NodeSum; //定义节点数量
public:
CSLList() //定义链表的构造函数
{
m_pHeader = NULL; //初始化m_pHeader
m_NodeSum = 0; //初始化m_NodeSum
}
~CSLList()
{
if (m_NodeSum > 0)
{
CNode *pDelete = m_pHeader;
CNode *pTmp = NULL;
for (int i=0; i<m_NodeSum; i++)
{
pTmp = pDelete->m_pNext;
delete pDelete;
pDelete = pTmp;
}
m_NodeSum = 0;
pDelete = NULL;
pTmp = NULL;
}
m_pHeader = NULL;
}
CNode* MoveTrail() //移动到尾节点
{
CNode* pTmp = m_pHeader;
for (int i=1;i<m_NodeSum;i++)
{
pTmp = pTmp->m_pNext;
}
return pTmp;
}
void AddNode(CNode *pNode) //添加节点
{
if (m_NodeSum == 0)
{
m_pHeader = pNode;
}
else
{
CNode* pTrail = MoveTrail();
pTrail->m_pNext = pNode;
}
m_NodeSum++;
}
void PassList() //遍历链表
{
if (m_NodeSum > 0) //判断链表是否为空
{
CNode* pTmp = m_pHeader;
//cout << pTmp.m_Data << endl;
printf("%4d", pTmp->m_Data);
for (int i=1;i<m_NodeSum;i++)
{
pTmp = pTmp->m_pNext;
printf("%4d", pTmp->m_Data);
}
}
}
};
C++ 单向链表
最新推荐文章于 2024-03-26 21:07:09 发布