List 模板实现

// 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;
}

阅读更多
个人分类: c++
上一篇虚拟继承
下一篇使用C语言将ls命令重定向实现
想对作者说点什么? 我来说一句

List实现 数据结构 模板

2010年05月10日 237KB 下载

没有更多推荐了,返回首页

关闭
关闭