关闭

List 模板实现

130人阅读 评论(0) 收藏 举报
// template.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include <iostream>
using namespace std;


template<class T>
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<class T>List<T>::List() //构造函数
{
pFirst = NULL;
}


template<class T> void List<T>::Add(T &t)
{
Node * temp = new Node();
temp->pT = &t;
temp->pNext = pFirst;
pFirst = temp;
}


template<class T> void List<T>::Remove(T &t)
{
Node * q = NULL; //待删节点
if(*(pFirst->pT) == t)
{
q = pFirst;
pFirst = pFirst ->pNext;
}
else 
for(Node * p = pFirst,* r = pFirst;p!=NULL;r=p,p=p->pNext)
{
if(*(p->pT) == t)
{
q = p;
r->pNext = p->pNext;
break;
}
}
if(q)
{
delete q->pT;
delete q;
}
}


template<class T> T * List<T>::Find(T & t)
{
for(Node * q =pFirst;q != NULL;q = q->pNext)
if(*(q->pT) ==t)
return q->pT;
return 0;
}


template<class T> void List<T>::PrintList()
{
for(Node * q = pFirst;q != NULL;q = q->pNext)
cout<<*(q->pT)<<"  ";
cout<<endl;
}


template<class T>List<T>::~List()
{
Node * p;
while(p=pFirst)
{
pFirst = pFirst->pNext;
delete p->pT;
delete p->pNext;
}
pFirst = NULL;
}




int _tmain(int argc, _TCHAR* argv[])
{
List<float>floatlist;
for(int i=0;i<5;i++)
{
floatlist.Add(* (new float(i+0.1)));
}
floatlist.PrintList();
float b= 1.1;
float *q = floatlist.Find(b);
if(q)
floatlist.Remove(*q);
floatlist.PrintList();
system("pause");
return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16885次
    • 积分:223
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档