我正在尝试通过编写一些简单的程序来习惯编写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;
任何帮助都很棒:)
答案 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,而是要学习。 :)这不是你正在实现的,但它可以用于这个想法。