编译器:visual studio 2022
1.源码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define Elemtype int
typedef struct
{
Elemtype* elem;
int length;
}Sqlist,*link;
//初始化-建空间
void Initlist(link lalb)
{
lalb->elem = (Elemtype*)malloc(sizeof(Elemtype) * MAX);
if (lalb)
{
printf("初始化成功\n");
lalb->length = 0;
}
else
{
printf("初始化失败\n");
}
}
//数组赋值
void Creatlist(link lalb,int len12)
{
int n = 0;
for (n=1;n<=len12;n++)
{
printf("请输入表的第 %d 个元素\n",n);
int m;
scanf("%d",&m);
lalb->elem[n - 1] = m;
lalb->length += 1;
} //la: 3 5 7 11
} // lb: 2 3 6
//打印表
void print(link lalb, int len12)
{
int n;
for (n = 1; n <= len12; n++)
{
printf("%d ", lalb->elem[n - 1]);
}
printf("\n");
}
// la 和 lb 合并成 lc
void unin(link la, link lb, link lc)
{
//逐个对比la,lb中的元素
//小的元素放进lc中
//最后,让没有遍历完的la/lb 的元素放到lc中
Elemtype* pa = la->elem; //首元素地址
Elemtype* pb = lb->elem;
Elemtype* pc = lc->elem;
//尾元数地址
Elemtype* ppa = la->elem + la->length - 1;
Elemtype* ppb = lb->elem + lb->length - 1;
Elemtype* ppc = lc->elem + lc->length - 1;
while (pa <= ppa && pb <= ppb)
{
if (*pa >= *pb)
{
*pc++ = *pb++;
}
//else if 注意写法 else空格if
else //else if(*pa < *pc)
{
*pc++ = *pa++;
}
}
while (pa <= ppa) // pa的元素 没有处理完
{
*pc++ = *pa++;
}
while (pb <= ppb) // pb的元素没有处理完
{
*pc++ = *pb++;
}
}
int main()
{
//创建表la,lb,lc
//link la = NULL;
//link lb = NULL;
//link lc = NULL;
link la = (Sqlist*)malloc(sizeof(Sqlist));
link lb = (Sqlist*)malloc(sizeof(Sqlist));
link lc = (Sqlist*)malloc(sizeof(Sqlist));
//link la; //link只是la 的类型 。 la没有初始化
//初始化-建空间
printf("la ");
Initlist(la);
printf("lb ");
Initlist(lb);
printf("lc ");
Initlist(lc);
//线表的长度设定 ---length的真正变化要在数组赋值中实现
printf("请输入线表la的长度\n"); // 4
int len1;
scanf("%d", &len1);
printf("请输入线表lb的长度\n"); // 3
int len2;
scanf("%d", &len2);
int len3 = len1 + len2;
//数组赋值 + length值变化
printf("请输入la表中元素\n");
Creatlist(la,len1);
printf("请输入lb表中元素\n");
Creatlist(lb,len2);
//打印表
printf("表 la 中的内容为: ");
print(la,len1);
printf("表 lb 中的内容为: ");
print(lb,len2);
//合并 成 lc
unin(la, lb, lc,len3);
//打印lc
printf("合并后 lc 的内容为: ");
print(lc,len3);
}
2.效果图