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

📄 slsort.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1983, 1985, 1991 Peter J. Nicklin. * Copyright (c) 1991 Version Technology. * All Rights Reserved. * * $License: VT.1.1 $ * Redistribution and use in source and binary forms,  with or without * modification,  are permitted provided that the following conditions * are met:  (1) Redistributions of source code must retain the  above * copyright  notice,  this  list  of  conditions  and  the  following * disclaimer.  (2) Redistributions in binary form must reproduce  the * above  copyright notice,  this list of conditions and the following * disclaimer in the  documentation  and/or other  materials  provided * with  the  distribution.  (3) All advertising materials  mentioning * features or  use  of  this  software  must  display  the  following * acknowledgement:  ``This  product  includes  software  developed by * Version Technology.''  Neither the name of Version  Technology  nor * the  name  of  Peter J. Nicklin  may  be used to endorse or promote * products derived from this software without specific prior  written * permission. * * THIS SOFTWARE IS PROVIDED BY VERSION TECHNOLOGY ``AS IS''  AND  ANY * EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT LIMITED TO, THE * IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL  VERSION  TECHNOLOGY  BE * LIABLE  FOR ANY DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, * OR  CONSEQUENTIAL DAMAGES   (INCLUDING,   BUT   NOT   LIMITED   TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT LIABILITY,  OR  TORT * (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING  IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE,  EVEN  IF  ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * Report problems and direct questions to nicklin@netcom.com * * $Header: slsort.c,v 4.3 91/11/25 19:44:59 nicklin Exp $ * * Author: Peter J. Nicklin *//* * slsort() sorts list slist according to comparison function compar(). * compar() is to be called with two arguments and must return an integer * greater than, equal to, or less than 0, depending on the lexicographic * relationship between the two arguments. Returns integer YES if * successful, otherwise NO if out of memory. */#include <stdio.h>#include "null.h"#include "slist.h"#include "yesno.h"static int comparb();			/* compare 2 list blocks */static int (*sscmp)();			/* string compare function */slsort(compar, slist)	int (*compar)();		/* compare two strings */	SLIST *slist;			/* pointer to list head block */{	char **kp;			/* pointer to key pointer array */	char *malloc();			/* memory allocator */	char **skp;			/* ptr to start of key ptr array */	SLBLK *curblk;			/* current list block */	if (slist->nk <= 0)		return(YES);	else if ((skp = (char **) malloc((unsigned)slist->nk*sizeof(char *))) == NULL)		{		nocore();		return(NO);		}	for (kp = skp, curblk = slist->head; curblk != NULL; kp++, curblk = curblk->next)		*kp = curblk->key;	sscmp = compar;	qsort((char *) skp, slist->nk, sizeof(char *), comparb);	for (kp = skp, curblk = slist->head; curblk != NULL; kp++, curblk = curblk->next)		curblk->key = *kp;		free((char *) skp);	return(YES);}/* * comparb() compares key strings in 2 list blocks. Returns whatever * sscmp() returns. sscmp() is a string compare function. */static intcomparb(s1, s2)	char **s1;			/* string pointer */	char **s2;			/* string pointer */{	return((*sscmp)(*s1, *s2));}

⌨️ 快捷键说明

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