⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.c

📁 unix环境下实现的cmm语言编译器
💻 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 + -