6.3w+
社区成员
#include<iostream.h>
struct node{
int data;
node *next;
};
node* Listcreat() //创建链表
{ node *head,*n,*tail;
int a;
head=NULL; //空链
cout<<"请输入数据(0表示结束):";
for(cin>>a;a!=0;cin>>a)
{ n=new node;
n->data=a;
if(!head) tail=head=n;
else tail->next=n,tail=n;
}
if(head) tail->next=NULL;
return head;
}
void clearlist(node *list)//如果链表不是有序且是升序的,则将链表被所有结点删除
{ node*head,*p;
head=list;
while(head)
{ p=head;head=head->next;delete p;}
cout<<"无效数据清除成功!\n";
}
int panduan(node *List)//判断链表是不是有序(升序)的链表
{ node *head,*p;
head=List;
if(head)
{p=head->next;
for(head;head->next!=NULL;head=head->next,p=head->next)
for(p;p!=NULL;p=p->next)
if(p->data<head->data) return 0;
if(!head->next) return 1;
}else return 0;
}
void print(node*List)//输出链表上所有的数据元素
{ node *p;
p=List;
while(p)
{ cout<<p->data<<'\t';p=p->next; }
cout<<endl;
}
void combin (node *La,node *Lb) //实现链表La,Lb的归并,归并后为Lc
{
node *pa,*pb,*pc,*Lc;
pa=La->next;
pb=Lb->next;
Lc=pc=pa; //归并后的链表的头结点指向连表La的头结点
while(pa&&pb)
{ if(pa->data<=pb->data)
{pc->next=pa;pc=pa;pa=pa->next;}
else
{pc->next=pb;pc=pb;pb=pb->next;}
}
if(pa) pc->next=pa;//插入剩余的结点
else pc->next=pb;//插入剩余的结点
delete(Lb);
print(Lc);//输出归并后的集合元素
}
void main()
{ node *List_La, *List_Lb, *List_Lc;
cout<<"集合A"<<endl;
List_La=Listcreat();//创建链表List_La存储集合A的元素
while(!panduan(List_La))
{
cout<<"输入的数据无效,请输入有序的集合元素!\n";
clearlist(List_La);
List_La=Listcreat();//判断后重新输入集合元素
}
cout<<"集合B"<<endl;
List_Lb=Listcreat();//创建链表List_La存储集合A的元素
while(!panduan(List_Lb))
{
cout<<"输入的数据无效,请输入有序的集合元素!\n";
clearlist(List_Lb);
List_Lb=Listcreat();
}
cout<<"经过归并后!";
combin(List_La,List_Lb);
}
#include<iostream.h>
struct node{
int data;
node *next;
};
node* Listcreat() //´´½¨Á´±í
{
node *head,*n,*tail;
int a;
head=NULL; //¿ÕÁ´
cout<<"ÇëÊäÈëÊý¾Ý£¨0±íʾ½áÊø£©:";
for(cin>>a;a!=0;cin>>a)
{
n=new node;
n->data=a;
n->next = NULL;
if(!head) tail=head=n;
else tail->next=n,tail=n;
}
if(head) tail->next=NULL;
return head;
}
void clearlist(node *list)//Èç¹ûÁ´±í²»ÊÇÓÐÐòÇÒÊÇÉýÐòµÄ£¬Ôò½«Á´±í±»ËùÓнáµãɾ³ý
{
node*head,*p;
head=list;
while(head)
{
p=head;head=head->next;
delete p;
}
cout<<"ÎÞЧÊý¾ÝÇå³ý³É¹¦£¡\n";
}
int panduan(node *List)//ÅжÏÁ´±íÊDz»ÊÇÓÐÐò£¨ÉýÐò£©µÄÁ´±í
{
node *head,*p;
head=List;
if(head)
{
p=head->next;
for(head;head->next!=NULL;head=head->next,p=head->next)
for(p;p!=NULL;p=p->next)
if(p->data<head->data)
return 0;
if(!head->next)
return 1;
}
else
return 0;
return 1;
}
void print(node*List)//Êä³öÁ´±íÉÏËùÓеÄÊý¾ÝÔªËØ
{
node *p;
p=List;
while(p)
{ cout<<p->data<<'\t';p=p->next; }
cout<<endl;
}
void DelList(node *p)
{
node *q = p;
while(p)
{
q = p->next;
delete p;
p = q;
}
}
void combin (node *La,node *Lb) //ʵÏÖÁ´±íLa,LbµÄ¹é²¢,¹é²¢ºóΪLc
{
node *pa,*pb,*pc,*Lc;
pa=La;
pb=Lb;
pc = new node;
pc->next = NULL;
Lc=pc; //¹é²¢ºóµÄÁ´±íµÄÍ·½áµãÖ¸ÏòÁ¬±íLaµÄÍ·½áµã
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pb=pb->next;
}
pc = pc->next;
}
if(pa)
pc->next=pa;//²åÈëÊ£ÓàµÄ½áµã
else
pc->next=pb;//²åÈëÊ£ÓàµÄ½áµã
pc = Lc;
Lc = Lc->next;
delete pc;
print(Lc);//Êä³ö¹é²¢ºóµÄ¼¯ºÏÔªËØ
DelList(Lc);
}
void main()
{
node *List_La = NULL, *List_Lb = NULL;
cout<<"¼¯ºÏA"<<endl;
List_La=Listcreat();//´´½¨Á´±íList_La´æ´¢¼¯ºÏAµÄÔªËØ
while(!panduan(List_La))
{
cout<<"ÊäÈëµÄÊý¾ÝÎÞЧ£¬ÇëÊäÈëÓÐÐòµÄ¼¯ºÏÔªËØ!\n";
clearlist(List_La);
List_La=Listcreat();//ÅжϺóÖØÐÂÊäÈ뼯ºÏÔªËØ
}
cout<<"¼¯ºÏB"<<endl;
List_Lb=Listcreat();//´´½¨Á´±íList_La´æ´¢¼¯ºÏAµÄÔªËØ
while(!panduan(List_Lb))
{
cout<<"ÊäÈëµÄÊý¾ÝÎÞЧ£¬ÇëÊäÈëÓÐÐòµÄ¼¯ºÏÔªËØ!\n";
clearlist(List_Lb);
List_Lb=Listcreat();
}
cout<<"¾¹ý¹é²¢ºó£¡";
combin(List_La,List_Lb);
}
void combin (node *La,node *Lb)
{
node *pa,*pb,*pc,*Lc;
pa=La; //因为La,Lb中有data数据,所以应该从La,Lb开始比较
pb=Lb;
if(pa->data<=pb->data)
{
Lc=pc=pa; // 数据小的为头
pa=pa->next; //下次比较从下个元素开始
}
else
{
Lc=pc=pb; // 数据小的为头
pb=pb->next; //下次比较从下个元素开始
}
while(pa&&pb)
{ if(pa->data<=pb->data)
{pc->next=pa;pc=pa;pa=pa->next;}
else
{pc->next=pb;pc=pb;pb=pb->next;}
}
if(pa) pc->next=pa;
else pc->next=pb;
//delete(Lb); //Lb的所有节点全部在Lc上 所以不能删除
print(Lc);
}
:ls的什么编译器?
中文都不识?@_@
void combin (node *La,node *Lb) //实现链表La,Lb的归并,归并后为Lc
{
node *pa,*pb,*pc,*Lc;
pa=La->next;
pb=Lb->next;
Lc=pa; //归并后的链表的头结点指向连表La的头结点
pc = La; //pc应赋值为头节点的指针,不然后面会出错,环状...
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa) pc->next=pa;//插入剩余的结点
else pc->next=pb;//插入剩余的结点
delete(Lb);
print(Lc);//输出归并后的集合元素
}