#include #include struct list { int val; struct list *next; }; typedef struct list list; struct hash { int size; list **t; }; typedef struct hash hash; list *lcreate(int v) { list *l = malloc(sizeof(list)); l->val = v; l->next = NULL; return l; } list *ladd(list *h, int v) { list *h1 = lcreate(v); h1->next = h; return h1; } list *lsearch(list *h, int v) { list *i = h; while(i != NULL) { if (i->val == v) return i; i = i->next; } return NULL; } list *lrem(list *h, int v) { if (h != NULL && h->val == v) { list *s = h->next; free(h); return s; } else { list *i=h,*j=h; while(j != NULL) { if (j->val == v) { i->next = j->next; free(j); } i = j; j = j->next; } return h; } } void printl(list *h) { list *i=h; printf("["); while(i!=NULL) { printf("%d,", i->val); i = i->next; } printf("]\n"); } hash hcreate(int n) { hash h; int i; h.size = n; h.t = malloc(n*sizeof(list *)); for(i=0;i