将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
算法思路:
这个其实就是一个归并排序,我们这里两顺序表为升序,要合并成一个升序表
用i和j分别标记顺序表A和顺序表B的元素,然后新表是C
每次从A和B中选一个较小值放C里面
//将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
Sqlist merge(Sqlist A, Sqlist B,Sqlist* C) {
//其实就是一个归并排序
int i = 0;//标记A元素
int j = 0;//标记B元素
int k = 0;//标记C元素
while (i < A.length&&j < B.length) {
if (A.data[i] <= B.data[j]) {
(*C).data[k] = A.data[i];
i++;
}
else {
(*C).data[k] = B.data[j];
j++;
}
k++;
}
//跳出上面的循环说明有一个顺序表搞完了,把剩余一个接上去就可以了
while (i < A.length) {
(*C).data[k] = A.data[i];
k++;
i++;
}
while (j < B.length) {
(*C).data[k] = B.data[j];
k++;
j++;
}
}
int main()
{
Sqlist A;
InitList1(&A);//初始化一个顺序表:1,3,5,7,9,10
printf("初始顺序表A为:");
print(&A);
Sqlist B;
InitList2(&B);//初始化一个顺序表:2,4,6,8
printf("初始顺序表B为:");
print(&B);
printf("\n");
Sqlist C ;//对C初始化一下
InitList(&C);
merge(A, B, &C);
printf("合并后顺序表为:");
print(&C);
return 0;
}
注:顺序表的定义及初始化操作,还有打印顺序表函数,考试你写上面的功能函数就行了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
#define MaxSize 10//定义最大长度
int InitArr[10] = { 1,2,2,2,3,3,4,5,5,5 };
int Initarr[10] = {1,3,5,7,9,10};
int Initbrr[10] = {2,4,6,8};
typedef struct {
int data[MaxSize];//用静态的数据存放数据元素
int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义
//初始化一个顺序表
void InitList(Sqlist* L)
{
for (int i = 0;i < MaxSize;i++)
{
L->data[i] = InitArr[i];//将所有数据元素设置为默认初始值
}
L->length = 10;//顺序表初始长度为0
}
//初始化一个顺序表A
void InitList1(Sqlist* L)
{
for (int i = 0;i < 6;i++)
{
L->data[i] = Initarr[i];//将所有数据元素设置为默认初始值
}
L->length = 6;//顺序表初始长度为5
}
//初始化一个顺序表B
void InitList2(Sqlist* L)
{
for (int i = 0;i < 4;i++)
{
L->data[i] = Initbrr[i];//将所有数据元素设置为默认初始值
}
L->length = 4;//顺序表初始长度为4
}
void print(Sqlist* L)
{
for (int i = 0;i < L->length;i++)
{
printf("%d ", L->data[i]);
}
}