设计一个算法,将两个递增链表La、Lb合并成一个递增链表Lc。

如题所述

第1个回答  2011-12-27
//设计一个算法,将两个递增链表La、Lb合并成一个递增链表Lc;La,Lb,Lc均为带头结点的链表
#include<stdio.h>
typedef int datatype;
struct PNode
{
datatype data; //定义链表中结点的数据域,DATATYPE为数据类型
struct PNode *next; //定义链表中结点的指针域
};
typedef struct PNode linklist;
linklist *ListCreateNull()
//建立带头结点的空单链表,返回头结点的地址
{ linklist *list;
list =(linklist *)malloc(sizeof(linklist));
//申请表头结点空间
if(list!=NULL) list->next=NULL;
else printf("Out of space! \n");
return list;
}
int ListInsert(linklist *L,datatype x)
//在链表L的尾部插入X,返回1表示成功,0表示失败
{
linklist *p,*q;
p=L;
while(p->next!=NULL)
p=p->next;
q=(linklist *)malloc(sizeof(struct PNode));
if(!q)return 0;
q->data=x;
p->next=q;
q->next=NULL;
return 1;
}
linklist *fun(linklist *La,linklist *Lb,linklist *Lc)
//将两个递增链表La、Lb合并成一个递增链表Lc
{
linklist *p;
p=Lc;
while(La->next!=NULL&&Lb->next!=NULL)
{
if(La->next->data>Lb->next->data)
{
ListInsert(p,Lb->next->data);
Lb=Lb->next;
}
else
{
ListInsert(p,La->next->data);
La=La->next;
}
}
if(La->next==NULL)
{
while(Lb->next!=NULL)
{
ListInsert(p,Lb->next->data);
Lb=Lb->next;
}
}
if(Lb->next==NULL)
{
while(La->next!=NULL)
{
ListInsert(p,La->next->data);
La=La->next;
}
}
return Lc;
}
main()
{
linklist *La,*Lb,*Lc;
int temp=1,i;
//初始化链表La
La=(linklist *)ListCreateNull();
printf("请输入数据以零结束:\n");
for(i=0;i<3;i++)
{
scanf("%d",&temp);
ListInsert(La,temp);
}
//初始化链表Lb
temp=1;
Lb=(linklist *)ListCreateNull();
printf("请输入数据以零结束:\n");
for(i=0;i<3;i++)
{
scanf("%d",&temp);
ListInsert(Lb,temp);
}
//初始化链表Lc
Lc=(linklist *)malloc(sizeof(struct PNode));
Lc->next=NULL;
Lc->data=NULL;
Lc=fun(La,Lb,Lc);
while(Lc->next!=NULL)
{
printf("%d ",Lc->next->data);
Lc=Lc->next;
}
printf("\n");
}本回答被网友采纳
第2个回答  2011-12-27
void merge()
{
int na=la.len;
int nb=lb.len;
int i=0,j=0;
int k=0;
while(i<na&&j<nb)
{
while(la[i]<=lb[j]&&i<na&&j<nb)
{
lc[k]=la[i];
i++;
k++;
}
while(lb[j]<=la[i]&&j<nb&&i<na)
{
lc[k]=lb[j];
j++;
k++;
}
}
while(i<na)
{
lc[k++]=la[i];
}
while(j<nb)
{
lc[k++]=lb[j];
}
}
这是一个伪代码,你自己再改改吧

设计一个算法,将两个递增链表La、Lb合并成一个递增链表Lc。
\/\/将两个递增链表La、Lb合并成一个递增链表Lc { linklist *p;p=Lc;while(La->next!=NULL&&Lb->next!=NULL){ if(La->next->data>Lb->next->data){ ListInsert(p,Lb->next->data);Lb=Lb->next;} else { ListInsert(p,La->next->data);La=La->next;} } if(La->next==NULL)...

...LB,编写一个算法,将两个循环单链表合并为一个循环单链表
编写好的算法实现将这两个链表合并为新的带有头结点的链表 lc ,使得 lc 的元素仍然是非递增有序排列的序列,如果遇到 la 与 lb 中元素相同,则只取 la 中的元素,去掉 lb 中的元素。已知 la 的元素个数 为 m , lb 的元素个数为 n。循环单链表是单链表的另一种形式,其结构特点链表中最后...

怎么构建线性表LA,LB,LC,将LA,LB合并为LC并通过主函数调用输出线性表...
struct node *LC,*LA,*LB;LA=creatlink(); \/\/用尾插法创建链表head1,注意head1可能是空链表 LB=creatlink(); \/\/用尾插法创建链表head2,注意head2也可能是空链表 LC=merge(LA,LB);traverse(LC);destroy(LC);} struct node * merge(struct node *head1, struct node *head2){ st...

...LB,其元素均为非递减有序排列,编写一个算法。将他们合并成一个...
}LinkList merge(LinkList LA,LinkList LB) {pNode a,b,c,head;a = LA;b = LB;c = head = GetNewList();head->data = LA->data + LB->data;while(a->next && b->next) {c->next = (pNode)malloc(sizeof(NODE));if(c->next == NULL) {printf("内存分配失败!\\n");r...

试写一个算法,将两个有序线性表合并成一个有序线性表。
\/\/归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 AH=La;BH=Lb;CH=Lc;pa=AH_next;pb=BH_next;CH=pc=AH;\/\/用La的头结点作为Lc的头结点 while(pa&&pb){ if(pa->data<=pb->data){ pc-<next=pa;pc=pa;pa=pa->next;} elsr {pc->next=pb;pc=pb;pb=pb->next;...

用C++写:将两个递增的有序链表合并为一个递增的有序链表。要求结果链表...
{ private:int num;LNode *next;public:friend LNode* LNodeCreate();friend void LNodeSort(LNode *L1,LNode *L2);};LNode* LNodeCreate(){ LNode *q,*H,*p;int size,m;cout<<"请输入链式线性表元素的个数: ";cin>>size;q=H=new LNode;cout<<"请按从小到大输入线性表的"<<...

...LB,编写算法,将两个循环单链表合并成一个单链表,其头指针为LA_百度...
很简单的 你把链表La的末节点指向LB的头节点的下一个节点,把LB的末节点变为NULL即可!

编写一个程序,把两个字符型链表对象链接成一个链表。
Status concatenate(LinkList &La,LinkList &Lb,LinkList &Lc)\/\/\/将La和Lb连接到La上并释放Lb的头结点 { LinkList Pc = Lc = La;LinkList Pa = La->next;LinkList Pb = Lb->next;while (Pc->next){ \/\/Pc->next = Pa;Pc = Pc->next;\/\/Pa = Pa->next;} while (Pb){ Pc->...

设有两个按元素值递增有序的顺序表A和B(单链表A和B),
设有两个按元素值递增有序的顺序表A和B(单链表A和B),编一程序讲A表和B表归并成一个新的递增有序的顺序表C(单链表C,值相同的元素均保留在C表中)。用VC++6.0设计一下程序... 设有两个按元素值递增有序的顺序表A和B(单链表A和B),编一程序讲A表和B表归并成一个新的递增有序的顺序表C(单链表C,值...

LA和LB归并的问题
pa=la->next; \/***注意这里*\/ } else { pc->next=pb;lb=pb; \/***注意这里*\/ pc=pc->next;pb=lb->next; \/***注意这里*\/ } } if(pa){ pc->next=pa;} if(pb){ pc->next=pb;} pc=lc->next;while(pc){ printf("%d\\t",*pc); \/*这是一段C程序,因此不能在C语...

相似回答