設計原則:單一職責
可讀性,維護修改,安全,構造析構
#include<iostream>
using namespace std;
struct Node
{
int nValue;
Node* pNext;
};
class CList //鏈表類
{
private:
Node* m_pHead; //鏈表頭尾,長度
Node* m_pEnd;
int m_nLength;
public:
Node* begin() //接口函數
{
return m_pHead;
}
Node* end()
{
return NULL;
}
public:
CList() //創建空鏈表
{
m_pHead = NULL;
m_pEnd = NULL;
m_nLength = 0;
}
CList(int nCount) //創建有nCount個結點的鏈表
{
// 初始化成員變量
m_pHead = NULL;
m_pEnd = NULL;
m_nLength = 0;
for (int i = 0;i < nCount;i++)
{
Push_Back(0);
}
}
~CList()
{
while(m_pHead)
Pop_Front();
}
public:
void Push_Back(int nValue) //在鏈表上添加一個數
{
//創建一個結點,把值裝進去
Node* node = new Node;
node->nValue = nValue;
node->pNext = NULL;
//把這個結點放到鏈表的尾部
if(!m_pHead) //如果現在沒有鏈表的時候
{
m_pHead = node;
m_pEnd = node;
}
else //鏈表有結點的時候
{
m_pEnd->pNext = node;
m_pEnd = node;
}
m_nLength++;
}
void Pop_Front() //刪除一個鏈表結點
{
//判斷鏈表有沒有結點
if(m_pHead == NULL)
return;
//只有一個結點的時候
if(m_pHead == m_pEnd)
{
delete m_pHead;
m_pHead = NULL;
m_pEnd = NULL;
m_nLength = 0;
return ;
}
//有多個結點的時候
Node *pDel = m_pHead;
m_pHead = m_pHead->pNext;
delete pDel;
pDel = NULL;
m_nLength--;
}
void Show() //測試代碼
{
Node* pTemp = m_pHead;
while (pTemp)
{
cout << pTemp->nValue <<" ";
pTemp = pTemp->pNext;
}
cout << "nLength:"<<m_nLength<<endl;
}
};
int main()
{
//------------------------------------------
CList lst1;
lst1.Show();
CList lst2(10);
lst2.Show();
lst1.Push_Back(1);
lst1.Show();
lst2.Pop_Front();
lst2.Show();
//------------通過調用接口使用鏈表------------
CList lst;
lst.Push_Back(1);
lst.Push_Back(2);
lst.Push_Back(3);
lst.Push_Back(4);
Node* pTemp = lst.begin();
while(pTemp != lst.end())
{
cout << pTemp->nValue << " ";
pTemp = pTemp->pNext;
}
system("pause");
return 0;
}