数据结构用C++类模板创建链表,插入,删除,输出,怎么初始化对象

#include<iostream>
using namespace std;
template <class T>
class Link
{
public:
T data;
Link <T> *next;
Link(const T info,const Link<T> *nextvalue=NULL)
{
data=info;
next=nextvalue;
}
Link(const Link<T> *nextvalue)
{
next=nextvalue;
}
};
template <class T>
class lnkList: public Link <T>
{
private:
Link<T> *head,*tail;
Link<T> *setPos(const int i);
public:
lnkList(int defSize)
{
head=tail=new Link<T>;
}
~lnkList()
{
Link<T> *temp;
while(head!=NULL)
{
tmp=head;
head=head->next;
delete tmp;
}
}
bool append(const T value);
void show();
bool getPos(int &p,const T value);
bool insert(const int p,const T value);
bool deletea(const int p);
};
template <class T>
Link<T> * lnkList <T>::setPos(const int i)
{
int count=0;
if(i==1)
return head;
Link<T> *p=new Link<T>(head->next);
while(p!=NULL&& count<i)
{
p=p->next;
count++;
}
return p;
}
template <class T>
bool lnkList<T>::append(const T value)
{
Link <T> *q;
Link <T>*p=new Link<T>(head->next);
q=new Link <T>(value,p->next);
p->data=value;
p=q;

}
template <class T>
void lnkList<T>::show()
{
Link <T>*p=new Link<T>(head->next);
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
template <class T>
bool lnkList<T>::insert(const int p,const T value)
{
Link <T> *q,*r;
if(q=setPos(p-1)==NULL)
{
cout<<"非法插入!"<<endl;
return false;
}
r=new Link <T>(value,q->next);
q->next=r;
if(q==tail)
tail=r;
return true;
}
template <class T>
bool lnkList<T>::deletea(const int p)
{
Link <T> *q,*r;
if((q=setPos(p-1))==NULL||q=tail)
{
cout<<"非法删除点"<<endl;
return false;
}
r=q->next;
if(r==tail)
{
tail=q;
q->next=NULL;
delete r;
}
return true;
}
int main()
{
int length,value,i;
cout<<endl<<"所创建的链表的长度:";
cin>>length;
lnkList<int> a();
for(i=0;i<length;i++)
{
cin>>value;
a.append(value);
}
cout<<endl<<"当前链表的结点:";
a.show();
return 0;
}

我替你改了一些bug

#include<iostream>
using namespace std;
template <class T>
class Link
{
public:
T data;
Link <T> *next;
Link(const T info, Link<T> *nextvalue=NULL)
{
data=info;
next=nextvalue;
}
Link(Link<T> *nextvalue)
{
next=nextvalue;
}
Link()
{
}
};
template <class T>
class lnkList: public Link <T>
{
private:
Link<T> *head,*tail;
Link<T> *setPos(const int i);
public:
lnkList()
{
head=tail=new Link<T>;
}
~lnkList()
{
Link<T> *tmp;
while(head!=NULL)
{
tmp=head;
head=head->next;
delete tmp;
}
}
bool append(const T value);
void show();
bool getPos(int &p,const T value);
bool insert(const int p,const T value);
bool deletea(const int p);
};
template <class T>
Link<T> * lnkList <T>::setPos(const int i)
{
int count=0;
if(i==1)
return head;
Link<T> *p=new Link<T>(head->next);
while(p!=NULL&& count<i)
{
p=p->next;
count++;
}
return p;
}
template <class T>
bool lnkList<T>::append(const T value)
{
Link <T> *q;
Link <T>*p=new Link<T>(head->next);
q=new Link <T>(value,p->next);
p->data=value;
p=q;
return true;
}
template <class T>
void lnkList<T>::show()
{
Link <T>*p=new Link<T>(head->next);
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
template <class T>
bool lnkList<T>::insert(const int p,const T value)
{
Link <T> *q,*r;
if(q=setPos(p-1)==NULL)
{
cout<<"非法插入!"<<endl;
return false;
}
r=new Link <T>(value,q->next);
q->next=r;
if(q==tail)
tail=r;
return true;
}
template <class T>
bool lnkList<T>::deletea(const int p)
{
Link <T> *q,*r;
if((q=setPos(p-1))==NULL||q=tail)
{
cout<<"非法删除点"<<endl;
return false;
}
r=q->next;
if(r==tail)
{
tail=q;
q->next=NULL;
delete r;
}
return true;
}
int main()
{
int length,value,i;
cout<<endl<<"所创建的链表的长度:";
cin>>length;
lnkList<int> a;
for(i=0;i<length;i++)
{
cin>>value;
a.append(value);
}
cout<<endl<<"当前链表的结点:";
a.show();
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜