代码如下;
#include<iostream>
using namespace std;
//创建一个链表类模板
template <class T>class List{
public:
List(){//构造函数
pFirst=0;//初始化头结点
}
void push_back(T&);//链表加入元素
void size();
void Remove(T&);//链表删除元素
T *check(T&);//查找元素
void PrintList();//打印元素
~List(){//析构函数
Node *p;
while(p=pFirst){
pFirst=pFirst->pNext;
delete p->pT;
delete p;
}
}
protected:
//建立链表节点
struct Node{
Node* pNext;//下一个节点
T* pT;
};
Node *pFirst;//头结点指针
};
//链表加入元素
template <class T>
void List<T>::push_back(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=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;
}
}
//查找
template <class T>
T* List<T>::check(T& t){
for(Node *p=pFirst;p;p=p->pNext){
if(*(p->pT)==t){
return p->pT;
}
return 0;
}
}
//打印
template <class T>
void List<T>::PrintList(){
for(Node *p=pFirst;p;p=p->pNext){
cout<<*(p->pT)<<" ";
}
cout<<endl;
}
int main(){
List<double> DoubleList;
for(int i=1;i<8;i++){
DoubleList.push_back(*new double(i+0.63));
}
DoubleList.PrintList();
double a=7.63;
double *po=DoubleList.check(a);
if(po){
DoubleList.Remove(*po);
}
DoubleList.PrintList();
return 0;
}
(全文完)