#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。
希望以上解答对你有帮助。若有任何疑问,请随时追问。 ```
【相关推荐】