CPP單項鍊表插入資料初試
//vs2015_unit
#include
#include
using namespace std;
int Flag=0;
typedef int DATA;
struct SNode
{
DATA data;
SNode* pNext;
};
class CLink
{
SNode* m_pHead;
char m_Name[20];
public:
CLink()//建構函式
{
m_pHead=NULL;
} ~CLink() { //cout << m_Name << endl; RemoveAll(); } void RemoveAll(); void SetName(const char *p); void AddHead(DATA data); void AddTail(DATA data); void Print(); int GetCount();
private:
};
void CLink :: RemoveAll()
{
SNode *p = m_pHead, *p1;
while §
{
p1 = p;//清理堆空間,清理的順序是先建立的後清理。
p = p->pNext;
delete p1;
}
}
void CLink::SetName(const char p)
{
strcpy_s(m_Name, 20, p);
}
void CLink:: AddHead(DATA data)
{
SNode p = new SNode;
p->data = data;
p->pNext = m_pHead;
m_pHead = p;
}
void CLink::AddTail(DATA data)
{
SNode* p = new SNode;
p->data = data;
p->pNext = NULL;
if (!m_pHead)
{
m_pHead = p;
return;
}
SNode* p1 = m_pHead;
while (p1->pNext != NULL)
{
p1 = p1->pNext;
}
p1->pNext = p;
}
void CLink::Print()
{
cout << m_Name << endl;
SNode *p = m_pHead;
while §
{
cout << p->data << endl;
p = p->pNext;
}
}
int CLink:: GetCount()
{
SNode *p = m_pHead;
int i = 0;
while §
{
p = p->pNext;
i++;
}
return i;
}
struct SList
{
SNode * m_pHead=nullptr;
CLink link;
SList()
{
}
SList(const char *p)
{
link.SetName§;
}
void Menu()
{
cout << “0.返回上級選單” << endl;
cout << “1.插入資料” << endl;
cout << “2.列印資料” << endl;
cout << “3.列印節點數” << endl;
int i = 0;
cin >> i;
switch (i)
{
case 0:
return;
case 1:
AddData();
return;
case 2:
Print();
break;
case 3:
GetNodes();
break;
default:
break;
}
}
void AddData()
{
cout << “0.返回上級選單” << endl;
cout << “1.頭插入資料” << endl;
cout << “2.尾插入資料” << endl;
int i = -1;
cin >> i;
switch (i)
{
case 0:
return;
case 1:
AddHead();
break;
case 2:
AddTail();
break;
default:
break;
};
}
void AddHead()
{
Flag = 1;
cout << "請輸入一個整數" << endl;
DATA data = -1;
cin >> data;
while (Flag)
{
link.AddHead(data);
char c;
cout << "是否繼續新增?y/n" << endl;
cin >> c;
if (c == 'y' || c == 'Y') { AddData(); }
else
{
Flag = 0;
//return;
}
}
}
void AddTail()
{
cout << "請輸入一個整數" << endl;
DATA data = -1;
cin >> data;
link.AddTail(data);
}
void Print()
{
link.Print();
system("pause");
}
void GetNodes()
{
int n= link.GetCount();
cout <<"共有"<< n<<"個節點" << endl;
system("pause");
}
};
int main()
{
SList list1(“list1”);
SList list2(“list2”);
int i = 0;
do
{
system("cls");
cout << "請選擇連結串列(1-2):" << endl;
cout << "選擇 0 退出:" << endl;
cin >> i;
switch (i)
{
case 1:
list1.Menu();
break;
case 2:
list2.Menu();
break;
case 0:
return 0;
default:
break;
}
} while (i);
return 0;
}
//
//CLink link1;
//link1.SetName(“List1”);
//link1.AddTail(9);
//link1.AddHead(8);
//link1.AddTail(7);
//link1.AddTail(1);
//link1.AddTail(2);
//link1.AddTail(3);
//link1.AddHead(1);
//link1.AddHead(2);
//link1.AddHead(3);
//link1.Print();
//cout << “共有” << link1.GetCount() << “條” << endl;
//
//CLink *p = new CLink;
//p->SetName(“堆空間”);
//p->AddHead(45);
//p->AddTail(36);
//p->AddHead(98);
//p->Print();
//delete p;//進入解構函式清理自己用過的堆空間
//
//CLink link2;
//link2.SetName(“List2”);
//link2.AddTail(3);
//link2.AddTail(2);
//link2.AddTail(1);
//link2.AddHead(4);
//link2.AddHead(1);
//link2.AddHead(2);
//link2.AddHead(3);
//link2.Print();
//cout << “共有” << link2.GetCount() << “條” << endl;