单链表的C++实现
2015-04-10 12:36
169 查看
#include<iostream>
using namespace std;
struct Node
{
int Data;
Node*next;
};
class list
{
Node*head;
public:
list(){head=NULL;}
void insertlist(int aData,int bData);
void deletelist(int aData);
void outputlist();
Node*gethead(){return head;}
};
void list::insertlist(int aData,int bData) //设aData是结点a中的数据,bData是结点b中的数据
{
Node*p,*q,*s; //p指向结点a,q指向结点a_k,s指向结点b
s=(Node*)new(Node); //动态分配一个新结点
s->Data=bData; //设b为此结点
p=head;
if(head==NULL) //若是空表,使b作为第一个结点
{
head=s;
s->next=NULL;
}
else
if(p->Data==aData) //若a是第一个结点
{
s->next=p;
head=s;
}
else
{
while(p->Data!=aData && p->next!=NULL)//查找结点a
{
q=p;
p=p->next;
}
if(p->Data==aData) ///若有结点a
{
q->next=s;
s->next=p;
}
else //若没有结点a;
{
p->next=s;
s->next=NULL;
}
}
}
void list::deletelist(int aData) //设aData是要删除的结点a中的数据成员
{
Node*p,*q; //p用于指向结点a,q用于指向结a的前一个结点
p=head;
if(p==NULL) //若是空表
return;
if(p->Data==aData) //若a是第一个结点
{
head=p->next;
delete p;
}
else
{
while(p->Data!=aData&&p->next!=NULL) //查找结点a
{
q=p;
p=p->next;
}
if(p->Data==aData) //若有结点a
{
q->next=p->next;
delete p;
}
}
}
void list::outputlist()
{
Node*current=head;
while(current!=NULL)
{
cout<<current->Data<<" ";
current=current->next;
}
cout<<endl;
}
void main()
{
list A,B;
int Data[10]={25,41,16,98,5,67,9,55,1,121};
A.insertlist(0,Data[0]); //建立链表A首结点
for(int i=1;i<10;i++)
A.insertlist(0,Data[i]); //顺序向后插入
cout<<"\n链表A:";
A.outputlist();
A.deletelist(Data[7]);
cout<<"删除元素Data[7]后";
A.outputlist();
B.insertlist(0,Data[0]); //建立链表B首结点
for(int i=0;i<10;i++)
B.insertlist(B.gethead()->Data,Data[i]); //在首结点处顺序向后插入
cout<<"\n链表B:";
B.outputlist();
B.deletelist(67);
cout<<"删除元素67后";
B.outputlist();
}
using namespace std;
struct Node
{
int Data;
Node*next;
};
class list
{
Node*head;
public:
list(){head=NULL;}
void insertlist(int aData,int bData);
void deletelist(int aData);
void outputlist();
Node*gethead(){return head;}
};
void list::insertlist(int aData,int bData) //设aData是结点a中的数据,bData是结点b中的数据
{
Node*p,*q,*s; //p指向结点a,q指向结点a_k,s指向结点b
s=(Node*)new(Node); //动态分配一个新结点
s->Data=bData; //设b为此结点
p=head;
if(head==NULL) //若是空表,使b作为第一个结点
{
head=s;
s->next=NULL;
}
else
if(p->Data==aData) //若a是第一个结点
{
s->next=p;
head=s;
}
else
{
while(p->Data!=aData && p->next!=NULL)//查找结点a
{
q=p;
p=p->next;
}
if(p->Data==aData) ///若有结点a
{
q->next=s;
s->next=p;
}
else //若没有结点a;
{
p->next=s;
s->next=NULL;
}
}
}
void list::deletelist(int aData) //设aData是要删除的结点a中的数据成员
{
Node*p,*q; //p用于指向结点a,q用于指向结a的前一个结点
p=head;
if(p==NULL) //若是空表
return;
if(p->Data==aData) //若a是第一个结点
{
head=p->next;
delete p;
}
else
{
while(p->Data!=aData&&p->next!=NULL) //查找结点a
{
q=p;
p=p->next;
}
if(p->Data==aData) //若有结点a
{
q->next=p->next;
delete p;
}
}
}
void list::outputlist()
{
Node*current=head;
while(current!=NULL)
{
cout<<current->Data<<" ";
current=current->next;
}
cout<<endl;
}
void main()
{
list A,B;
int Data[10]={25,41,16,98,5,67,9,55,1,121};
A.insertlist(0,Data[0]); //建立链表A首结点
for(int i=1;i<10;i++)
A.insertlist(0,Data[i]); //顺序向后插入
cout<<"\n链表A:";
A.outputlist();
A.deletelist(Data[7]);
cout<<"删除元素Data[7]后";
A.outputlist();
B.insertlist(0,Data[0]); //建立链表B首结点
for(int i=0;i<10;i++)
B.insertlist(B.gethead()->Data,Data[i]); //在首结点处顺序向后插入
cout<<"\n链表B:";
B.outputlist();
B.deletelist(67);
cout<<"删除元素67后";
B.outputlist();
}
相关文章推荐
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- C++中用模板类(结点类,链表类)实现的单链表的合并操作!
- 单链表的逆置-C++实现
- 数据结构c++实现----单链表
- 单链表的逆置-C++实现
- 单链表的C++代码实现
- 单链表的逆置-C++实现
- C++实现单链表常用功能(不带头结点)
- 数据结构之单链表实现队列C++
- 单链表基础操作C++实现
- 单链表的插入和删除 C++实现
- 单链表c++简单模板实现
- C++模版编程——单链表的实现
- C++ 单链表实现
- 一个单链表C++简单的实现版本-转自chinaunix
- 数据结构之单链表 C++ 实现
- C++单链表的实现
- C++实现单链表操作
- 单链表之C++实现
- C++实现单链表的逆转