C++编程实现将两个有序的线性表合并成一个有序的线性表
时间: 2024-05-14 09:17:19 浏览: 121
可以使用归并排序的思想进行合并,具体步骤如下:
1. 定义两个指针,分别指向两个有序线性表的起始位置。
2. 比较两个指针所指向的元素大小,将较小的元素插入新的有序线性表中。
3. 将指向较小元素的指针向后移动一位。
4. 重复步骤2和3,直到其中一个指针指向了线性表的末尾。
5. 将另一个线性表中剩余的元素插入新的有序线性表中。
下面是一个简单的 C 代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SqList;
void merge(SqList *list1, SqList *list2, SqList *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 = k;
}
int main() {
SqList list1 = {{1, 3, 5, 7, 9}, 5};
SqList list2 = {{2, 4, 6, 8, 10}, 5};
SqList result = {{0}, 0};
merge(&list1, &list2, &result);
printf("result: ");
for (int i = 0; i < result.length; i++) {
printf("%d ", result.data[i]);
}
printf("\n");
return 0;
}
```
在这个例子中,我们将两个有序线性表 `list1` 和 `list2` 合并成了一个有序线性表 `result`。我们先定义了一个 `SqList` 结构体来表示线性表,其中 `data` 数组存储元素,`length` 表示线性表长度。然后,我们定义了一个 `merge` 函数来执行合并操作。最后,我们在 `main` 函数中调用 `merge` 函数,并将结果打印出来。
阅读全文