| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

linux C数据结构及算法篇

时间:2006-06-24 13:56:40  来源:Linux联盟收集  作者:Linux联盟收集
crypt(将密码或数据编码)
相关函数
getpassyCyLinux联盟
表头文件
#define _XOPEN_SOURCEyCyLinux联盟
#include<unistd.h>yCyLinux联盟
定义函数
char * crypt (const char *key,const char * salt);yCyLinux联盟
函数说明
crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z、A-Z、0-9,“.”和“/”所组成,用来决定使用4096 种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key 所指的字符串不会有所更动。编码过的字符串长度为13 个字符,前两个字符为参数salt代表的字符串。yCyLinux联盟
返回值
返回一个指向以NULL结尾的密码字符串。yCyLinux联盟
附加说明
使用GCC编译时需加-lcrypt。yCyLinux联盟
范例
#include<unistd.h>yCyLinux联盟
main()yCyLinux联盟
{yCyLinux联盟
char passwd[13];yCyLinux联盟
char *key;yCyLinux联盟
char slat[2];yCyLinux联盟
key= getpass(“Input First Password:”);yCyLinux联盟
slat[0]=key[0];yCyLinux联盟
slat[1]=key[1];yCyLinux联盟
strcpy(passwd,crypt(key slat));yCyLinux联盟
key=getpass(“Input Second Password:”);yCyLinux联盟
slat[0]=passwd[0];yCyLinux联盟
slat[1]=passwd[1];yCyLinux联盟
printf(“After crypt(),1st passwd :%sn”,passwd);yCyLinux联盟
printf(“After crypt(),2nd passwd:%s n”,crypt(key slat));yCyLinux联盟
}yCyLinux联盟
执行
Input First Password: /* 输入test,编码后存于passwd[ ] */yCyLinux联盟
Input Second Password /*输入test,密码相同编码后也会相同*/yCyLinux联盟
After crypt () 1st Passwd : teH0wLIpW0gyQyCyLinux联盟
After crypt () 2nd Passwd : teH0wLIpW0gyQyCyLinux联盟
 
yCyLinux联盟
yCyLinux联盟
yCyLinux联盟
bsearch(二元搜索)
相关函数
qsortyCyLinux联盟
表头文件
#include<stdlib.h>yCyLinux联盟
定义函数
void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*));yCyLinux联盟
函数说明
bsearch()利用二元搜索从排序好的数组中查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素之间的大小关系,若传给compar 的第一个参数所指的元素数据大于第二个参数所指的元素数据则必须回传大于0 的值,两个元素数据相等则回传0。yCyLinux联盟
附加说明
找到关键数据则返回找到的地址,如果在数组中找不到关键数据则返回NULL。yCyLinux联盟
范例
#include<stdio.h>yCyLinux联盟
#include<stdlib.h>yCyLinux联盟
#define NMEMB 5yCyLinux联盟
#define SIZE 10yCyLinux联盟
int compar(const void *a,const void *b)yCyLinux联盟
{yCyLinux联盟
return (strcmp((char *)a,(char *)b));yCyLinux联盟
}yCyLinux联盟
main()yCyLinux联盟
{yCyLinux联盟
char data[50][size]={“linux”,”freebsd”,”solaris”,”sunos”,”windows”};yCyLinux联盟
char key[80],*base ,*offset;yCyLinux联盟
int i, nmemb=NMEMB,size=SIZE;yCyLinux联盟
while(1){yCyLinux联盟
printf(“>”);yCyLinux联盟
fgets(key,sizeof(key),stdin);yCyLinux联盟
key[strlen(key)-1]=’’;yCyLinux联盟
if(!strcmp(key,”exit”))break;yCyLinux联盟
if(!strcmp(key,”list”)){yCyLinux联盟
for(i=0;i<nmemb;i++)yCyLinux联盟
printf(“%sn”,data[i]);yCyLinux联盟
continue;yCyLinux联盟
}yCyLinux联盟
base = data[0];yCyLinux联盟
qsort(base,nmemb,size,compar);yCyLinux联盟
offset = (char *) bsearch(key,base,nmemb,size,compar);yCyLinux联盟
if( offset = =NULL){yCyLinux联盟
printf(“%s not found!n”,key);yCyLinux联盟
strcpy(data[nmemb++],key);yCyLinux联盟
printf(“Add %s to data arrayn”,key);yCyLinux联盟
}else{yCyLinux联盟
printf(“found: %s n”,offset);yCyLinux联盟
}yCyLinux联盟
}yCyLinux联盟
}yCyLinux联盟
执行
>hello /*输入hello字符串*/yCyLinux联盟
hello not found! /*找不到hello 字符串*/yCyLinux联盟
add hello to data array /*将hello字符串加入*/yCyLinux联盟
>.list /*列出所有数据*/yCyLinux联盟
freebsdyCyLinux联盟
linuxyCyLinux联盟
solarisyCyLinux联盟
sunosyCyLinux联盟
windowsyCyLinux联盟
helloyCyLinux联盟
>helloyCyLinux联盟
found: helloyCyLinux联盟
 
yCyLinux联盟
yCyLinux联盟
yCyLinux联盟
lfind(线性搜索)
相关函数
lsearchyCyLinux联盟
表头文件
#include<stdlib.h>yCyLinux联盟
定义函数
void *lfind (const void *key,const void *base,size_t *nmemb,size_tyCyLinux联盟
size,int(* compar) (const void * ,const void *));yCyLinux联盟
函数说明
lfind()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb代表数组中的元素数量,每一元素的大小则由参数size决定,最后一项参数compar为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的异地个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0值。Lfind()与lsearch()不同点在于,当找不到关键数据时lfind()仅会返回NULL,而不会主动把该笔数据加入数组尾端。yCyLinux联盟
返回值
找到关键数据则返回找到的该笔元素的地址,如果在数组中找不到关键数据则返回空指针(NULL)。yCyLinux联盟
范例
参考lsearch()。yCyLinux联盟
 
yCyLinux联盟
yCyLinux联盟
yCyLinux联盟
lsearch(线性搜索)
相关函数
lfindyCyLinux联盟
表头文件
#include<stdlib.h>yCyLinux联盟
定义函数
void *lsearch(const void * key ,const void * base ,size_t * nmemb,size_t size, int ( * compar) (const void * ,const void *));yCyLinux联盟
函数说明
lsearch()利用线性搜索在数组中从头至尾一项项查找数据。参数key指向欲查找的关键数据,参数base指向要被搜索的数组开头地址,参数nmemb 代表数组中的元素数量,每一元素的大小则由参数size 决定,最后一项参数compar 为一函数指针,这个函数用来判断两个元素是否相同,若传给compar 的第一个参数所指的元素数据和第二个参数所指的元素数据相同时则返回0,两个元素数据不相同则返回非0 值。如果lsearch()找不到关键数据时会主动把该项数据加入数组里。yCyLinux联盟
返回值
找到关键数据则返回找到的该笔元素的四肢,如果在数组中找不到关键数据则将此关键数据加入数组,再把加入数组后的地址返回。yCyLinux联盟
范例
#include<stdio.h>yCyLinux联盟
#include<stdlib.
 1/2    1 2 ›› ›|

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门