怎么将两个顺序存储的有序表合并成一个有序表?

2024-12-16 14:01:52
推荐回答(3个)
回答1:

具体代码如下:

#include

#include

#define MAX 40

typedef struct

{

int data[MAX];

int length;

}LinkList;

void Initial_List(LinkList * &l,int n)//初始化顺序表

{

int i=0;

l=(LinkList *)malloc(sizeof(LinkList));

l->length = 0;

for(;i

scanf("%d",l->data+i);

l->length = n;

}

void Link(LinkList *l1,LinkList *l2,LinkList * &l3)//连接顺序表

{

int i,j;

l3=(LinkList *)malloc(sizeof(LinkList));

l3->length = l1->length + l2->length;

for(i=0;ilength;i++)

{

if(ilength)

{

l3->data[i] = l1->data[i];

}

else

{

l3->data[i] = l2->data[i%(l1->length)];

}

}

for(i=0;ilength;i++)

{

for(j=i+1;jlength;j++)

{

if(l3->data[i]>l3->data[j])

{

int temp=l3->data[i];

l3->data[i]=l3->data[j];

l3->data[j]=temp;

}

}

}

}

void Disp_List(LinkList *l)

{

int i=0;

printf("output:\n");

for(;ilength;i++)

printf("%d ",l->data[i]);

printf("\n");

}

int main()

{

LinkList *l1,*l2,*l3;

int n;

printf("请输入第一个序列的元素个数:\n");

scanf("%d",&n);

printf("请输入第一个序列的所有元素:\n");

Initial_List(l1,n);

printf("请输入第二个序列的元素个数:\n");

scanf("%d",&n);

printf("请输入第二个序列的所有元素:\n");

Initial_List(l2,n);

Link(l1,l2,l3);

Disp_List(l3);

return 0;

}

编写算法,将两个非递减有序顺序表A和B合成一个新的非递减有序顺序表C。

已知顺序表A和B的元素个数分别为m,n。其中顺序表采用动态分配内存空间,其定义如下:

typedef struct{

ElemType *elem; //存储空间基址

int length;     //当前长度

int listsize;   //当前分配的存储容量

}Sqlist;

*/

回答2:

代码有错…还没法合并

回答3:

具体代码如下:


#include

 #include

  #define MAX 40
 
 
 
 typedef struct
 
 {
 
 int data[MAX];
 
 int length;
 
 }LinkList;
 
 
 
 void Initial_List(LinkList * &l,int n)//初始化顺序表
 
 {
 
 int i=0;
 
 l=(LinkList *)malloc(sizeof(LinkList));
 
 l->length = 0;
 
 
 
 for(;i 
 scanf("%d",l->data+i);
 
 l->length = n;
 
 }
 
 
 
 void Link(LinkList *l1,LinkList *l2,LinkList * &l3)//连接顺序表
 
 {
 
 int i,j;
 
 l3=(LinkList *)malloc(sizeof(LinkList));
 
 l3->length = l1->length + l2->length;
 
 
 
 for(i=0;ilength;i++)
 
 {
 
 if(ilength)
 
 {
 
 l3->data[i] = l1->data[i];
 
 }
 
 else
 
 {
 
 l3->data[i] = l2->data[i%(l1->length)];
 
 }
 
 }
 
 
 
 for(i=0;ilength;i++)
 
 
 {
 
 for(j=i+1;jlength;j++)
 {
 
 if(l3->data[i]>l3->data[j])
 
 {
 
 int temp=l3->data[i];
 
 l3->data[i]=l3->data[j];
 
 l3->data[j]=temp;
 
 }
 
 }
 
 }
 
 }
 
 
 
 void Disp_List(LinkList *l)
 
 {
 
 int i=0;
 
 printf("output:\n");
 
 for(;ilength;i++)
 
 printf("%d ",l->data[i]);
 
 printf("\n");
 
 }
 
 
 
 int main()
 
 {
 
 LinkList *l1,*l2,*l3;
 
 int n;
 
 
 
 printf("请输入第一个序列的元素个数:\n");
 
 scanf("%d",&n);
 
 printf("请输入第一个序列的所有元素:\n");
 
 Initial_List(l1,n);
 
 printf("请输入第二个序列的元素个数:\n");
 
 scanf("%d",&n);
 
 printf("请输入第二个序列的所有元素:\n");
 
 Initial_List(l2,n);
 
 
 
 Link(l1,l2,l3);
 
 Disp_List(l3);
 
 return 0;
 
 }