/*單向連結清單
連結清單的功能包括:向尾節點添加資料,周遊連結清單中的節點,在連結清單結束時釋放所有節點
*/
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);
}
}
}
};