数据结构及算法篇bsearch crypt lfind lsearch qsort rand srand
crypt(将密码或数据编码) 相关函数 getpass 表头文件 #define _XOPEN_SOURCE #include<unistd.h> 定义函数 char * crypt (const char *key,const char * salt); 函数说明 crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字 符组成的字符串,由a-z、A-Z、-,“.”和“/”所组成,用来决定使用4096 种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key 所指的字符串不会有所更动。编码过的字符串长度为13 个字符,前两个字符为参数salt代表的字符串。 返回值 返回一个指向以NULL结尾的密码字符串。 附加说明 使用GCC编译时需加-lcrypt。 范例 #include<unistd.h> main() { ]; char *key; ]; key= getpass(“Input First Password:”); slat[]=key[]; slat[]=key[]; strcpy(passwd,crypt(key slat)); key=getpass(“Input Second Password:”); slat[]=passwd[]; slat[]=passwd[]; printf(“After crypt(),1st passwd :%s\n”,passwd); printf(“After crypt(),2nd passwd:%s \n”,crypt(key slat)); } 执行 Input First Password: /* 输入test,编码后存于passwd[ ] */ Input Second Password /*输入test,密码相同编码后也会相同*/ After crypt () 1st Passwd : teH0wLIpW0gyQ After crypt () 2nd Passwd : teH0wLIpW0gyQ bsearch(二元搜索) 相关函数 qsort 表头文件 #include<stdlib.h> 定义函数 void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*)); 函数说明 bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。 附加说明 找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。 范例 #include<stdio.h> #include<stdlib.h> #define NMEMB 5 #define SIZE 10 int compar(const void *a,const void *b) { return (strcmp((char *)a,(char *)b)); } main() { ][size]={“linux”,”freebsd”,”solaris”,”sunos”,”windows”}; ],*base ,*offset; int i, nmemb=NMEMB,size=SIZE; ){ printf(“>”); fgets(key,sizeof(key),stdin); key[strlen(key)-]=’\’; if(!strcmp(key,”exit”))break; if(!strcmp(key,”list”)){ ;i<nmemb;i++) printf(“%s\n”,data[i]); continue; } ]; qsort(base,nmemb,size,compar); offset = (char *) bsearch(key,base,nmemb,size,compar); if( offset = =NULL){ printf(“%s not found!\n”,key); strcpy(data[nmemb++],key); printf(“Add %s to data array\n”,key); }else{ printf(“found: %s \n”,offset); } } } 执行 >hello /*输入hello字符串*/ hello not found! /*找不到hello 字符串*/ add hello to data array /*将hello字符串加入*/ >.list /*列出所有数据*/ freebsd linux solaris sunos windows hello >hello found: hello lfind(线性搜索) 相关函数 lsearch 表头文件 #include<stdlib.h> 定义函数 void *lfind (const void *key,const void *base,size_t *nmemb,size_t size,int(* compar) (const void * ,const void *)); 函数说明 lfind()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素是否相同,若传给 compar 的异地个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0值。Lfind()与lsearch()不同点在 于,当找不到关键数据时lfind()仅会返回NULL,而不会主动把该笔数据加入数组尾端。 返回值 找到关键数据则返回找到的该笔元素的地址,如果在数组中找不到关键数据则返回空指针(NULL)。 范例 参考lsearch()。 lsearch(线性搜索) 相关函数 lfind 表头文件 #include<stdlib.h> 定义函数 void *lsearch(const void * key ,const void * base ,size_t * nmemb,size_t size, int ( * compar) (const void * ,const void *)); 函数说明 lsearch()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size 决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的第一个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0 值。如果lsearch()找不到关键数据时会主动把该项数据加入数组里。 返回值 找到关键数据则返回找到的该笔元素的四肢,如果在数组中找不到关键数据则将此关键数据加入数组,再把加入数组后的地址返回。 范例 #include<stdio.h> #include<stdlib.h> #define NMEMB 50 #define SIZE 10 int compar (comst void *a,const void *b) { return (strcmp((char *) a, (char *) b)); } main() { char data[NMEMB][SIZE]={“Linux”,”freebsd”,”solzris”,”sunos”,”windows”}; ],*base,*offset; int i, nmemb=NMEMB,size=SIZE; ;i<;i++){ fgets(key,sizeof9key),stdin); key[strlen(key)-]=’\’; ]; offset = (char *)lfind(key,base,&nmemb,size,compar); if(offset ==NULL){ printf(“%s not found!\n”,key); offset=(char *) lsearch(key,base,&nmemb,size,compar); printf(“Add %s to data array\n”,offset); }else{ printf(“found : %s \n”,offset); } } } 执行 linux found:linux os/ os/ not found! add os/ to data array os/ found:os/ qsort(利用快速排序法排列数组) 相关函数 bsearch 表头文件 #include<stdlib.h> 定义函数 void qsort(void * base,size_t nmemb,size_t size,int ( * compar)(const void *, const void *)); 函数说明 参数base指向欲排序的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指 针,这个函数用来判断两个元素间的大小关系,若传给compar的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于零的值,两个元素 数据相等则回传0。 返回值 附加说明 范例 #define nmemb 7 #include <stdlib.h> int compar (const void *a ,const void *b) { int *aa=(int * ) a,*bb = (int * )b; ; ; ; } main( ) { ,,,-,,,}; int i; ; i<nmemb;i++) printf(“%d “,base[i]); printf(“\n”); qsort(base,nmemb,sizeof(int),compar); ;i<nmemb;i++) printf(“%d”base[i]); printf(“\n”); } 执行 - - rand(产生随机数) 相关函数 srand,random,srandom 表头文件 #include<stdlib.h> 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 范例 /* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考 srand()*/ #include<stdlib.h> main() { int i,j; ;i<;i++) { j=+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(“%d “,j); } } 执行 srand(设置随机数种子) 相关函数 rand,random srandom 表头文件 #include<stdlib.h> 定义函数 void srand (unsigned int seed); 函数说明 srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time()的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。 返回值 范例 /* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/ #include<time.h> #include<stdlib.h> main() { int i,j; srand(()); ;i<;i++) { j=+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(“ %d “,j); } } 执行
数据结构及算法篇bsearch crypt lfind lsearch qsort rand srand的更多相关文章
- 二级py--day4 数据结构与算法篇
二级py--day4 数据结构与算法篇 1.算法的基本特征:可行性.确定性.有穷性.拥有足够的情报 2.算法的设计要求包括效率与低存储量,既要考虑算法的时间复杂度和空间复杂度 3.算法的优劣:与算法描 ...
- python数据结构与算法篇:排序
1.冒泡排序(英语:Bubble Sort) 它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...
- 翻阅《数据结构与算法javascript描述》--数组篇
导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...
- 数据结构与算法 基于c语言篇
学习数据结构与算法走向深蓝之路 第一章:数据结构与算法概念型 数据结构:数据之间的相互关系,即是数据的组织形式. 基本组成:{ 数据:信息的载体 数据元素:数据基本单位: } 其结构形式有四种: 1, ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- 用python语言讲解数据结构与算法
写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...
随机推荐
- USACO 5.3 Network of Schools
Network of SchoolsIOI '96 Day 1 Problem 3 A number of schools are connected to a computer network. A ...
- vscode 配置import @ 路径提示及代码智提
1.安装插件:Path Intellisense 2.配置: "path-intellisense.mappings": { "@": "${work ...
- 变量覆盖漏洞学习及在webshell中的运用
一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...
- eclipse 背景颜色
步骤阅读 3 本例使用的背景色是喜大普奔的豆沙绿,比较柔和 设置为:色调:85.饱和度:120.亮度:208 即可,据说长时间使用可以缓解眼疲劳哦. (吐槽:开什么玩笑,远离编程才能缓解眼疲劳好吗)
- 机器学习之路:python 字典特征提取器 DictVectorizer
python3 学习使用api 将字典类型数据结构的样本,抽取特征,转化成向量形式 源码git: https://github.com/linyi0604/MachineLearning 代码: fr ...
- PHP 快速排序算法详解
备注:下面转载的快速排序算法有bug,数组中重复值会被删除,修改后如下: function quickSort($arr){ //递归出口 if(!isset($arr[1])){ return $a ...
- CodeForces600E Lomsat gelral 线段树合并
从树上启发式合并搜出来的题 然而看着好像线段树合并就能解决??? 那么就用线段树合并解决吧 维护\(max, sum\)表示值域区间中的一个数出现次数的最大值以及所有众数的和即可 复杂度\(O(n \ ...
- 安装第三方jar包的两种方式
由于部分第三放jar包没有放到maven中央仓库,而项目中又依赖了这些jar包,那么如何安装?我实践了两种,特做记录. 一.安装到 nexus 私有库: 在 3rd party 仓库下有个 Artif ...
- Codeforces Round #358 (Div. 2) C. Alyona and the Tree 水题
C. Alyona and the Tree 题目连接: http://www.codeforces.com/contest/682/problem/C Description Alyona deci ...
- Google Code Jam 2009 Qualification Round Problem B. Watersheds
https://code.google.com/codejam/contest/90101/dashboard#s=p1 Problem Geologists sometimes divide an ...