数据结构2_链表程序实现
在这里实现了带头结点的链表,包含插入,删除,查询,清空链表一系列功能
#include<iostream>
using namespace std;
class LinkList
{
char *elem;
LinkList *next;
static int length;
public:
LinkList(char *e) //一个含头结点的构造函数
{
elem=NULL;
next=new LinkList(e,1);
}
LinkList(char *e,int i)//不含头结点的构造函数
{
length++;
elem=new char(sizeof(e)+1);
strcpy(elem,e);
next=NULL;
}
void GetElem(int i,char *&e); //查询第i个元素的值
void ListInsert(int i,char *e); //插入函数
void ListDelete(int i,char *&e); //节点删除函数
void ClearList(); //清空链表
void CreatList(int n); //生成N个节点的链表
void show(); //显示所有节点
};
int LinkList::length=0;
void LinkList::GetElem(int i,char *&e)
{
LinkList *p=this->next;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{ cout<<"error position"<<endl;
return;
}
e=new char(sizeof(p->elem)+1);
strcpy(e,p->elem);
}
void LinkList::ListInsert(int i,char *e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=new LinkList(e,1);
q->next=p->next;
p->next=q;
show();
}
void LinkList::ListDelete(int i,char *&e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=p->next;
if(i!=length) //删除最后一个节点时,需要注意的是q->next是没有定义的,会出错的,因此此处要特别对待!!!!
p->next=q->next;
else
p->next=NULL;
e=new char(sizeof(q->elem)+1);
strcpy(e,q->elem);
delete(q);
length--;
show();
}
void LinkList::ClearList()
{
LinkList *p;
while(this->next)
{
p=this->next;
this->next=p->next;
delete p;
}
length=0;
cout<<"all nodes are cleared"<<endl;
}
void LinkList::show()
{
LinkList *p=this->next;
int i=1;
while(p)
{
cout<<"the "<<i<<"th Node elem is:"<<p->elem<<endl;
p=p->next;
i++;
}
cout<<"_______________________________"<<endl;
}
void main()
{
LinkList a("baichi");
char *co=NULL;
a.ListInsert(1,"sb250");
a.ListInsert(1,"dasb250dsdf");
a.ListDelete(3,co);
cout<<"bei shan chu de:"<<co<<endl;
a.GetElem(1,co);
cout<<co<<endl;
a.GetElem(3,co);
a.ClearList();
}
using namespace std;
class LinkList
{
char *elem;
LinkList *next;
static int length;
public:
LinkList(char *e) //一个含头结点的构造函数
{
elem=NULL;
next=new LinkList(e,1);
}
LinkList(char *e,int i)//不含头结点的构造函数
{
length++;
elem=new char(sizeof(e)+1);
strcpy(elem,e);
next=NULL;
}
void GetElem(int i,char *&e); //查询第i个元素的值
void ListInsert(int i,char *e); //插入函数
void ListDelete(int i,char *&e); //节点删除函数
void ClearList(); //清空链表
void CreatList(int n); //生成N个节点的链表
void show(); //显示所有节点
};
int LinkList::length=0;
void LinkList::GetElem(int i,char *&e)
{
LinkList *p=this->next;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
{ cout<<"error position"<<endl;
return;
}
e=new char(sizeof(p->elem)+1);
strcpy(e,p->elem);
}
void LinkList::ListInsert(int i,char *e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=new LinkList(e,1);
q->next=p->next;
p->next=q;
show();
}
void LinkList::ListDelete(int i,char *&e)
{
LinkList *p=this;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"insert position error"<<endl;
return;
}
LinkList *q=p->next;
if(i!=length) //删除最后一个节点时,需要注意的是q->next是没有定义的,会出错的,因此此处要特别对待!!!!
p->next=q->next;
else
p->next=NULL;
e=new char(sizeof(q->elem)+1);
strcpy(e,q->elem);
delete(q);
length--;
show();
}
void LinkList::ClearList()
{
LinkList *p;
while(this->next)
{
p=this->next;
this->next=p->next;
delete p;
}
length=0;
cout<<"all nodes are cleared"<<endl;
}
void LinkList::show()
{
LinkList *p=this->next;
int i=1;
while(p)
{
cout<<"the "<<i<<"th Node elem is:"<<p->elem<<endl;
p=p->next;
i++;
}
cout<<"_______________________________"<<endl;
}
void main()
{
LinkList a("baichi");
char *co=NULL;
a.ListInsert(1,"sb250");
a.ListInsert(1,"dasb250dsdf");
a.ListDelete(3,co);
cout<<"bei shan chu de:"<<co<<endl;
a.GetElem(1,co);
cout<<co<<endl;
a.GetElem(3,co);
a.ClearList();
}
posted on 2014-05-15 13:18 zhuangwy_CV 阅读(185) 评论(1) 编辑 收藏 举报