线性表合并运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define INITSIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储量(以sizeof(ElemType)为单位)
}SqList;
Status InitList(SqList &L)
{//构造一个空的顺序表L.
L.elem=(ElemType*)malloc(100*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=INITSIZE;
return(OK);
}
void Assign(SqList &L)
{//为顺序表L的各元素赋值。
int i,N;
printf("Please input the Number of the SqList:");
scanf("%d",&N);
printf("Please input the elements:");
for(i=0;i scanf("%d",&L.elem[i]); L.length++; } } void MergeList(SqList La,SqList Lb,SqList &Lc){ //已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列ElemType *pa,*pb,*pc,*pa_last,*pb_last; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem)exit(OVERFLOW);//存储分配失败 pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last){//归并 if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++;//插入La的剩余元素while(pb<=pb_last) *pc++=*pb++;//插入Lb的剩余元素}//MergeList_Sq void ListTraverse(SqList L){ //遍历顺序表L int i; for(i=0;i<=L.length-1;i++); printf("%d ",L.elem[i]); printf("\n"); printf("the length is:%d\n",L.length); } void main(){ SqList L,L1,L2; InitList(L1); Assign(L1); InitList(L2); Assign(L2); MergeList(L1,L2,L); ListTraverse( L); } 五、运行结果 Please input the Number of the SqList:5 Please input the elements:2 4 6 8 9 Please input the Number of the SqList:8 Please input the elements:1 3 5 12 34 36 41 46 1 2 3 4 5 6 8 9 12 34 36 41 46 the length is:13