13,871
社区成员




#include <iostream>
using namespace std;
template<class T>
class List{
public:
List();
void Add(T &); //在 Link 表头添加新结点
void Remove(T &); //在 Link 中删除含有特定值的元素
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 &pt){
Node *temp=new Node;
temp->pT=&pt;
temp->pNext=pFirst; //头指针给新结点的pNext
pFirst=temp; //头指针指向新结点
//delete temp;
}
template<class T>
void List<T>::Remove(T &pt){
Node *p=0;
if(*(pFirst->pT)==pt){ //先判断要删的是否是头结点,如是,头结点脱链
p=pFirst;
pFirst=pFirst->pNext;
}
else{ //查找,脱链
for(Node *q=pFirst;q->pNext;q=q->pNext)
if(*(q->pNext->pT)==pt){
p=q->pNext;
q->pNext=p->pNext;
break;
}
}
if(p) {delete[] p->pT;delete[] p;}
else cout<<"Not finding!\n";
}
template<class T>
T* List<T>::Find(T &pt){
for(Node *p=pFirst;p;p=p->pNext)
if(*(p->pT)==pt) return p->pT;
return 0;
}
template<class T>
void List<T>::PrintList(){
for(Node *p=pFirst;p;p=p->pNext) cout<<*(p->pT)<<"\t";
cout<<endl;
}
template<class T>
List<T>::~List(){
Node *p;
while(!pFirst){
p=pFirst;
pFirst=pFirst->pNext;
delete[] p->pT;
delete[] p;
}
}
int main(){
List<float> list;
cout<<"请输入链表内容,0结束\n";
for(int i=0;i<7;i++)
list.Add(* new float(i+0.4));
//为什么用下面的代码不行?
/* float i;
while(1){
cin>>i;
if(!i) break;
list.Add(i);
}
*/
list.PrintList();
return 0;
}