编写单向链表

来源:互联网 发布:windows允许ruby 编辑:程序博客网 时间:2024/05/22 06:07

题目:

现编写一个简单的单向链表类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;}


 

0 0
原创粉丝点击