设计一个函数 void merge(SeqList LA, SeqList LB, SeqList *LC) , 该函数的功能是将递减顺序表LA和LB和合并到递减顺序表LC中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#define maxsize 100//宏定义线性表最大长度

//设计一个函数
/*void merge(SeqList* LA, SeqList* LB, SeqList* LC)
该函数的功能是将递减顺序表LA和LB和合并到递减顺序表LC中*/
//其中SeqList结构如下:
typedef struct {
int elem[maxsize];//线性表占用的数组空间
int last;//记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1
}SeqList;

void merge(SeqList* LA, SeqList* LB, SeqList* LC)
{
int i, j, k;//分别定义各线性表的下标
i = 0;//初始化
j = 0;
k = 0;
while (i < LA->last && j < LB->last)//当两个线性表均未被扫描完毕时
{
if (LA->elem[i] >= LB->elem[j])//如果表LA中元素大于表LB中的元素
{
LC->elem[k] = LA->elem[i];//将表LA中此元素插入表LC中
i++;//下标向后挪动一位
k++;//同上
}
else
{
LC->elem[k] = LB->elem[j];//反之,将表LB中元素插入表LC中
j++;//下标向后挪动一位
k++;//同上
}
}

while (i <= LA->last)//当表LA中有剩余元素,则将表LA余下元素全部插入表LC中
{
LC->elem[k] = LA->elem[i];
i++;
k++;
}

while (j <= LA->last)//当表LB中有剩余元素,则将表LB余下元素全部插入表LC中
{
LC->elem[k] = LB->elem[j];
j++;
k++;
}

LC->last = LA->last + LB->last + 1;//表LC的last为表LA、LB的last值的和+1
}

//如下的main函数执行后
int main(int argc, char* argv[])
{
SeqList LA, LB, LC;
int i;

for (i = 0; i < 10; i++)
{
LA.elem[i] = 20 - 2 * i;
}
LA.last = 9;

for (i = 0; i < 8; i++)
{
LB.elem[i] = 24 - 3 * i;
}
LB.last = 7;

merge(&LA, &LB, &LC);

for (i = 0; i <= LC.last; i++)
{
printf("%d ", LC.elem[i]);
}
printf("\n");
return 0;
}
/*执行的结果为
24 21 20 18 18 16 15 14 12 12 10 9 8 6 6 4 3 2*/