题目:
现编写一个简单的单向链表类CList:
按照以下类和对象的关系,在CTest类中包含两个CList的对象:
在CTest::Menu函数中打印“1、插入,2、打印,3、显示长度”等菜单。
可以随时选择对2个链表中的任意一个插入或打印。
typedef int DATA;
struct SNode
{
DATA data;
SNode* pNext;
};
class CList
{
SNode *m_pHead;
public:
CList();
~CList();
void AddHead(DATA d) ;
void Print();
int GetCount();
void RemoveAll();
};
class CTest
{
CList m_list1,m_list2;
public:
int Menu();
void Input();
};
void CTest::Input()
{
cout << "请输入一个数字:" << endl;
DATA d;
cin >> d;
cout <<"请选择一个链表:(1-2)"<<endl;
int i = 0;
cin >>i;
if(i == 1)
{
m_list1.AddHead(d);
cout << "链表1总共有:"<<m_list1.GetCount() << "条数据!"<<endl;
m_list1.Print();
}
if(i == 2)
{
m_list2.AddHead(d);
cout << "链表2总共有:"<<m_list2.GetCount() << "条数据!"<<endl;
m_list2.Print();
}
}
答案:
#include <iostream>
using namespace std;
typedef int DATA;
struct SNode
{
DATA data;
SNode* pNext;
};
class CList
{
SNode* m_pHead;
public:
CList()
{
m_pHead = NULL;
}
~CList()
{
SNode *p = m_pHead;
SNode *p1;
while(p)
{
p1 = p;
p = p->pNext;
delete p1;
}
}
void AddHead(DATA d)
{
SNode* p = new SNode();
p->data = d;
p->pNext = m_pHead;
m_pHead = p;
}
void Print()
{
SNode* p = m_pHead;
while(p)
{
cout<<p->data<<endl;
p = p->pNext;
}
}
int GetCount()
{
int i = 0;
SNode*p = m_pHead;
while(p)
{
i++;
p = p->pNext;
}
return i;
}
void RemoveAll()
{
SNode* p = m_pHead;
while(p)
{
delete p;
p=p->pNext;
}
}
};
class CTest
{
CList m_list1, m_list2;
public:
int Menu();
void Input();
};
int CTest::Menu()
{
cout<<"**********1:插入**********"<<endl;
cout<<"**********2:打印**********"<<endl;
cout<<"**********3:显示长度******"<<endl;
cout<<"请输入一个选项"<<endl;
int m;
cin>>m;
return m;
}
void CTest::Input()
{
while (true)
{
cout<<"请输入一个数字:"<<endl;
DATA d;
cin>>d;
cout<<"请选择一个链表:(1 - 2)"<<endl;
int i = 0;
cin>>i;
if (1 == i)
{
int key = Menu();
switch (key)
{
case 1:
m_list1.AddHead(d);
break;
case 3:
cout<<"链表1一共有:"<<m_list1.GetCount()<<"个数据"<<endl;
break;
case 2:
m_list1.Print();
break;
}
}
if (2 == i)
{
int key = Menu();
switch (key)
{
case 1:
m_list2.AddHead(d);
break;
case 3:
cout<<"链表2一共有:"<<m_list2.GetCount()<<"个数据"<<endl;
break;
case 2:
m_list2.Print();
break;
}
}
if (0 == i)
{
return;
}
}
}
int main()
{
CTest test;
test.Input();
return 0;
}