![]() |
#2
jcw08122011-08-05 11:29
#include<iostream.h>
template <class T>class List; template <class T>class Node//节点类 请数据公有化 不然后面就是错误 { public: Node(){ next=NULL;} Node(T i){ data=i; next=NULL ;} //不知道原本这个函数有什么用? void dispnode() { cout<<data<<" "; } friend class List<T>; T data; //这里和你定义的不同你自己想想; Node *next; }; template <class T>class List { public: List():L(0){ /* L = new Node<T>; */ }// 你这里创建了节点和PUSHBACK 里创建的节点重复了; ~List() { for(Node<T> *p ; p = L;delete p){L = L->next ;} //我这里定义的意思和你的差不多 你多看看就懂了; /* Node<T> *p=L,*q=p->next; //这个是你定义的;很乱的啊; while(p->next!=NULL) { delete p; p=q; q=p->next; } delete p; */ } bool Listempty() { /* return (p->next==NULL); */ //不清楚你的p 是哪里定义的? } int Lsize() // 本来这个函数我想 定义一个静态整形数据在构造函数用于计算表的大小,想想还是不做大的改动吧; { int n=0; Node<T> *p=L; while(p->next!=NULL) { ++n; p=p->next; } return n; } void Listpush_back(T x)//要调用节点类里的私有数据?你想干什么?所以上面date写成公有的。 { Node<T> *p=new Node<T>(x); p->data=x; p->next=NULL; if(L==0){ L=p; }else{ Node<T> *A; for(A=L;A->next!=NULL;A=A->next); A->next=p;} /* Node<T> *s; while(p!=NULL) // 你为什么不定义一个,指最向后一个节点的指针? { p=p->next; } s= new Node<T>; s->data = x; s->next = NULL; */ /* p=s;不知道你这里有什么用?如果你有一个指向最后节点的指针 这里有赋值还差不多; */ } void Listpop_back() // 删除最后一个节点 哥哥你这里删掉几个节点了?? { Node<T> *p=L; for(int i=0;i<Lsize()-1;i++) { p=p->next; } p->next=NULL; } void dispList() { Node<T> *p=L;//这里 只要定义指向表就可以了; while(p != NULL) { p->dispnode(); p=p->next; } } private: Node<T> *L; }; int main() { List<int> lst; lst.Listpush_back(1); lst.Listpush_back(2); lst.dispList(); lst.Listpop_back(); cout<<endl; lst.dispList(); return 1; } ![]() |
#include<iostream.h>
template <class T>
class List;
template <class T>
class Node
{T data;
Node *next;
public:
Node(){next=NULL;}
Node(T i,Node *p){data=i;next=p;}
void dispnode()
{cout<<data<<" ";
}
friend class List<T>;
};
template <class T>
class List
{Node<T> *L;
public:
List(){L=new Node<T>;}
~List()
{Node<T> *p=L,*q=p->next;
while(p->next!=NULL)
{delete p;
p=q;
q=p->next;
}
delete p;
}
bool Listempty()
{return (p->next==NULL);
}
int Listsize()
{int n=0;
Node<T> *p=L;
while(p->next!=NULL)
{n++;
p=p->next;
}
return n;
}
void Listpush_back(T x)
{Node<T> *p=L->next;
Node<T> *s;
while(p!=NULL)
{p=p->next;
}
s=new Node<T>;
s->data=x;
p=s;
}
void Listpop_back()
{Node<T> *p=L;
for(int i=0;i<Listsize()-1;i++)
{p=p->next;
p=NULL;
delete p;
}
}
void dispList()
{Node<T> *p=L->next;
while(p!=NULL)
{p->dispnode();
p=p->next;
}
}
};
int main()
{List<int> lst;
lst.Listpush_back(1);
lst.Listpush_back(2);
lst.dispList();
lst.Listpop_back();
lst.dispList();
return 1;
}