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

📄 avl.vtc

📁 Unix下的MUD客户端程序
💻 VTC
字号:
Ttree ?:= new_assoc();func make_tree(compare_func) [tree] {	tree = alloc(2, Ttree);	tree->cfunc = compare_func;	tree->root = NULL;	return tree;}func avlrot(n, d) [t] { t = n[d]; t[4] -= n[4]; n[4] = -t[4];			n[d] = t[5 - d]; t[5 - d] = n; return t; }func avlrot2(n, d) [t] { t = n[d][5 - d]; n[4] = -(n[4] == t[4]);			 n[d][4] = (n[4] == -t[4]); n[d][5 - d] = t[d];			 t[d] = n[d]; n[d] = t[5 - d]; t[5 - d] = n;			 return t; }func avlins(f, nptr, new) [n, dir] {	n = *nptr;	if (!n) {		*nptr = new;		return 1;	}	dir = (*f)(*new, *n);	if (!dir) {		acopy(n, new, 2);		return 0;	} else if (dir < 0 && avlins(f, &n[2], new) && --n[4] == -2) {		*nptr = n[2][4] == 1 ? avlrot2(n, 2) : avlrot(n, 2);		return (*nptr)[4];	} else if (dir > 0 && avlins(f, &n[3], new) && ++n[4] == 2) {		*nptr = n[3][4] == -1 ? avlrot2(n, 3) : avlrot(n, 3);		return (*nptr)[4];	}}func insert_tree(t, k, d) {	avlins(t->cfunc, &t->root, table(k, d, NULL, NULL, 0));}func find_tree(tree, key) [node, dir] {	node = tree->root;	while (node) {		dir = (*tree->cfunc)(key, *node);		if (!dir)			return node[1];		else			node = (dir < 0) ? node[2] : node[3];	}	return NULL;}func delete_tree(tree, key) [node, dir] {	node = tree->root;	while (node) {		dir = (*tree->cfunc)(key, *node);		if (!dir) {		       node[1] = NULL;		       return 1;		} else		       node = dir < 0 ? node[2] : node[3];	}}func traverse_tree(tree, map_func) {	callv(.inttt, -1, tree->root, argc - 1, argv + 1);}func inttt(node, map_func) {	if (!node)		return;	callv(.inttt, -1, node[2], argc - 1, argv + 1);	if (node[1])		callv(map_func, 2, node, argc - 2, argv + 2);	callv(.inttt, -1, node[3], argc - 1, argv + 1);}func del_smatches(tree, pattern) {	dsmfound = 0;	traverse_tree(tree, .intdsm, tree, pattern);	if (!dsmfound)		printf("Could not find %s\n", pattern);}func intdsm(name, node, tree, pattern) {	if (smatch(pattern, name)) {		delete_tree(tree, name);		dsmfound = 1;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -