数据结构中常用的函数

/* * 数据结构中常用的函数 * bsearch:二分法搜索 * lfind/lsearch:线性搜索,如果lsearch()找不到关键数据时会主动把该项数据加入到数组里 * qsort:利用快速排序法排列数据 * * 从键盘读入不多于50个整型数据,组成数组,应用qsort排序。 */ #include <stdio.h> #include <stdlib.h> #define m 70 int compar(const void *a,const void *b) { int *aa=(int *)a, *bb=(int *)b; if(*aa > *bb) return 1; if(*aa == *bb)return 0; if(*aa < *bb) return -1; } int main(void) { int base[m],n; int i; printf("input n(n<50)/n"); scanf("%d",&n); printf("/n"); qsort(base, n, sizeof(int), compar); /* * void qsort(void *base,size_t nmemb,size_t size,int(* compar)(const void *,const void *)); * base指向要被搜索数组的开头地址 * nmemb代表数组中的元素数量 * size每一个元素的大小 * compar为函数指针,数据相同时返回0,不同则返回非0值。 */ for(i=0;i<n;i++) printf("%d ",base[i]); printf("/n"); return 0; }  

 

/* * 从键盘读入一串字符串,在已有字符串数组中查找这一字符串,如果找不到,主动 * 把该项数据添加到字符串数组里,如果找到显示这一字符串。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define NMEMB 50 #define SIZE 10 int compar(const void *a, const void *b) { return (strcmp((char *) a, (char *) b)); } int main(void) { char data[NMEMB][SIZE]={"linux","freebsd","solzris","sunos","windows"}; char key[80], *base, *offset; int i, nmemb=NMEMB, size=SIZE; for(i=1;i<5;i++) { fgets(key, sizeof(key), stdin);//从标准输入得到数据 key[strlen(key)-1]='/0'; base=data[0]; offset = (char *)lfind(key, base, &nmemb, size, compar); /* * void *lfind(const void *key,const void *base,size_t *nmemb,size_t size,int(* compar)(const void *, * const void *)); * key指向欲查找的关键数据的指针 * base指向要被搜索数组的开头地址 * nmemb代表数组中的数量 * size代表每一个元素的大小 * compar为函数指针,数据相同时返回0,不同则返回非0 * 找到关键数据则返回该笔元素的地址,如果在数组中找不到关键数据则返回NULL */ if(offset == NULL) { printf("%s not found/n",key); offset=(char *)lsearch(key, base, &nmemb, size, compar); /* * lsearch与lfind相同, * 唯一不同的是,对于返回为0值,即关键数据在数组中找不到时,则将数据主动添加到数组里 */ printf("Add %s to data array/n",offset); } else { printf("found: %c /n",offset); } } } 

你可能感兴趣的:(数据结构中常用的函数)