#include <iostream.h>
class MyList
{
public:
int data;
MyList *next;
MyList (int n,MyList *p=0)
{
data=n;next=p;
}
};
class LinkList{
private:
MyList *head;
public:
LinkList()
{
head=0;
}
void Create();
void Print();
void compositor();
void Delete();
void Insert();
void Combine(LinkList );
void Average();
};
void LinkList::Create()
{
int i,x,n;
MyList *p,*p1;
head=0;
cout<<"输入个数:";
cin>>n;
cout<<"第1个:";
cin>>x;
head=p=new MyList(x);
for (i=1;i<n;i++)
{
cout<<"第"<<i+1<<"个:";
cin>>x;
p1=new MyList(x);
p->next=p1;
p=p->next;
}
p->next=0;
}
void LinkList::Print()
{
MyList *p=head;
while (p!=0)
{
cout<<" "<<p->data;
p=p->next;
}
cout<<endl;
}
void LinkList::Delete()
{
int x;
int i=0;
cout<<"请输入你要清除的那个数:";
cin>>x;
MyList *p=head,*p1=0,*p2=0;
while ((p->data)==x)
{ i=1;
head=p->next;
p=head;
}
p=head;
if (p!=0)
{
while (p->next!=0)
{
if(p->next->data==x)
{ i=1;
p1=p->next;
p->next=p->next->next;
delete p1;
}
else
p=p->next;
}
}
if(i==0)
cout<<"没有你要清除的那个数."<<"此时链表为:"<<endl;
}
void LinkList::Insert()
{
MyList *p,*p1;
int x;
cout<<"请输入需要插入的数:"<<endl;
cin>>x;
p=head;
p1=new MyList(x);
if (p->data>x)
{
p1->next=head;
head=p1;
}
else
{
while (p->next!=0)
{
if (p->next->data>x)
{
p1->next=p->next;
p->next=p1;
break;
}
p=p->next;
}
if (p->next==0) {
p->next=p1;
p1->next=0;
}
}
}
void LinkList::Combine(LinkList link2)
{
MyList *p1=head,*p2=link2.head;
MyList *c=0;
int k=0;
while (p1!=0&&p2!=0){
if (p1->data<p2->data){
if (!k){
c=head=p1;
p1=p1->next;
}
else{
c->next=p1;
p1=p1->next;
c=c->next;
}
}
else {
if (!k){
c=head=p2;
p2=p2->next;
}
else{
c->next=p2;
p2=p2->next;
c=c->next;
}
}
k=1;
}
if (p1==0){
c->next=p2;
}
else {
c->next=p1;
}
}
void LinkList::compositor()
{
cout<<"请创建一个新链表:"<<endl;
Create();
int l,i=0;
MyList *p=head;
MyList *p1=head->next;
while(p1!=0)
{
if((p->data)>(p1->data))
{
i++;
l=p->data;
p->data=p1->data;
p1->data=l;
}
p=p->next;
p1=p1->next;
if(p1==0&&i!=0)
{
i=0;
p=head;
p1=p->next;
}
}
}
void LinkList::Average()
{
int i=0;
int sum=0;
int average;
MyList *p=head;
while(p!=0)
{
i++;
sum=sum+p->data;
p=p->next;
}
sum=sum+p->data;
i++;
average=sum/i;
cout<<"平均数是:"<<endl;
}
int main ()
{
LinkList l1,l2;
int m;
do
{
cout<<"1.创建链表"<<endl;
cout<<"2.打印"<<endl;
cout<<"3.删除"<<endl;
cout<<"4.在数列中插入一个数"<<endl;
cout<<"5.连接两个链表"<<endl;
cout<<"6.从小到大排列"<<endl;
cout<<"7.平均数是:"<<endl;
cout<<"8.结束"<<endl;
cout<<"请选择"<<endl;
cin>>m;
switch (m)
{
case 1:l1.Create();break;
case 2:l1.Print();break;
case 3:l1.Delete();l1.Print();break;
case 4:l1.Insert();l1.Print();break;
case 5:
cout<<"输入第一个数列"<<endl;
l1.Create();
cout<<"输入第二个数列"<<endl;
l2.Create();
l1.Combine(l2);
l1.Print();
break;
case 6:l1.compositor();l1.Print();break;
case 7:l1.Average();;l1.Print();break;
}
}
while (m!=8);
return 0;
}
lianbiao.rar_链表_链表 合并 排序
版权申诉
124 浏览量
2022-09-20
14:41:40
上传
评论
收藏 3KB RAR 举报
weixin_42651887
- 粉丝: 75
- 资源: 1万+
评论0