C语言实现有序线性表合并去重

解题思路: 由于两个线性表中的元素是有序排列的,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中。若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中。

代码示例:

#include <stdio.h>

void mergeLists(int list1[], int size1, int list2[], int size2, int mergedList[]) {
    int i = 0, j = 0, k = 0;

    while (i < size1 && j < size2) {
        if (list1[i] < list2[j]) {
            mergedList[k++] = list1[i++];
        } else if (list1[i] > list2[j]) {
            mergedList[k++] = list2[j++];
        } else {
            mergedList[k++] = list1[i++];
            j++;
        }
    }

    while (i < size1) {
        mergedList[k++] = list1[i++];
    }

    while (j < size2) {
        mergedList[k++] = list2[j++];
    }
}

int main() {
    int list1[] = {1, 3, 5, 7, 9};
    int size1 = sizeof(list1) / sizeof(list1[0]);

    int list2[] = {2, 4, 5, 6, 8};
    int size2 = sizeof(list2) / sizeof(list2[0]);

    int mergedSize = size1 + size2;
    int mergedList[mergedSize];

    mergeLists(list1, size1, list2, size2, mergedList);

    printf('合并后的线性表:');
    for (int i = 0; i < mergedSize; i++) {
        printf('%d ', mergedList[i]);
    }
    printf('\n');

    return 0;
}

代码说明:

  • mergeLists 函数负责合并两个有序线性表,并确保相同元素只出现一次。
  • main 函数中,定义了两个有序线性表 list1list2,以及它们的长度 size1size2
  • 定义了一个足够大的线性表 mergedList 用于保存合并结果。
  • 调用 mergeLists 函数将两个线性表合并,并将结果存储在 mergedList 中。
  • 最后输出合并后的结果。

总结: 以上代码实现了两个有序线性表合并去重,代码简洁易懂,方便理解。在实际应用中,可以根据具体需求修改代码,例如使用其他数据类型或进行更多操作。


原文地址: https://www.cveoy.top/t/topic/phG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录