/* linkedlist.c */ #include #include "linkedlist.h" //static link head = NULL; static List ListHead; link make_node(unsigned char item) { link p = malloc(sizeof *p); p->item = item; p->next = NULL; return p; } void free_node(link p) { free(p); } link search(unsigned char key) { link p; //for (p = head; p; p = p->next) for (p = ListHead.head; p; p = p->next) if (p->item == key) return p; return NULL; } void insert(link p) { //p->next = head; p->next = ListHead.head; ListHead.head = p; } link delete(link p) { link prev; if (p == ListHead.head) { ListHead.head = p->next; return p; } for (prev = ListHead.head; prev; prev = prev->next) if (prev->next == p) { prev->next = p->next; return p; } return NULL; } link deleteUniformed(link p) { link prev; if (p == ListHead.head) { ListHead.head = p->next; return p; } for (prev = ListHead.head; prev; prev = prev->next) if (prev->next == p) { prev->next = p->next; return p; } return NULL; } void traverse(void (*visit)(link)) { link p; for (p = ListHead.head; p; p = p->next) visit(p); } void destroy(void) { link q, p = ListHead.head; ListHead.head = NULL; while (p) { q = p; p = p->next; free(q); } } void push(link p) { insert(p); } link pop(void) { if (ListHead.head == NULL) return NULL; else return delete(ListHead.head); }