定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。
【例5.13】定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。
#include #include
template // 定义类模板
class List
{
public:
List();
void Add(T&);
void Remove(T&);
T* Find(T&);
void PrintList();
~List();
protected:
struct Node
{
Node* pNext;...
定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。
【例5.13】定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。
#include #include
template // 定义类模板
class List
{
public:
List();
void Add(T&);
void Remove(T&);
T* Find(T&);
void PrintList();
~List();
protected:
struct Node
{
Node* pNext;
T* Pt;
};
Node* pFirst; };
template
List::List()
{
pFirst=0;
}
template
void List::Add(T& t) {
Node* temp = new Node;
temp->Pt =&t;
temp->pNext = pFirst;
pFirst = temp;
}
template
void List::Remove(T&t) {
Node *q=0;
if(*pFirst->Pt==t)
{
q=pFirst;
pFirst=pFirst->pNext;
}
else
{
for(Node*p=pFirst;p->pNext;p=p->pNext)
if(*(p->pNext->Pt)==t)
{
q=p->pNext;
p->pNext=q->pNext;
break;
}
}
if(q)
{
delete q->Pt;
delete q;
}
else
cout<<"No surch node!"<
T* List::Find(T& t) {
for(Node* p=pFirst;p;p=p->pNext)
{
if(*(p->Pt)==t)
return p->Pt;
}
return 0;
}
template
void List::PrintList() {
for(Node* p=pFirst;p;p=p->pNext)
{
cout<<*(p->Pt)<<"|"; // 必须由T的友元处理T对象输出
}
cout<
List::~List()
{
Node* p=pFirst;
while (!p)
{
pFirst=pFirst->pNext;
delete p->Pt;
delete p;
p=pFirst;
}
}
void main()
{
List floatList; // floatList是模板类List的对象
for(int i=1;i<7;i++)
{
floatList.Add(*new float(i+0.3));
}
floatList.PrintList( );
float b=3.3;
float* pa=floatList.Find(b);
if(pa)
floatList.Remove(*pa);
floatList.Remove(*new float(3.3));
floatList.PrintList(); }
程序的运行结果为:
6.3|5.3|4.3|3.3|2.3|1.3| No surch node!
6.3|5.3|4.3|2.3|1.3|
本文档为【定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。