将两个有序的顺序表合并的代码C语言
时间: 2023-08-31 13:25:06 浏览: 97
### 回答1:
以下是将两个有序的顺序表合并的代码C语言:
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void MergeList(SqList La, SqList Lb, SqList *Lc) {
int i = 0, j = 0, k = 0;
while (i < La.length && j < Lb.length) {
if (La.data[i] <= Lb.data[j]) {
Lc->data[k++] = La.data[i++];
} else {
Lc->data[k++] = Lb.data[j++];
}
}
while (i < La.length) {
Lc->data[k++] = La.data[i++];
}
while (j < Lb.length) {
Lc->data[k++] = Lb.data[j++];
}
Lc->length = k;
}
int main() {
SqList La = {{1, 3, 5, 7, 9}, 5};
SqList Lb = {{2, 4, 6, 8, 10}, 5};
SqList Lc;
MergeList(La, Lb, &Lc);
for (int i = 0; i < Lc.length; i++) {
printf("%d ", Lc.data[i]);
}
return 0;
}
### 回答2:
下面是将两个有序顺序表合并的C语言代码:
```c
#include <stdio.h>
// 定义顺序表结构体
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
// 合并函数
void merge(SeqList list1, SeqList list2, SeqList *result) {
int i = 0, j = 0, k = 0;
while (i < list1.length && j < list2.length) {
if (list1.data[i] <= list2.data[j]) {
result->data[k++] = list1.data[i++];
} else {
result->data[k++] = list2.data[j++];
}
}
// 将剩余的元素复制到合并后的顺序表
while (i < list1.length) {
result->data[k++] = list1.data[i++];
}
while (j < list2.length) {
result->data[k++] = list2.data[j++];
}
// 更新合并后的顺序表的长度
result->length = list1.length + list2.length;
}
int main() {
// 初始化两个有序顺序表
SeqList list1 = {{1, 3, 5, 7}, 4};
SeqList list2 = {{2, 4, 6, 8}, 4};
SeqList result;
// 合并两个顺序表
merge(list1, list2, &result);
// 输出合并结果
for (int i = 0; i < result.length; i++) {
printf("%d ", result.data[i]);
}
return 0;
}
```
代码中首先定义了顺序表的结构体,包含一个固定大小的数组和表示表长度的变量。然后使用merge函数将两个有序顺序表合并成一个新的顺序表,并将结果保存在result中。合并过程使用了三个指针i、j、k,分别指向两个输入顺序表和合并后的结果顺序表。在while循环中,比较两个输入顺序表中指针所指的元素大小,将较小的元素插入到结果顺序表中,并将相应指针后移。当其中一个顺序表的元素遍历完毕后,将另一个顺序表中剩余的元素复制到结果顺序表中。最后输出合并结果,即可得到合并后的有序顺序表。
### 回答3:
下面是用C语言实现将两个有序的顺序表合并的代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
void mergeArrays(int arr1[], int size1, int arr2[], int size2, int result[]) {
int i = 0, j = 0, k = 0;
while (i < size1 && j < size2) {
if (arr1[i] < arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
while (i < size1) {
result[k++] = arr1[i++];
}
while (j < size2) {
result[k++] = arr2[j++];
}
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr1[MAX_SIZE] = {1, 3, 5, 7, 9};
int size1 = 5;
int arr2[MAX_SIZE] = {2, 4, 6, 8, 10};
int size2 = 5;
int result[MAX_SIZE];
mergeArrays(arr1, size1, arr2, size2, result);
printf("合并后的数组:");
printArray(result, size1 + size2);
return 0;
}
```
这个程序定义了一个`mergeArrays`函数,用于合并两个有序的顺序表。函数使用三个数组参数分别表示两个有序顺序表和合并后的结果。函数内部通过比较两个顺序表当前位置的元素大小,将较小的元素放入结果数组,并更新相应的位置。最后,遍历可能还有剩余元素的顺序表,将其也放入结果数组中。程序中的`main`函数提供了示例数据,并调用`mergeArrays`函数来合并两个有序顺序表,并打印合并后的结果。
阅读全文