我正在尝试在中创建一个通用链表C编程语言和我
成功了,但我有一个小问题:
链接列表.h
struct Element {
void * data;
struct Element * nEl;
};
typedef struct Element Element;
struct List {
size_t el_size;
Element * start_el;
};
typedef struct List List;
链接列表.c
List * create_list(size_t el_size);
void delete_list(List * ls);
void append(List * ls, void * data);
void s_append(List * ls, void * data);
void append(List * ls, void * data) {
Element * last_el = ls - > start_el;
if (last_el == NULL)
ls - > start_el = last_el = malloc(sizeof(Element));
else {
while (last_el - > nEl != NULL)
last_el = last_el - > nEl;
last_el - > nEl = malloc(sizeof(Element));
last_el = last_el - > nEl;
}
void * cdata = malloc(ls - > el_size);
memcpy(cdata, data, ls - > el_size);
last_el - > data = cdata;
last_el - > nEl = NULL;
}
这适用于所有类型,例如int
, char
, float
, double
ETC。
但它不与char *
因为它复制了前 4 个bytes
(取决于实现)string
,但不是全部string
.
问题是列表中每个元素的大小是固定的(el_size)。并非所有字符串都具有相同的大小,假设每个字符 1 个字节“hola”将占用 4 个字节,而“hi”将占用 2 个字节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)