2.设计一个程序,生成两个按值非递减有序排列的线性表LA和LB,再将LA和LB归并为一个新的线性表LC,且LC中的数据仍按值非递减有序排列,输出线性表LA、LB、LC。
代码语言:javascript复制#include
using namespace std;
struct node
{
int data;
node *next;
};
class linklist
{
private:
int length_a;
node *first;
public:
linklist(){
first=new node;
first->next=NULL;
}
linklist(int a[],int len_a);
void display();//输出函数
void appendd(int num);//在单链表尾部添加数据
~linklist(){}
friend linklist through(linklist &a,linklist &b);//友元函数,访问两个类,并且将加得的单链表,作为一个类返回;
};
linklist::linklist(int a[],int len_a)
{
first=new node;
node *p=first;
for(int i=0;idata=a[i];
p->next=s;
p=s;
}
p->next=NULL;
}
void linklist::appendd(int num){
node *p=first;
while(p->next!=NULL)
{
p=p->next;
}
node *s=new node;
s->data=num;
p->next=s;
p=s;
p->next=NULL;
}
linklist through(linklist &a,linklist &b)
{
linklist m;
node *p1=a.first->next;
node *p2=b.first->next;
while(p1!=NULL || p2!=NULL)
{
if(p1!=NULL && p2!=NULL)
{
if((p1->data)<=(p2->data))
{
m.appendd(p1->data);
m.appendd(p2->data);
}
else
{
m.appendd(p2->data);
m.appendd(p1->data);
}
p1=p1->next;
p2=p2->next;
}
else if(p1==NULL && p2!=NULL)
{
m.appendd(p2->data);
p2=p2->next;
}
else
{
m.appendd(p1->data);
p1=p1->next;
}
}
return m;
}
void linklist::display()
{
node *p=first->next;
while(p!=NULL)
{
cout<data<next;
}
}
int main()
{
int a[3]={1,3,5},b[5]={2,4,6,7,9};
linklist link_a(a,3),link_b(b,5),link_c;
link_c=through(link_a,link_b);
link_c.display();
system("pause");
}
代码还是有一点有问题的,只能按一对一的大小排序,要真正实现升序,需要对链表进行排序