C语言实现合并两个有序顺序表为一个有序线性表

本文提供了一个完整的C语言程序,演示如何将两个有序顺序表合并成一个新的有序线性表。c#include <stdio.h>#include <stdlib.h>

#define MAX_SIZE 100

// 定义顺序表结构typedef struct { int data[MAX_SIZE]; int length;} SeqList;

// 合并两个顺序表为一个线性表void mergeLists(SeqList *list1, SeqList *list2, SeqList *mergedList) { int i = 0, j = 0, k = 0;

// 依次比较两个顺序表的元素,将较小者填入 mergedList    while (i < list1->length && j < list2->length) {        if (list1->data[i] <= list2->data[j]) {            mergedList->data[k++] = list1->data[i++];        } else {            mergedList->data[k++] = list2->data[j++];        }    }

// 将剩余的元素填入 mergedList    while (i < list1->length) {        mergedList->data[k++] = list1->data[i++];    }    while (j < list2->length) {        mergedList->data[k++] = list2->data[j++];    }

mergedList->length = k;}

// 打印线性表元素void printList(SeqList *list) { for (int i = 0; i < list->length; i++) { printf('%d ', list->data[i]); } printf(' ');}

int main() { SeqList list1 = {{1, 3, 5, 7}, 4}; SeqList list2 = {{2, 4, 6, 8}, 4}; SeqList mergedList;

// 合并两个顺序表    mergeLists(&list1, &list2, &mergedList);

printf('合并后的线性表: ');    printList(&mergedList);

return 0;}

代码解释:

  1. 定义顺序表结构: SeqList 结构体用于表示顺序表,包含一个整型数组 data 存储数据,以及一个整型变量 length 表示顺序表长度。2. 合并函数 mergeLists: * 该函数接受三个参数:两个待合并的顺序表指针 list1list2,以及用于存储合并结果的顺序表指针 mergedList。 * 使用三个索引 ijk 分别指向 list1list2mergedList 的当前元素。 * 通过循环比较 list1list2 中的元素,将较小的元素复制到 mergedList 中,并移动相应的索引。 * 最后,将剩余元素复制到 mergedList 中,并更新 mergedList 的长度。3. 打印函数 printList: * 该函数接受一个顺序表指针 list 作为参数。 * 遍历顺序表,打印每个元素的值。4. 主函数 main: * 创建两个示例顺序表 list1list2,并初始化数据和长度。 * 创建用于存储合并结果的顺序表 mergedList。 * 调用 mergeLists 函数合并 list1list2。 * 调用 printList 函数打印合并后的顺序表 mergedList

程序输出:

合并后的线性表: 1 2 3 4 5 6 7 8

总结:

这段代码清晰地展示了如何使用C语言实现合并两个有序顺序表的操作,并提供了详细的代码解释和示例。这对于理解数据结构和算法的概念非常有帮助。

C语言实现合并两个有序顺序表为一个有序线性表

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

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