1 /*linklist.h*/ 2 #ifndef LINKLIST_H 3 #define LINKLIST_H 4 //定义节点指针 5 typedef struct node *link; 6 //节点数据结构 7 struct node { 8 unsigned char item; 9 link next; 10 }; 11 //创建节点 12 link make(unsigned char item); 13 //释放节点内存 14 void free_node(link); 15 //查找节点 16 link search(unsigned char); 17 //删除节点 18 void delete(link); 19 //执行回调函数 20 void traverse(void (*visit)(link)); 21 //销毁链表 22 void destroy(void); 23 //压入 24 void push(link); 25 //弹出 26 link pop(void); 27 #endif
1 /*linklist.c*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include "linklist.h" 5 static link head = NULL; 6 /** 7 * 功能:创建节点 8 * return:link 9 */ 10 link make_node(unsigned char item) 11 { 12 //分配内存 13 link p = malloc(sizeof *p); 14 p->item = item; 15 p->next = NULL; 16 return p; 17 } 18 19 /** 20 * 功能:释放节点内存 21 * return:void 22 */ 23 void free_node(link p) 24 { 25 free(p); 26 } 27 28 /** 29 * 功能:查找节点 30 * return:link 31 */ 32 link search(unsigned char key) 33 { 34 link p; 35 for(p = head; p; p = p->next) { 36 if(p->item == key){ 37 return p; 38 } 39 } 40 return NULL; 41 } 42 43 /** 44 * 功能:插入节点 45 * return:void 46 */ 47 void insert(link p) 48 { 49 p->next = head; 50 head = p; 51 } 52 53 /** 54 * 功能:删除节点 55 * return:void 56 */ 57 void delete(link p) 58 { 59 link pre; 60 if (p == head) { 61 head = p->next; 62 return; 63 } 64 for (pre = head; pre; pre = pre->next) 65 { 66 if(pre->next == p) { 67 pre->next = p->next; 68 return; 69 } 70 } 71 } 72 73 /** 74 * 功能:执行回调函数 75 * return:void 76 */ 77 void traverse(void (*visit)(link)) 78 { 79 link p; 80 for (p = head; p; p = p->next) 81 { 82 visit(p); 83 } 84 85 } 86 87 /** 88 * 功能:销毁链表 89 * return:void 90 */ 91 void destroy(void) 92 { 93 link q,p; 94 p = head; 95 head = NULL; 96 while (p) 97 { 98 q = p; 99 p = p->next; 100 free_node(q); 101 } 102 } 103 104 /** 105 * 功能:压入 106 * return:void 107 */ 108 void push(link p) 109 { 110 insert(p); 111 } 112 113 /** 114 * 功能:弹出 115 * return:void 116 */ 117 link pop(void) 118 { 119 if(head == NULL){ 120 return NULL; 121 } else { 122 link p = head; 123 head = head->next; 124 return p; 125 } 126 }
1 #include <stdio.h> 2 #include "linklist.h" 3 void print_item (link p) 4 { 5 printf("%d\n",p->item); 6 } 7 int main() 8 { 9 link p = make_node(10); 10 insert(p); 11 p = make_node(5); 12 insert(p); 13 p = make_node(90); 14 insert(p); 15 delete(p); 16 free_node(p); 17 traverse(print_item); 18 destroy(); 19 return 1; 20 }
浙公网安备 33010602011771号