| 我沒寫注釋 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; } |