用C语言编写函数顺序表的合并,并在每一条语句后都加上注释
时间: 2024-09-22 09:08:08 浏览: 50
02 教师用书_第2章_用C语言编写程序 2017021
在C语言中,我们可以创建一个函数来合并两个顺序表(通常是动态数组)。这里是一个简单的例子,我们将创建一个`mergeLists`函数,它接受两个指向链表头结点的指针作为输入并返回合并后的列表头结点。由于C语言本身并不支持链表数据结构,我们将假设这两个输入参数代表的是包含整数的静态数组。
```c
// 定义一个结构体表示节点,包含整数值和指向下一个元素的指针
typedef struct Node {
int data; // 节点的值
struct Node* next; // 指向下一个节点的指针
} Node;
// 函数声明,接收两个整数数组的首地址、长度以及合并后的数组首地址作为参数
void mergeLists(int* arr1, int len1, int* arr2, int len2, int* mergedArr);
// 函数体:合并两个有序数组
void mergeLists(int* arr1, int len1, int* arr2, int len2, int* mergedArr) {
// 初始化临时变量,用于存储当前遍历的位置
int i = 0, j = 0, k = 0;
// 当前正在处理的数组索引
while (i < len1 && j < len2) {
// 如果arr1的元素较小,将arr1的元素复制到mergedArr,并移动arr1的索引
if (arr1[i] <= arr2[j]) {
mergedArr[k++] = arr1[i++]; // 添加arr1的元素并递增索引
} else { // 否则从arr2添加元素
mergedArr[k++] = arr2[j++]; // 添加arr2的元素并递增索引
}
}
// 将剩余的元素(如果有的话)从未遍历完的数组复制到mergedArr
while (i < len1) {
mergedArr[k++] = arr1[i++];
}
// 如果arr2还有剩余元素,也一并复制
while (j < len2) {
mergedArr[k++] = arr2[j++];
}
// 最终,mergedArr包含了两个原数组的所有元素,k记录了实际写入的位置
}
// 示例:
int main() {
int arr1[] = {1, 3, 5};
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 4, 6};
int len2 = sizeof(arr2) / sizeof(arr2[0]);
int merged[len1 + len2];
mergeLists(arr1, len1, arr2, len2, merged);
// ... 打印或处理合并后的数组
return 0;
}
阅读全文