微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 数组插入/删除

如何解决C 数组插入/删除

对于array,它表明插入和删除0(n)

enter image description here

与此相关的两个问题:

  • 这将什么视为“插入”或“删除”操作?例如,以下是插入吗?

    int numbers[10];
    numbers[4] = 12; // this would be 0(1) though (?)
    
  • 这是指一个动态数组,其中插入/删除意味着列表中涉及一些调整大小吗?也就是说,如果我们有一个 10 个数的数组并且我们想要删除元素 4,而不是执行 numbers[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 index)
{
    int i;
    for (i=index; i<len-1; i++) {
        arr[i] =  arr[i+1];
    }
}

这是 O(n) 因为平均需要 n 次迭代来执行必要的移位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。