Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
C数组插入/删除_C_Algorithm_Data Structures_Big O - Fatal编程技术网

C数组插入/删除

C数组插入/删除,c,algorithm,data-structures,big-o,C,Algorithm,Data Structures,Big O,对于,它显示插入和删除是0(n): 与此相关的两个问题: 这是什么“插入”或“删除”操作?例如,以下内容是否为插入 int numbers[10]; numbers[4] = 12; // this would be 0(1) though (?) 这是指一个动态数组,其中插入/删除意味着列表中涉及一些大小调整吗?也就是说,如果我们有一个10个数字的数组,并且我们想要删除元素4,而不是执行数字[3]=0,这意味着我们想要得到一个大小为9的数组,其中前一个条目是第五个位置的项?例如: in

对于,它显示插入和删除是
0(n)

与此相关的两个问题:

    这是什么“插入”或“删除”操作?例如,以下内容是否为插入

    int numbers[10];
    numbers[4] = 12; // this would be 0(1) though (?)
    
  • 这是指一个动态数组,其中插入/删除意味着列表中涉及一些大小调整吗?也就是说,如果我们有一个10个数字的数组,并且我们想要删除元素4,而不是执行
    数字[3]=0
    ,这意味着我们想要得到一个大小为9的数组,其中前一个条目是第五个位置的项?例如:

    int numbers2[9];
    memcpy(numbers2, numbers, sizeof(int) * 3);
    memcpy(numbers2+3, numbers+4, sizeof(int) * 6);
    

从数组中添加或删除元素意味着您需要向上或向下移动现有元素,以说明添加或删除的元素

例如:

// assumes the array has capacity to add a member
void add_array(int *arr, int len, int index, int value)
{
    int i;
    for (i=len-1; i>index; i--) {
        arr[i+1] =  arr[i];
    }
    arry[index] = value;
}

void remove_array(int *arr, int len, int index)
{
    int i;
    for (i=index; i<len-1; i++) {
        arr[i] =  arr[i+1];
    }
}
//假定数组有能力添加成员
void add_数组(int*arr、int len、int index、int value)
{
int i;
对于(i=len-1;i>索引;i--){
arr[i+1]=arr[i];
}
arry[索引]=值;
}
void remove_数组(int*arr、int len、int index)
{
int i;

对于(i=index;i而言,从数组中添加或删除元素意味着您需要向上或向下移动现有元素以说明添加或删除的元素

例如:

// assumes the array has capacity to add a member
void add_array(int *arr, int len, int index, int value)
{
    int i;
    for (i=len-1; i>index; i--) {
        arr[i+1] =  arr[i];
    }
    arry[index] = value;
}

void remove_array(int *arr, int len, int index)
{
    int i;
    for (i=index; i<len-1; i++) {
        arr[i] =  arr[i+1];
    }
}
//假定数组有能力添加成员
void add_数组(int*arr、int len、int index、int value)
{
int i;
对于(i=len-1;i>索引;i--){
arr[i+1]=arr[i];
}
arry[索引]=值;
}
void remove_数组(int*arr、int len、int index)
{
int i;

对于(i=index;i您的示例不是插入新元素,而是覆盖现有元素。请注意不要过于严肃地看待这些复杂性--按照传统定义,它们是正确的,但有些是苹果和桔子。例如,插入数组定义为在索引处插入,但插入链表定义为在光标后插入。如果必须插入到索引处的链表中,但尚未将光标插入到插入位置,则必须首先搜索它,即Θ(n)。这就是为什么理解如何计算它们以及它们来自何处很重要,而不是仅仅记住一个公式表。您的示例不是插入新元素,而是覆盖现有元素。请注意不要过于严肃地对待这些复杂性--按照传统定义,它们是正确的,但有些是苹果,有些是oranges。例如,插入到数组中定义为在索引处插入,但插入到链表中定义为在光标之后插入。如果必须插入到索引处的链表中,但尚未将光标插入到插入位置,则必须首先搜索它,即Θ(n)这就是为什么理解如何计算它们以及它们来自何处很重要,而不仅仅是记住一张公式表。