本文目录一览:
C语言顺序查找程序
//顺序查找
//思路:从表中最后一个记录开始,逐个进行记录的关键字和
//给定值的比较,若某个记录的关键字和给定值比较相等,则
//返回返回记录所在的位置,或查找完所有记录后还没有发现
//符合的记录,则查找失败。
#include stdio.h
#include stdlib.h
#include math.h
#include time.h
#define N 10
typedef int DataType;//定义比较的元素类型
//静态查找表的顺序存储结构
typedef struct{
DataType * data;//数据元素存储空间基址,按实际长度分配,0号单元留空
//建表时按实际长度分配,0 号单元留空
int length;//表长度
}SSTable;
//创建一个静态表,内容为20以内的随机数
void createST(SSTable* ST,int n){
int i;
time_t t;
if(ST!=NULL){
ST-data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST-data!=NULL){
srand((unsigned) time(t));
for(i=1;i=n;i++){
ST-data[i]=rand() ;//产生20以内的随机数
}
ST-length=n;
}
}
}
//创建一个静态表,内容按从小到大排列,以便折半查找
void createST_binary(SSTable* ST,int n){
int i,j=0;
time_t t;
if(ST!=NULL){
ST-data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST-data!=NULL){
for(i=1;i=n;i++){
ST-data[i]=j;
j+=4;
}
ST-length=n;
}
}
}
//打印出静态表的内容
void print_SSTable(SSTable* ST){
int i,n=ST-length;
if(ST!=NULL){
for(i=1;i=n;i++){
printf(“%d “,ST-data[i]);
}
printf(“n”);
}
}
//顺序查找(Sequential Search)
//思路:从表中最后一个记录开始,逐个进行记录的关键字和
//给定值的比较,若某个记录的关键字和给定值比较相等,则
//返回返回记录所在的位置,或查找完所有记录后还没有发现
//符合的记录,则查找失败。
//查找成功:返回记录所在位置
//查找失败:返回0
int search_seq(SSTable ST,DataType key){
int i;
if(ST.data==NULL)return 0;
ST.data[0]=key;//设置监视哨。目的在于免去查找过程中每一步都要检测整
//个表是否查找完毕,是一个很有效的程序设计技巧 。监视
//哨也可以设在高下标处。
for(i=ST.length;ST.data[i]!=key;i–);
return i;
}
//折半查找(Binary Search)
//当记录的key按关系有序时可以使用折半查找
//思路:对于给定key值,逐步确定待查记录所在区间,每次将搜索空间减少一半(折半),
//直到查找成功或失败为止。
int search_binary(SSTable ST,DataType key){
int low,high,mid;
low=1;
high=ST.length;
while(low=high){//当表空间存在时
mid=(low+high)/2;
if(ST.data[mid]==key){
return mid;//查找成功,返回mid
}
if(keyST.data[mid]){
high=mid-1;//继续在前半区间查找
}else{
low=mid+1;//继续在后半区间查找
}
}
return 0;//查找失败
}
//分块查找(只记录思想)
//分块查找中,设记录表长为n,将表的n个记录分成b=n/s个块,每个s个记录
//最后一个记录数可以少于s个,且表分块有序,即后一个块的所有key值大于
//前一个块的所有key值
//每块对应一个索引项,索引项记录了该块记录的最大key值和该块第一记录的指针(或序号)
//算法:
//(1)由索引表确定待查找记录所在的块;
//(2)在块内顺序查找。
int main(){
int n=20;//在20个数中查找,方便看结果,不要设置得太大
SSTable ST,ST_binary;//分别用于顺序查找和折半查找的静态表
index indtb[n+1];//索引表,用于分块查找
createST(ST,n);//创建一个随机静态表
createST_binary(ST_binary,n);//创建一个从小到大顺序排列的静态表
//采用顺序查找
printf(“原始数据:”);
print_SSTable(ST);
printf(“顺序查找5的结果:%dn”,search_seq(ST,5));
printf(“顺序查找10的结果:%dn”,search_seq(ST,10));
printf(“顺序查找12的结果:%dn”,search_seq(ST,12));
printf(“顺序查找15的结果:%dn”,search_seq(ST,15));
printf(“顺序查找20的结果:%dn”,search_seq(ST,20));
printf(“——————————————–n”);
//采用折半查找
printf(“原始数据:”);
print_SSTable(ST_binary);
printf(“折半查找5的结果:%dn”,search_binary(ST_binary,5));
printf(“折半查找10的结果:%dn”,search_binary(ST_binary,10));
printf(“折半查找12的结果:%dn”,search_binary(ST_binary,12));
printf(“折半查找15的结果:%dn”,search_binary(ST_binary,15));
printf(“折半查找20的结果:%dn”,search_binary(ST_binary,20));
system(“pause”);//暂停一下,看看结果
free(ST.data);//不要忘了释放堆空间
return 0;
}
c语言顺序查找
在这个程序中,输入的10个数字,是以空格 隔开的。如果想用逗号隔开,会比较麻烦。
既然上面是空格隔开的,下面倒数第三行printf(“%d in %d”,key,i);key和i用空格隔开不用逗号是不行的。这是程序语句规定的,各输出项之间必须要用逗号分隔。这个与上面所说的运行时输入各数据用什么分隔(它是可以指定的)是两码事。
C语言顺序查找;
#includestdio.h
#includestring.h
typedef struct
{
char name[100];
char studentID[100];
char major[100];
char grade[100];
}student;
int main()
{
FILE *stdinf;
stdinf=fopen(“studentinf.txt”,”r”);
char ID[100],inf[100];
int x,y,z,i,a,b;
student st;
printf(“please input the studentID you want to search(0123456789):n”);
gets(ID);
while((fgets(inf,100,stdinf))!=NULL)
{
for(x=0,y=0,i=0;xstrlen(inf);x++,y++)
{
if(ID[x]==inf[y])
{
i++;
}
if(i==10)
{
for(a=0,b=0;b=strlen(inf)inf[b]!=’*’;a++,b++)
{
st.studentID[a]=inf[b];
}
st.studentID[a]=”;
b++;
for(a=0;b=strlen(inf)inf[b]!=’*’;a++,b++)
{
st.name[a]=inf[b];
}
st.name[a]=”;
b++;
for(a=0;b=strlen(inf)inf[b]!=’*’;a++,b++)
{
st.major[a]=inf[b];
}
st.major[a]=”;
b++;
for(a=0;b=strlen(inf)inf[b]!=’*’;a++,b++)
{
st.grade[a]=inf[b];
}
st.grade[a]=”;
printf(“studentID is:%sn”,st.studentID);
printf(“student’s name is:%sn”,st.name);
printf(“student’s major is:%sn”,st.major);
printf(“student’s grade is:%sn”,st.grade);
break;
}
}
}
fclose(stdinf);
return 0;
}
如何用C语言顺序查找程序?
#includestdio.h
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,x,y;
printf(“输入你要查找的数:n”);
scanf(“%d”,x);
y=0; //标记是否已找到,y=1表是找到了,y=0表示没找到
for(i=0;i10;i++) //循环,把x和数组中的元素一个个比较
{
if(x==a[i]) //如果x=a[i]说明已经找到
{
y=1; //把y变成1,说明已经找到了
printf(“你要查找的数%d在第个%d位置n”,x,i+1); //输出找到的相关信息
break; //跳出循环
}
}
if(y==0)printf(“无法找到你要查找的数n”); //y=0表示找不到
}
c语言顺序查找法
如果是在已有n个元素的数组a中顺序查找值为x的元素,以下是实现查找的函数代码,查找成功则返回此元素的位置,否则返回-1:
int find(int a[],int n,int x)
{int i;
for(i=0;ina[i]!=x;i++);
return in?i:-1;
}
用C语言编写顺序查找和二分查找(折半查找)
#include stdio.h
#define LENGTH 20
void SequenceSearch(int *fp,int Length);
void Search(int *fp,int length);
void Sort(int *fp,int length);
void main()
{
int count;
int arr[LENGTH];
printf(“请输入你的数据的个数:n”);
scanf(“%d”,count);
printf(“请输入%d个数据n”,count);
for(int i=0;icount;i++)
{
scanf(“%d”,arr[i]);
}
int choise=0;
do
{
printf(“1.使用顺序查询.n2.使用二分查找法查找.n3.退出n”);
scanf(“%d”,choise);
if(choise==1)
SequenceSearch(arr,count);
else if(choise==2)
Search(arr,count);
else if(choise==3)
break;
} while (choise==1||choise==2||choise==3);
}
void SequenceSearch(int *fp,int Length)
{
int data;
printf(“开始使用顺序查询.n请输入你想要查找的数据.n”);
scanf(“%d”,data);
for(int i=0;iLength;i++)
if(fp[i]==data)
{
printf(“经过%d次查找,查找到数据%d.n”,i+1,data);
return ;
}
printf(“经过%d次查找,未能查找到数据%d.n”,i,data);
}
void Search(int *fp,int length)
{
int data;
printf(“开始使用顺序查询.n请输入你想要查找的数据.n”);
scanf(“%d”,data);
printf(“由于二分查找法要求数据是有序的,现在开始为数组排序.n”);
Sort(fp,length);
printf(“数组现在已经是从小到大排列,下面将开始查找.n”);
int bottom,top,middle;
bottom=0;
top=length;
int i=0;
while (bottom=top)
{
middle=(bottom+top)/2;
i++;
if(fp[middle]data)
{
bottom=middle+1;
}
else if(fp[middle]data)
{
top=middle-1;
}
else
{
printf(“经过%d次查找,查找到数据%d.n”,i,data);
return;
}
}
printf(“经过%d次查找,未能查找到数据%d.n”,i,data);
}
void Sort(int *fp,int length)
{
printf(“现在开始为数组排序,排列结果将是从小到大.n”);
int temp;
for(int i=0;ilength;i++)
for(int j=0;jlength-i-1;j++)
if(fp[j]fp[j+1])
{
temp=fp[j];
fp[j]=fp[j+1];
fp[j+1]=temp;
}
printf(“排序完成!n下面输出排序后的数组:n”);
for(int k=0;klength;k++)
{
printf(“%5d”,fp[k]);
}
printf(“n”);
}