【数据结构c语言版严蔚敏】的问题: 两个有序线性表的交集合并成一个新有序线性表,求新有序线性表算法?

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

菜鸟路过。。。
#include
#include
#define OK 1
#define ERROR 0

typedef struct
{
int *elem;
int length;
int listsize;
} SqList;

int InitList_Sq(SqList *L,int len)
{
//构造一个空的线性表L,该线性表预定义大小为len
L->elem=(int *)malloc(sizeof(int)*len);
if(!L->elem) return ERROR;
L->length=0;
L->listsize=len;
return OK;
}

int Load_Sq(SqList *L)
{
// 输出顺序表中的所有元素
int i;
if(L->length==0) printf("The List is empty!");
else
{
for(i=0;ilength;i++) printf("%d ",L->elem[i]);
}
printf("\n");
return OK;
}

int Merg(SqList *LA,SqList *LB,SqList *LC)
{
int i,j,k;
i=j=k=0;
while(ilength&&jlength)
{
if(LA->elem[i]elem[j])
{
LC->elem[k]=LA->elem[i];
LC->length++;
k++;
i++;
}
else
{
LC->elem[k]=LB->elem[j];
LC->length++;
k++;
j++;
}
}
while(ilength)
{
LC->elem[k]=LA->elem[i];
LC->length++;
k++;
i++;
}
while(jlength)
{
LC->elem[k]=LB->elem[j];
LC->length++;
k++;
j++;
}
return OK;
}

int Free_Sq(SqList *L)
{
free(L->elem);
L->elem=NULL;
return OK;
}
int main()
{
SqList *LA,*LB,*LC;
int a_len,b_len,i;
scanf("%d",&a_len);
LA=(SqList*)malloc(sizeof(SqList));
LB=(SqList*)malloc(sizeof(SqList));
LC=(SqList*)malloc(sizeof(SqList));
InitList_Sq(LA,a_len);
for(i=0;i {
scanf("%d",&LA->elem[i]);
LA->length++;
}
scanf("%d",&b_len);
InitList_Sq(LB,b_len);
for(i=0;i {
scanf("%d",&LB->elem[i]);
LB->length++;
}
InitList_Sq(LC,a_len+b_len);
Merg(LA,LB,LC);
printf("List A:");
Load_Sq(LA);
printf("List B:");
Load_Sq(LB);
printf("List C:");
Load_Sq(LC);
Free_Sq(LA);
Free_Sq(LB);
Free_Sq(LC);
free(LA);
free(LB);
free(LC);
return 0;
}

回答2:

你可以先设一个线性表C,再比较A和B中第一个元素谁小的放到C中,如果是A中的小,A取后一个元素和B中第一个元素比较,元素小的放到C中,依次类推。

回答3:

留下邮箱,我把源文件文件发给你