Wednesday, 15 June 2011

c - How to make a generic linked list -



c - How to make a generic linked list -

i'm trying create generic linked list in c programming language , succeeded have little problem:

linked_list.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;

linked_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 - > info = cdata; last_el - > nel = null; }

this works type int, char, float, double etc. not working char * because copying first 4 bytes (implementation dependant) of string, not whole string.

the problem size of every element in list fixed (el_size). not strings have same size, assuming 1 byte per char "hola" take 4 bytes while "hi" while take 2 bytes.

c algorithm list struct primitive-types

No comments:

Post a Comment