从C中的动态数组列表中删除项目

时间:2014-09-06 15:47:53

标签: c arrays dynamic-memory-allocation

我正在尝试通过编写一些简单的程序来习惯编写C,我想尝试在C中编写动态数组列表。到目前为止它可以工作,但我不确定如何删除项目将被实施,例如:

有一个包含一些值的列表,例如:

index   value
0       "a"
1       "b"
2       "c"
3       "d"

假设我要删除索引2 remove_item(list, 2)处的值,值如下:

index   value
0       "a"
1       "b"
2       NULL
3       "d"

但这可能会给我一些未定义的行为,这并不理想。所以我的问题是,如何将数据移位以填补空白,例如在2档移除索引:

index   value
0       "a"
1       "b"
2       "d"

修改: 我已经实现了第二个例子,但是我不确定如何使其表现如示例3所示。程序结构非常简单:

typedef struct ArrayList {
    int array_size;
    void **items;
} ArrayList;

任何帮助都很棒:)

1 个答案:

答案 0 :(得分:0)

index   value
0       "a"
1       "b"
2       "c"
3       "d"

致电remove_item(list, 2);

现在您的列表应如下所示:

index   value
0       "a"
1       "b"
2       "d"

换句话说,每个索引实际上代表一个节点。您希望删除带索引的节点(您也可以说id)2。删除索引为2的节点。现在您实际上将节点1与节点3连接。但是,由于索引是增量式的,因此将下一个节点的索引减1,因此3变为2。

当我在第一学期时,教授通过this代码教我们简单的链接列表。这对我真的很有帮助。请务必阅读评论。通过发布这个链接,这意味着我相信你不想只是做一些hw,而是要学习。 :)这不是你正在实现的,但它可以用于这个想法。