提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、问题
二、代码
16
代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct node
{
int data;
node *next;
};
node *insert(node *head,node *p)
{
node *p1,*p2=NULL;
if(head==NULL)
{
head=p;
p->next=NULL;
return(head);
}
p1=head;
while((p->data)>(p1->data)&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if((p->data)<=(p1->data))
{
p->next=p1;
if(head==p1) head=p;
else p2->next=p;
}
else
{
p1->next=p;
p->next=NULL;
}
return(head);
}
node *sort(node*head)
{
node *p3;
int a;
cout<<"正在创建一条升序链表...\n";
cout<<"请输入一个整数,以-1结束:";
cin>>a;
while(a!=-1)
{
p3=new node;
p3->data=a;
head=insert(head,p3);
cout<<"请输入一个整数,以-1结束:";
cin>>a;
}
return(head);
}
void print(const node*head)
{
const node *p2;
p2=head;
cout<<"链表中各节点数据为:";
while(p2!=NULL)
{
cout<<setw(4)<<(p2->data);
p2=p2->next;
}
cout<<endl;
}
node *merge(node*a,node*b)
{
node*c=NULL,*p1,*p2=NULL;
while((a!=NULL)&&(b!=NULL))
{
p1=new node;
if(c==NULL)
{
if(a->data<=b->data)
{
p1->data=a->data;
c=p2=p1;
a=a->next;
}
else
{
p1->data=b->data;
c=p2=p1;
b=b->next;
}
}
else
{
if(a->data<=b->data)
{
p1->data=a->data;
p2->next=p1;
p2=p1;
a=a->next;
}
else
{
p1->data=b->data;
p2->next=p1;
p2=p1;
b=b->next;
}
}
}
while(a==NULL&&b!=NULL)
{
p1=new node;
p1->data=b->data;
p2->next=p1;
p2=p1;
b=b->next;
}
while(b==NULL&&a!=NULL)
{
p1=new node;
p1->data=a->data;
p2->next=p1;
p2=p1;
a=a->next;
}
return(c);
}
int main()
{
node*ah=NULL,*bh=NULL,*ch;
ah=sort(ah);
bh=sort(bh);
print(ah);
print(bh);
ch=merge(ah,bh);
print(ch);
cout<<'\n';
return 0;
}
17
代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct node
{
int data;
node *next;
};
const node *search(const node*head,int x)
{
const node*p;
p=head;
while(p!=NULL)
{
if(p->data==x)
return p;
p=p->next;
}
return NULL;
}
bool is_sub_set(node*L1,node*L2)
{
for(;L1!=NULL;L1=L1->next)
if(search(L2,L1->data)==NULL) return false;
return true;
}
node *create()
{
node *p1,*p2=NULL,*head;
int a;
head=NULL;
cout<<"正在创建一条无序列表...\n";
cout<<"请输入一个正整数,以0结束:";
cin>>a;
while(a!=0)
{
p1=new node;
p1->data=a;
if(head==NULL)
head=p2=p1;
else
{
p2->next=p1;
p2=p1;
}
cout<<"请输入一个正整数,以0结束:";
cin>>a;
}
if(head!=NULL)
p2->next=NULL;
return(head);
}
int main()
{
node*L1,*L2;
L1=create();
L2=create();
if(is_sub_set(L1,L2)==false)
cout<<"L1不是L2的子集"<<endl;
else cout<<"L1是L2的子集"<<endl;
return 0;
}
总结
如果这篇文章对你有帮助的话,可以点赞支持一下哦。