feat(ll)!: add new ll function and rename insert
ds_*ll_insert -> ds_*ll_append to better reflect what it does and there is now ds_*ll_add to add data anywhere in the ll.
This commit is contained in:
parent
46b0219ab4
commit
69dc1dcb45
4 changed files with 104 additions and 16 deletions
66
ds.c
66
ds.c
|
|
@ -40,7 +40,67 @@ ds_dll_t
|
|||
}
|
||||
|
||||
int
|
||||
ds_sll_insert(ds_sll_t *ll, void *data)
|
||||
ds_sll_add(ds_sll_t **ll, void *data, unsigned x)
|
||||
{
|
||||
int i;
|
||||
ds_sll_t *cur, *prev, *new;
|
||||
if (!ll || !data) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0, cur = *ll; cur; prev = cur, cur = cur->next, i++) {
|
||||
if (i == x) {
|
||||
if (!cur->data) {
|
||||
cur->data = data;
|
||||
return 0;
|
||||
}
|
||||
new = ds_sll_new_node(data);
|
||||
new->next = cur;
|
||||
if (i == 0) {
|
||||
*ll = new;
|
||||
} else {
|
||||
prev->next = new;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
ds_dll_add(ds_dll_t **ll, void *data, unsigned x)
|
||||
{
|
||||
int i;
|
||||
ds_dll_t *cur, *new;
|
||||
if (!ll || !data) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0, cur = *ll; cur; cur = cur->next, i++) {
|
||||
if (i == x) {
|
||||
if (!cur->data) {
|
||||
cur->data = data;
|
||||
return 0;
|
||||
}
|
||||
new = ds_dll_new_node(data);
|
||||
new->next = cur;
|
||||
new->prev = cur->prev;
|
||||
cur->prev = new;
|
||||
if (i == 0) {
|
||||
*ll = new;
|
||||
} else {
|
||||
cur->prev->next = new;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
ds_sll_append(ds_sll_t *ll, void *data)
|
||||
{
|
||||
if (!ll || !data) {
|
||||
return -1;
|
||||
|
|
@ -60,7 +120,7 @@ ds_sll_insert(ds_sll_t *ll, void *data)
|
|||
}
|
||||
|
||||
int
|
||||
ds_dll_insert(ds_dll_t *ll, void *data)
|
||||
ds_dll_append(ds_dll_t *ll, void *data)
|
||||
{
|
||||
if (!ll || !data) {
|
||||
return -1;
|
||||
|
|
@ -241,7 +301,7 @@ ds_hmp_insert(ds_hmp_t *hmp, char *key, void *data)
|
|||
|
||||
/* get the ll and put the data into it */
|
||||
ll = hmp->data[hash_pos];
|
||||
if (ds_sll_insert(ll, kv) != 0) {
|
||||
if (ds_sll_append(ll, kv) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue