#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct
{
int elem[MAXSIZE];
int last;
}Seqlist;
void mergelist(Seqlist La,Seqlist Lb,Seqlist &Lc);
void initlist(Seqlist &L);
void putlist(Seqlist L);
int main()
{
Seqlist La,Lb,Lc;
int a;//删除元素的位置
printf("La元素输入\n");
initlist(La);
printf("Lb元素输入\n");
initlist(Lb);
mergelist(La,Lb,Lc);
putlist(Lc);
return 0;
}
/*void initlist(Seqlist &L) 中 & 表示引用
如果传递的结构体变量要改变数值就使用值传递 可以是加&
也可以是 指针类型 及 Seqlist *L */
void initlist(Seqlist &L)
{
int n;
int i;
printf("输入表中总元素:");
scanf("%d",&n);
for (i=0; i<n; i++)
scanf("%d",&L.elem[i]);
L.last = i-1; // 用来保存顺序表中最后一个元素的位置
}
void mergelist(Seqlist La,Seqlist Lb,Seqlist &Lc)
{
int i=0,j=0;
int k=0;
while(i<=La.last && j<=Lb.last)//插入 直到其中一个表被扫描完
{
if (La.elem[i]<=Lb.elem[j])
Lc.elem[k++]=La.elem[i++];
else
Lc.elem[k++]=Lb.elem[j++];
}
while(i<=La.last)//当La有剩余元素,就把他赋给 Lc
{
Lc.elem[k++]=La.elem[i++];
}
while(j<=Lb.last)//当Lb有剩余元素,就把他赋给 Lc
Lc.elem[k++]=Lb.elem[j++];
Lc.last = La.last+Lb.last+1;//合并后Lc中的最后一个元素的位置
}
void putlist(Seqlist L)
{
int i;
printf("合并链表输出:");
for (i=0; i<=L.last; i++)
printf("%d ",L.elem[i]);
}