天天看點

C++ 單向連結清單

/*單向連結清單
	連結清單的功能包括:向尾節點添加資料,周遊連結清單中的節點,在連結清單結束時釋放所有節點
*/

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++

繼續閱讀