我没写注释
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;
}