#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;
}
另外,還想請教下,這段程式在函式里動態申請的空間貌似沒有釋放,會造成記憶體泄露嗎?
uj5u.com熱心網友回復:
(上面的代碼75行,額。。。應該是只有文字說明的,新手不會發帖,所以。。。忽略吧~~)程式正在寫,所以主函式可能還沒使用鏈表一些的功能
(新人求教,望各位大神不吝賜教啊~~)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140579.html
標籤:基礎類
下一篇:如何學習C語言?
