这个合并数组应该怎么改



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

#define bool char
#define true 1
#define false 0
#define init_capacity 100
#define increase_capacity 10

//数组从0开始,索引总是-1

typedef int ElemType;

typedef struct SqList{

int length;

int capacity;

ElemType* elem;

}SqList;


bool init(SqList* L){//如果想把变化的l返回回去,就要加*

L->elem=(ElemType*)malloc(sizeof(ElemType)*init_capacity);

L->length=0;

L->capacity=init_capacity;

return true;

}



bool insert(SqList* L,int index,int data){

if(index<0||index>L->length+1){

    return false;
}

if(L->length>L->capacity){
    return false;
}


for(int j=L->length;j>=index;j--){

    L->elem[j]=L->elem[j-1];
}

L->length++;

L->elem[index-1]=data;

return true;

}


bool print(SqList L){

    if(L.length==0){

        printf("数组为空");

        return false;
    }

for(int i=0;i<L.length;i++){


    printf("%d\n",L.elem[i]);
}

return true;


}




bool delete(SqList* L,int index){

if(index<0||index>L->length-1){

    return false;
}

for(int i=index-1;i<L->length;i++){


    L->elem[i]=L->elem[i+1];

}

L->length--;

return true;

}


bool search(SqList* L,int data){


for(int i=0;i<L->length;i++){

    if(L->elem[i]==data){

         printf("查找数字索引是%d",i+1);

        return true;
    }

}

return false;


}


void remix(SqList* p,SqList* q){


SqList* mix=(ElemType*)malloc(sizeof(ElemType)*init_capacity);


int l1=p->length;

int l2=q->length;

for(int i=0;i<l1;i++){
    mix->elem[i]=p->elem[i];
}

for(int i=l1;i<l2;i++){
    mix->elem[i]=q->elem[i];
}

int temp=0;

for(int i=0;i<l1+l2-1;i++){
    for(int j=0;j<l1+l2-1-i;j++){
        if(mix->elem[j]>mix->elem[j+1]){
            temp=mix->elem[j];
            mix->elem[j]=mix->elem[j+1];
            mix->elem[j+1]=temp;
        }
    }
}


for(int k=0;k<l1+l2;k++){
    printf("%d ",mix->elem[k]);
}

}







int main()
{

    SqList Arr;
    SqList Arr2;

    init(&Arr);
    init(&Arr2);



    insert(&Arr2,1,6);
    insert(&Arr2,1,7);
    insert(&Arr2,1,8);
    insert(&Arr2,1,9);
    insert(&Arr2,1,1);

    insert(&Arr,1,5);
    insert(&Arr,1,4);
    insert(&Arr,1,3);
    insert(&Arr,1,2);
    insert(&Arr,1,1);

    delete(&Arr,1);

    print(Arr);

    search(&Arr,2);


   remix(&Arr,&Arr2);


    return 0;
}

#include <stdbool.h> // C 自带bool类型头文件

// #define bool char
// #define true 1
// #define false 0
#define INIT_CAPACITY 100
#define INCREASE_CAPACITY 10

// 数组从0开始,索引总是-1

typedef int ElemType;

typedef struct SqList
{

    int length;

    int capacity;

    ElemType *elem;

} SqList;

bool init(SqList *L)
{ // 如果想把变化的l返回回去,就要加*

    L->elem = (ElemType *)malloc(sizeof(ElemType) * INIT_CAPACITY);

    L->length = 0;

    L->capacity = INIT_CAPACITY;

    return true;
}

bool insert(SqList *L, int index, int data)
{

    if (index < 0 || index > L->length + 1)
    {

        return false;
    }

    if (L->length > L->capacity)
    {
        return false;
    }

    for (int j = L->length; j >= index; j--)
    {

        L->elem[j] = L->elem[j - 1];
    }

    L->length++;

    L->elem[index - 1] = data;

    return true;
}

void print(SqList *L) // bool print(SqList L)
{

    if (L->length == 0)
    {

        printf("数组为空\n");

        // return false;
    }

    for (int i = 0; i < L->length; i++)
    {

        printf("%d ", L->elem[i]);
    }
    printf("\n");
    // return true;
}

bool delete(SqList *L, int index)
{

    if (index < 0 || index > L->length - 1)
    {

        return false;
    }

    for (int i = index - 1; i < L->length; i++)
    {

        L->elem[i] = L->elem[i + 1];
    }

    L->length--;

    return true;
}

int search(SqList *L, int data)
{
    for (int i = 0; i < L->length; i++)
    {

        if (L->elem[i] == data)
        {

            printf("查找数字索引是 %d\n", i + 1);

            return i + 1; //
        }
    }

    return 0; //
}

SqList remix(SqList *p, SqList *q) //
{

    // SqList *mix = (ElemType *)malloc(sizeof(ElemType) * INIT_CAPACITY);
    SqList mix;                                                          //
    mix.elem = (ElemType *)malloc(sizeof(ElemType) * INIT_CAPACITY * 2); // 合并后元素数量扩大一倍

    mix.length = l1 + l2; // 数量不要忘记赋值
    mix.capacity = INIT_CAPACITY * 2;

    int l1 = p->length;

    int l2 = q->length;

    for (int i = 0; i < l1; i++)
    {
        mix.elem[i] = p->elem[i]; //
    }

    for (int i = 0; i < l2; i++) // for (int i = l1; i < l2; i++)
    {
        // mix.elem[i] = q->elem[i]; //q->elem[i]会越界
        mix.elem[l1 + i] = q->elem[i];
        // 这里也可以通过从mix查找q->elem[i]得到个索引,再插入到mix里。
    }

    int temp = 0;

    for (int i = 0; i < mix.length - 1; i++) // for (int i = 0; i < l1 + l2 - 1; i++)
    {
        for (int j = 0; j < mix.length - 1 - i; j++) // for (int j = 0; j < l1 + l2 - 1 - i; j++)
        {
            if (mix.elem[j] > mix.elem[j + 1]) //
            {
                temp = mix.elem[j];            //
                mix.elem[j] = mix.elem[j + 1]; //
                mix.elem[j + 1] = temp;        //
            }
        }
    }

    // 也可以通过返回链表,外部输出
    //  for (int k = 0; k < mix.length; k++) // for (int k = 0; k < l1 + l2; k++)
    //  {
    //      printf("%d ", mix.elem[k]); //
    //  }
    //  printf("\n");

    return mix;
}

int main()
{

    SqList Arr;
    SqList Arr2;

    init(&Arr);
    init(&Arr2);

    insert(&Arr2, 1, 6);
    insert(&Arr2, 1, 7);
    insert(&Arr2, 1, 8);
    insert(&Arr2, 1, 9);
    insert(&Arr2, 1, 1);

    insert(&Arr, 1, 5);
    insert(&Arr, 1, 4);
    insert(&Arr, 1, 3);
    insert(&Arr, 1, 2);
    insert(&Arr, 1, 1);

    print(&Arr);  //
    print(&Arr2); //

    delete (&Arr, 1);

    print(&Arr);

    search(&Arr, 2);

    SqList Arr3 = remix(&Arr, &Arr2);
    print(&Arr3);

    return 0;
}

【以下回答由 GPT 生成】

# C语言中如何合并数组

问题标签: c语言, 数组合并

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

typedef int ElemType;

typedef struct SqList {
    int length;
    int capacity;
    ElemType* elem;
} SqList;

bool mergeArrays(SqList* A, SqList* B, SqList* C);

int main() {
    SqList A, B, C;

    // 首先初始化数组A和数组B

    mergeArrays(&A, &B, &C);

    // 输出合并后的数组C

    return 0;
}

bool mergeArrays(SqList* A, SqList* B, SqList* C) {
    // 为数组C分配足够的内存空间
    C->capacity = A->length + B->length;
    C->elem = (ElemType*)malloc(sizeof(ElemType) * C->capacity);

    // 将数组A的元素复制到数组C中
    for (int i = 0; i < A->length; i++) {
        C->elem[i] = A->elem[i];
    }

    // 将数组B的元素复制到数组C中
    for (int j = 0; j < B->length; j++) {
        C->elem[A->length + j] = B->elem[j];
    }

    C->length = A->length + B->length;

    return true;
}

以上是使用C语言合并两个数组A和B成一个新的数组C的示例代码。首先定义了一个SqList结构体用于表示数组,包括数组的长度、容量和元素指针。然后编写了mergeArrays函数,该函数接收数组A、B和C的指针作为参数,实现了将数组A和数组B合并到数组C的功能。在函数内部,首先为数组C分配足够的内存空间,然后将数组A的元素复制到数组C中,再将数组B的元素复制到数组C中,最后设置数组C的长度为数组A和数组B的长度之和。在main函数中使用示例代码调用mergeArrays函数,并输出合并后的数组C。

希望以上解答对你有帮助。若有任何疑问,请随时追问。 ```



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^