0·说明
本文实现的方法比较简单,只是起到了对之前书序表相关函数的使用的作用,没有使用到复杂的指针。本文仅作为参考,如果您比较感兴趣,可自行撰写函数。此外需要说明的是,如果是无序的两个顺序表合并,可先写一个排序函数,加在主函数初始化时,这样本节的算法就能够继续使用。
1.main.c
//***********************************************
//求有序顺序表LA和LB的合并,合并后有序
//***********************************************
#include "sequenceList.h"
void printf_Elem(ElemType e)
{
printf("%d ",e);
}
Status compare(ElemType a,ElemType b)
{
return a<=b? YES:NO;
}
//合并后存放在Lc顺序表中
void MergeSqList1(SqList La,SqList Lb,SqList Lc)
{
int La_len,Lb_len;
int i,j;
ElemType e;
La_len = ListLength_Sq(La);
Lb_len = ListLength_Sq(Lb);
// Lc.length = La_len + Lb_len;
for(i=1;i<=La_len;i++)
ListInsert_Sq(&Lc,i,La.elem[i-1]);
for(i=1;i<=Lb_len;i++)
{
GetElem_Sq(Lb,i,&e);
j=LocateElem_Sq(Lc,e,compare);
if(j)
ListInsert_Sq(&Lc,j,e);
else
ListInsert_Sq(&Lc,Lc.length+1,e);
}
}
//合并后存放在La顺序表中
void MergeSqList2(SqList La,SqList Lb)
{
int La_len,Lb_len;
int i,j;
ElemType e;
La_len = ListLength_Sq(La);
Lb_len = ListLength_Sq(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem_Sq(Lb,i,&e);
j=LocateElem_Sq(La,e,compare);
if(j)
ListInsert_Sq(&La,j,e);
else
ListInsert_Sq(&La,La.length+1,e);
}
}
int main(void)
{
SqList La,Lb,Lc;
ElemType a[4]={3,5,8,11};
ElemType b[7]={2,6,8,9,11,15,20};
int i;
InitList_Sq(&Lc);
InitList_Sq(&La); //对La顺序表进行初始化赋值
for(i=1;i<=4;i++)
ListInsert_Sq(&La,i,a[i-1]);
printf("La元素:");
ListTraverse_Sq(La,printf_Elem);
printf("\r\n");
InitList_Sq(&Lb); //对Lb顺序表进行初始化赋值
for(i=1;i<=7;i++)
ListInsert_Sq(&Lb,i,b[i-1]);
printf("Lb元素:");
ListTraverse_Sq(Lb,printf_Elem);
printf("\r\n");
printf("--------------------------------------\r\n");
printf("合并后元素L1: ");
MergeSqList1(La,Lb,Lc);
Lc.length = La.length +Lb.length;
ListTraverse_Sq(Lc,printf_Elem);
printf("\r\n");
printf("合并后元素L2: ");
MergeSqList2(La,Lb);
La.length = La.length +Lb.length;
ListTraverse_Sq(La,printf_Elem);
printf("\r\n\r\n");
}
2.实验结果:

3.讨论:
程序中在调用合并函数之后,我对新生成的顺序表长度进行了再一次的定义,如果不添加此句,程序会出现错误。但是按照调用函数的作用,应该不用写这样的语句。这一点我比较不明白,还请指教。
本文介绍了一种简单的有序顺序表合并方法,通过自定义函数实现两个已排序顺序表的合并,确保合并后的顺序表仍保持有序状态。文章提供了C语言实现的代码示例,包括合并后存放在新表和原有表中的两种情况。
2075

被折叠的 条评论
为什么被折叠?



