#include <stdio.h> #include <stdlib.h>

// 定义有序表结构体 struct SortedList { int* elements; int length; };

// 初始化有序表 struct SortedList* initSortedList(int* arr, int length) { struct SortedList* list = (struct SortedList*)malloc(sizeof(struct SortedList)); list->length = length; list->elements = (int*)malloc(length * sizeof(int)); for (int i = 0; i < length; i++) { list->elements[i] = arr[i]; } return list; }

// 打印有序表 void printSortedList(struct SortedList* list) { for (int i = 0; i < list->length; i++) { printf("%d ", list->elements[i]); } printf("\n"); }

// 有序表交集 struct SortedList* intersect(struct SortedList* list1, struct SortedList* list2) { struct SortedList* result = (struct SortedList*)malloc(sizeof(struct SortedList)); result->length = 0; result->elements = (int*)malloc(list1->length * sizeof(int));

int i = 0, j = 0, k = 0;
while (i < list1->length && j < list2->length) {
    if (list1->elements[i] == list2->elements[j]) {
        result->elements[k++] = list1->elements[i];
        i++;
        j++;
        result->length++;
    }
    else if (list1->elements[i] < list2->elements[j]) {
        i++;
    }
    else {
        j++;
    }
}

return result;

}

// 有序表并集 struct SortedList* unionSet(struct SortedList* list1, struct SortedList* list2) { struct SortedList* result = (struct SortedList*)malloc(sizeof(struct SortedList)); result->length = 0; result->elements = (int*)malloc((list1->length + list2->length) * sizeof(int));

int i = 0, j = 0, k = 0;
while (i < list1->length && j < list2->length) {
    if (list1->elements[i] == list2->elements[j]) {
        result->elements[k++] = list1->elements[i++];
        j++;
        result->length++;
    }
    else if (list1->elements[i] < list2->elements[j]) {
        result->elements[k++] = list1->elements[i++];
        result->length++;
    }
    else {
        result->elements[k++] = list2->elements[j++];
        result->length++;
    }
}

while (i < list1->length) {
    result->elements[k++] = list1->elements[i++];
    result->length++;
}

while (j < list2->length) {
    result->elements[k++] = list2->elements[j++];
    result->length++;
}

return result;

}

int main() { int arr1[] = {1, 3, 5, 7, 9}; int arr2[] = {2, 4, 5, 6, 8}; struct SortedList* list1 = initSortedList(arr1, 5); struct SortedList* list2 = initSortedList(arr2, 5);

printf("有序表1:");
printSortedList(list1);
printf("有序表2:");
printSortedList(list2);

struct SortedList* intersectList = intersect(list1, list2);
printf("交集:");
printSortedList(intersectList);

struct SortedList* unionList = unionSet(list1, list2);
printf("并集:");
printSortedList(unionList);

free(list1->elements);
free(list1);
free(list2->elements);
free(list2);
free(intersectList->elements);
free(intersectList);
free(unionList->elements);
free(unionList);

return 0;

}


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

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