[合并]两个数组的元素

这篇博客讨论如何合并两个非降序有序数组a和b,得到新的非降序有序数组c。提出了两种解题思路:一是同步遍历两个数组,每次取较小元素放入新数组;二是将b数组元素插入到a数组中。涉及到动态内存分配、释放以及数组操作的问题。
摘要由CSDN通过智能技术生成

题目:给定两个有序数组(非降序),去除输出合并后的有序数组(非降序)
a=2,3,4,6,8,9; b=7,9,10; c=2,3,4,6,7,8,9

解题思路一:对两个数组中的元素进行同步遍历并进行比较,每次都将两个数组中较小的元素放到新数组中

  • 动态申请空间
  • free()
  • 指针
#include<stdio.h>
#include<stdlib.h>

//合并两个含有nA,nB的有序数组 
void Merge(int *a, int *b, int *c, int nA, int nB, int& nCout)
{
   
	int i=0;//数组a的下标 
	int j=0;//数组b的下标
	int k=0;//数组c的下标	
	
	//当两个数组都没结束比较时 
	while (i<nA&&j<nB)
	{
   
		if(a[i]<b[j])
		{
   
			c[k++]</
在 C 语言中,合并两个数组通常意味着创建一个新的数组,包含两个输入数组的所有元素。这可以通过动态内存分配和复制数据来完成。以下是一个简单的示例: ```c #include <stdio.h> #include <stdlib.h> // 包含 malloc 和 free 功能 // 定义结构体来存储数组信息 typedef struct { int *arr; // 数组地址 size_t len; // 长度 } ArrayInfo; // 合并两个数组 ArrayInfo* mergeArrays(int arr1[], int arr2[], int len1, int len2) { // 计算新数组的总长度 size_t totalLen = len1 + len2; // 动态分配新的数组空间 ArrayInfo *mergedArr = (ArrayInfo*)malloc(sizeof(ArrayInfo)); if (!mergedArr) { printf("Memory allocation failed.\n"); exit(1); } mergedArr->arr = (int*)malloc(totalLen * sizeof(int)); if (!mergedArr->arr) { free(mergedArr); printf("Memory allocation for new array failed.\n"); exit(1); } // 将第一个数组复制到新数组 memcpy(mergedArr->arr, arr1, len1 * sizeof(int)); // 将第二个数组添加到新数组末尾 memcpy(mergedArr->arr + len1, arr2, len2 * sizeof(int)); mergedArr->len = totalLen; return mergedArr; } int main() { int arr1[] = {1, 2, 3}; int len1 = sizeof(arr1) / sizeof(arr1[0]); int arr2[] = {4, 5, 6}; int len2 = sizeof(arr2) / sizeof(arr2[0]); ArrayInfo *merged = mergeArrays(arr1, arr2, len1, len2); printf("Merged array: "); for (size_t i = 0; i < merged->len; i++) { printf("%d ", merged->arr[i]); } free(merged->arr); free(merged); return 0; } ``` 这个程序首先计算合并后的数组长度,然后分配足够的内存来存储所有元素。接着将两个输入数组的内容复制到新数组中。最后,在`main`函数里打印合并后的数组并释放之前分配的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值