数据结构及算法篇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 ...
随机推荐
- 【LOJ】#2384. 「HNOI2013」切糕
题解 神仙网络流啊-- naive的我一直想把每个纵轴拆点,每个纵轴建R个点(大概是要跑费用流吧--)--然后第二个限制就gg了,什么也想不出来,菜啊TAT 后来我发现大神们的建图都是,一个原点,一个 ...
- USACO 6.3 Fence Rails(一道纯剪枝应用)
Fence RailsBurch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of his ...
- WordCount_命令行运行时指定参数
WordCountApp命令行运行时指定参数 1.修改之前的WordCountApp.java的代码 package cmd; import java.net.URI; import org.apac ...
- 微信公众号第三方平台生成自定义菜单提示 获取"access_token失败"
在微信公众号第三方平台要生成自定义菜单时,程序反应很慢,最终提示"获取access_token失败"(之前程序无改动,使用时间已久),查了大半天,找不出原因. 排除.在微信公众号平 ...
- PHP会话——模拟购物车的功能
1.php默认是不开启会话的,要使用会话用两种方法:(1)使用session_start();显示的开启会话.(2)在php.ini中找到如下的一行:找到session.auto_start = 0, ...
- C#中的特性 (Attribute) 入门 (二)
C#中的特性 (Attribute) 入门 (二) 接下来我们要自己定义我们自己的特性,通过我们自己定义的特性来描述我们的代码. 自定义特性 所有的自定义特性都应该继承或者间接的继承自Attribut ...
- ARM 常用汇编指令
ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _sta ...
- [BZOJ3638 && BZOJ3272]带修区间不相交最大K子段和(线段树模拟费用流)
https://www.cnblogs.com/DaD3zZ-Beyonder/p/5634149.html k可重区间集问题有两种建图方式,可能这一种才可以被线段树优化. 换个角度看,这也是一个类似 ...
- 【POJ】1840:Eqs【哈希表】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18299 Accepted: 8933 Description ...
- python 爬虫 处理超级课程表传输的数据
借鉴的别人的思路 http://www.oschina.net/code/snippet_2463131_53711 抓取超级课程表传输的数据 他的传输数据居然是明文的-- 现在已经把自己的课表都抓出 ...