📄 list.c
字号:
/*list.c:管理循环列表*/#include "cmm.h"static List freelist; /*指向空闲的链*//*append将元素x添加至链尾list*/List append(void *x, List list){ List new; if ((new = freelist) != NULL) freelist = freelist->link; else NEW(new, PERM); if (list) { new->link = list->link; list->link = new; } else new->link = new; new->x = x; return new;}/*length返回list的长度*/int length(List list){ int n = 0; List p; if (list == NULL) return n; /*list指向循环列表的最后一个元素,list->link为列表的首个元素*/ for (n=1,p = list->link; p != list; p = p->link) n++; return n;}/*ltov将链表转换成一数组保存于a的存储区,并释放list*/void *ltov(List *list, unsigned a){ List p=*list; int i=0,n = length(p); void **array = newarray(n+1,sizeof(void *),a); if (p) for (p=p->link; i<n; i++) { array[i] = p->x; p = p->link; } array[i] = NULL; if(*list) { /*将*list放置于空闲链*/ freelist = (*list)->link; (*list)->link = NULL; /*断开循环*/ *list = NULL; /*释放列表*/ } return array;}void listmap(List list, void (*apply)(void *x,void *c1), void *c1){ List p; if(NULL==list) return; for( p=list->link; p!=list; p=p->link) (*apply)(p->x,c1); (*apply)(p->x,c1); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -