C语言实现合并两个有序顺序表为一个有序线性表
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;}
代码解释:
- 定义顺序表结构:
SeqList结构体用于表示顺序表,包含一个整型数组data存储数据,以及一个整型变量length表示顺序表长度。2. 合并函数mergeLists: * 该函数接受三个参数:两个待合并的顺序表指针list1和list2,以及用于存储合并结果的顺序表指针mergedList。 * 使用三个索引i、j和k分别指向list1、list2和mergedList的当前元素。 * 通过循环比较list1和list2中的元素,将较小的元素复制到mergedList中,并移动相应的索引。 * 最后,将剩余元素复制到mergedList中,并更新mergedList的长度。3. 打印函数printList: * 该函数接受一个顺序表指针list作为参数。 * 遍历顺序表,打印每个元素的值。4. 主函数main: * 创建两个示例顺序表list1和list2,并初始化数据和长度。 * 创建用于存储合并结果的顺序表mergedList。 * 调用mergeLists函数合并list1和list2。 * 调用printList函数打印合并后的顺序表mergedList。
程序输出:
合并后的线性表: 1 2 3 4 5 6 7 8
总结:
这段代码清晰地展示了如何使用C语言实现合并两个有序顺序表的操作,并提供了详细的代码解释和示例。这对于理解数据结构和算法的概念非常有帮助。
原文地址: https://www.cveoy.top/t/topic/kjM 著作权归作者所有。请勿转载和采集!