C++编程实现将两个有序的线性表合并成一个有序的线性表
时间: 2024-05-14 14:17:19 浏览: 125
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
可以使用归并排序的思想进行合并,具体步骤如下:
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` 函数,并将结果打印出来。
阅读全文