C语言实现有序线性表合并:去除重复元素
C语言实现有序线性表合并:去除重复元素
本文将介绍如何使用C语言合并两个有序的线性表,并确保合并后的线性表中不包含重复元素。
算法思路
当两个线性表都是有序的时候,我们可以采用双指针的方法进行合并。具体步骤如下:
- 创建一个新的线性表,用于存储合并后的结果。2. 使用两个指针分别指向两个待合并的线性表的头部。3. 比较两个指针指向的元素: - 如果两个元素相等,则将其中一个元素放入新的线性表中,并将两个指针都向后移动一位。 - 如果第一个元素小于第二个元素,则将第一个元素放入新的线性表中,并将第一个指针向后移动一位。 - 如果第一个元素大于第二个元素,则将第二个元素放入新的线性表中,并将第二个指针向后移动一位。4. 重复步骤3,直到其中一个指针到达线性表的末尾。5. 将另一个线性表中剩余的元素依次放入新的线性表中。
代码实现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 { // list1[i] == list2[j] mergedList[k++] = list1[i++]; j++; // 跳过 list2 中的重复元素 } }
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('
');
return 0;}
代码解释
mergeLists函数接收两个有序线性表list1和list2,以及它们的长度size1和size2作为参数,同时还接收一个用于保存合并结果的线性表mergedList。- 在mergeLists函数中,使用三个指针i,j,k分别指向list1,list2和mergedList的当前元素。- 通过循环比较list1和list2中的元素,将较小的元素或相等的元素(只取一个)放入mergedList中。- 最后,将剩余元素复制到mergedList中。- 在main函数中,定义了两个有序线性表list1和list2,并调用mergeLists函数进行合并,最后打印合并后的结果。
希望本文能够帮助你理解如何使用C语言合并两个有序线性表并去除重复元素。
原文地址: https://www.cveoy.top/t/topic/oXV 著作权归作者所有。请勿转载和采集!