Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在c编程中如何将数组的最后一个元素移动到另一个数组的第一个元素_Arrays_C - Fatal编程技术网

Arrays 在c编程中如何将数组的最后一个元素移动到另一个数组的第一个元素

Arrays 在c编程中如何将数组的最后一个元素移动到另一个数组的第一个元素,arrays,c,Arrays,C,如果数组的最后一个元素和另一个数组的第一个元素的大小都是10,如何将它们移动到另一个数组的第一个元素。我需要从第一个数组中删除元素并将其添加到第二个数组中。如果第二个数组已满(有10个元素),则丢失的元素应打印出来,如“数组2没有空间,因此元素5丢失”。 代码: 结果: arr[10]={1,2,3,4}; arr2[10]={5,6,7,8,9,10}; 如果arr2已满: char arr[10] = {1,2,3,4,5}; char arr2[10] = {6,7,8,9,10,11,

如果数组的最后一个元素和另一个数组的第一个元素的大小都是10,如何将它们移动到另一个数组的第一个元素。我需要从第一个数组中删除元素并将其添加到第二个数组中。如果第二个数组已满(有10个元素),则丢失的元素应打印出来,如“数组2没有空间,因此元素5丢失”。 代码:

结果:

arr[10]={1,2,3,4};
arr2[10]={5,6,7,8,9,10};
如果arr2已满:

char arr[10] = {1,2,3,4,5};
char arr2[10] = {6,7,8,9,10,11,12,13,19,20};
'''
result:
"Array 2 had no space, so element 5 was lost"

如果您想完全实现所描述的内容,则必须移动数组的所有元素。它的时间复杂度为O(n)——这就是为什么数组通常不适合这种工作

您还必须存储数组中实际存在的元素数。因为除非使用终止元素,否则没有确切的其他方法来知道这一点


char-arr[10]={1,2,3,4,5};
char arr2[10]={6,7,8,9,10};
尺寸=5;
尺寸=5;
if(sizeof(arr2)=arr2len)
{
printf(“值为%d的元素丢失,\n”,arr[arrlen-1]);
返回;
}
//增加arr2的长度
arr2len++;
//移动元素
对于(大小i=arr2len-1;i>0;--i)
{
arr2[i]=arr2[i-1];
}
//设置新元素
arr2[0]=arr[arrlen-1];
//从arr中“移除”元素并减小长度
arr[--arrlen]=0;

当然,这只是一个草案示例-您应该真正将其划分为干净的函数。但是,请记住,将数组传递给函数会将它们衰减为指针-在这种情况下,
sizeof
将不会产生它们的完整大小,您必须自己传递。

如果您想完全实现所描述的,您必须移动数组的所有元素。它的时间复杂度为O(n)——这就是为什么数组通常不适合这种工作

您还必须存储数组中实际存在的元素数。因为除非使用终止元素,否则没有确切的其他方法来知道这一点


char-arr[10]={1,2,3,4,5};
char arr2[10]={6,7,8,9,10};
尺寸=5;
尺寸=5;
if(sizeof(arr2)=arr2len)
{
printf(“值为%d的元素丢失,\n”,arr[arrlen-1]);
返回;
}
//增加arr2的长度
arr2len++;
//移动元素
对于(大小i=arr2len-1;i>0;--i)
{
arr2[i]=arr2[i-1];
}
//设置新元素
arr2[0]=arr[arrlen-1];
//从arr中“移除”元素并减小长度
arr[--arrlen]=0;
当然,这只是一个草案示例-您应该真正将其划分为干净的函数。但是请记住,将数组传递给函数会将它们衰减为指针-在这种情况下,
sizeof
不会产生它们的完整大小,您必须自己传递。

使用结构(包含数组)而不是基本数组

struct arrayN {
    int arr[10];
    int N;
};

void last2first(struct arrayN *dst, struct arrayN *src) {
    // NEEDS VALIDATION, for the moment we can say that
    // it is UNDEFINED BEHAVIOUR calling last2first with bad data
    memmove(dst->arr + 1, dst->arr, 9 * sizeof *dst->arr);
    dst->arr[0] = src->arr[--src->N];
}

int main(void) {
    struct arrayN arr1 = {{1, 2, 3, 4}, 4};
    struct arrayN arr2 = {{42}, 1};

    last2first(&arr1, &arr2);
}
注意:
arr1
arr2
的数组中始终有10个元素。

使用结构(包含数组)而不是基本数组

struct arrayN {
    int arr[10];
    int N;
};

void last2first(struct arrayN *dst, struct arrayN *src) {
    // NEEDS VALIDATION, for the moment we can say that
    // it is UNDEFINED BEHAVIOUR calling last2first with bad data
    memmove(dst->arr + 1, dst->arr, 9 * sizeof *dst->arr);
    dst->arr[0] = src->arr[--src->N];
}

int main(void) {
    struct arrayN arr1 = {{1, 2, 3, 4}, 4};
    struct arrayN arr2 = {{42}, 1};

    last2first(&arr1, &arr2);
}

注意:
arr1
arr2
在它们的数组中总是有10个元素。

也是用c语言编写的。不能从数组中移动元素。数组具有固定大小。但是,您可以复制元素的值,这是通过正常赋值完成的。如果您想调整“数组”的大小,必须使用指针和动态分配。如何知道数组已满?
char arr[10]={1,2,3,4,5}
字符arr[10]={1,2,3,4,5,0,0,0,0}的快捷方式。C语言中的数组有固定的大小,因此不能“删除”元素。同样,它也是C语言中的。不能从数组中移动元素。数组具有固定大小。但是,您可以复制元素的值,这是通过正常赋值完成的。如果您想调整“数组”的大小,必须使用指针和动态分配。如何知道数组已满?
char arr[10]={1,2,3,4,5}
字符arr[10]={1,2,3,4,5,0,0,0,0}的快捷方式。C中的数组具有固定大小,因此不能“删除”元素。