C++实现的链表类实例
本文实例讲述了C++实现的链表类。分享给大家供大家参考。具体如下:
#include<iostream>
usingnamespacestd;
classlinklist
{
private:
structnode
{
intdata;
node*link;
}*p;
public:
linklist();
voidappend(intnum);
voidadd_as_first(intnum);
voidaddafter(intc,intnum);
voiddel(intnum);
voiddisplay();
intcount();
~linklist();
};
linklist::linklist()
{
p=NULL;
}
voidlinklist::append(intnum)
{
node*q,*t;
if(p==NULL)
{
p=newnode;
p->data=num;
p->link=NULL;
}
else
{
q=p;
while(q->link!=NULL)
q=q->link;
t=newnode;
t->data=num;
t->link=NULL;
q->link=t;
}
}
voidlinklist::add_as_first(intnum)
{
node*q;
q=newnode;
q->data=num;
q->link=p;
p=q;
}
voidlinklist::addafter(intc,intnum)
{
node*q,*t;
inti;
for(i=0,q=p;i<c;i++)
{
q=q->link;
if(q==NULL)
{
cout<<"\nTherearelessthan"<<c<<"elements.";
return;
}
}
t=newnode;
t->data=num;
t->link=q->link;
q->link=t;
}
voidlinklist::del(intnum)
{
node*q,*r;
q=p;
if(q->data==num)
{
p=q->link;
deleteq;
return;
}
r=q;
while(q!=NULL)
{
if(q->data==num)
{
r->link=q->link;
deleteq;
return;
}
r=q;
q=q->link;
}
cout<<"\nElement"<<num<<"notFound.";
}
voidlinklist::display()
{
node*q;
cout<<endl;
for(q=p;q!=NULL;q=q->link)
cout<<endl<<q->data;
}
intlinklist::count()
{
node*q;
intc=0;
for(q=p;q!=NULL;q=q->link)
c++;
returnc;
}
linklist::~linklist()
{
node*q;
if(p==NULL)
return;
while(p!=NULL)
{
q=p->link;
deletep;
p=q;
}
}
intmain()
{
linklistll;
cout<<"No.ofelements="<<ll.count();
ll.append(12);
ll.append(13);
ll.append(23);
ll.append(43);
ll.append(44);
ll.append(50);
ll.add_as_first(2);
ll.add_as_first(1);
ll.addafter(3,333);
ll.addafter(6,666);
ll.display();
cout<<"\nNo.ofelements="<<ll.count();
ll.del(333);
ll.del(12);
ll.del(98);
cout<<"\nNo.ofelements="<<ll.count();
return0;
}
希望本文所述对大家的C++程序设计有所帮助。