| 我没写注释 link.h #ifndef LINKEDLIST_H #define LINKEDLIST_H typedef struct node *link; struct node { unsigned char item; link next; }; link make_node(unsigned char item); void free_node(link p); link search(unsigned char key); void insert(link p); link delete(link p); void traverse(void(*visit)(link)); void destroy(void); void push(link p); link pop(void); #endif link.c #include <stdio.h> #include <stdlib.h> #include "link.h" static link head = NULL; 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) if (p->item == key) return p; return NULL; } void insert(link p) { p->next=head; head=p; } link delete(link p) { link prev; if (p==head) { head=p->next; return p; } for (prev=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=head;p;p=p->next) visit(p); } void destroy(void) { link q, p=head; head=NULL; while(p) { q=p; p=p->next; free(q); } } void push(link p) { insert(p); } link pop(void) { if (head==NULL) return NULL; else return delete(head); } void printf_item(link p) { printf("%d\n",p->item); } int main(void) { link p=make_node(10); insert(p); p=make_node(5); insert(p); p=make_node(90); insert(p); p=search(5); delete(p); free_node(p); traverse(printf_item); destroy(); p=make_node(100); push(p); p=make_node(200); push(p); p=make_node(220); push(p); while(p=pop()) { printf_item(p); free_node(p); } return 0; } |