今日份分享:使用C语言实现静态查找表中的顺序查找和折半查找,并分析时间长短
Search.h文件
#define OK 1
#define ERROR -1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 100
typedef int KeyType;
typedef int ElemType;
typedef struct{
ElemType data[10];
KeyType key;
}Node;
typedef struct{
Node elem[MAXSIZE];
int length;
}SSTable;
int CreateTable(SSTable &ST,int n);
void OutputTable(SSTable ST);
int Search_Seq(SSTable ST,KeyType key);
int Search_Bin(SSTable ST,KeyType key);
主要函数:
① 顺序表的创建
int CreateTable(SSTable &ST,int n)
{
int i;
ST.length=n;
for(i=1;i<=n;i++)
{
printf("输入关键字:");
scanf("%d",&ST.elem[i].key);
printf("输入值:");
scanf("%s",&ST.elem[i].data);
}
return OK;
}
②顺序表的输出
void OutputTable(SSTable ST)
{
int i;
printf("关键字: ");
for(i=1;i<=ST.length;i++)
printf("%6d",ST.elem[i].key);
printf("\n值 : ");
for(i=1;i<=ST.length;i++)
printf(" %s ",ST.elem[i].data);
}
③顺序查找
int Search_Seq(SSTable ST,KeyType key)
{
ST.elem[0].key=key;
int i=ST.length;
while(ST.elem[i].key!=key)i--;
return i;
}
④折半查找
int Search_Bin(SSTable ST,KeyType key)
{
int low=1,high=ST.length;
while(low<=high)
{
int mid=(low+high)/2;
if(key==ST.elem[mid].key)return mid;
else if(key<ST.elem[mid].key)high=mid-1;
else low=mid+1;
}
return 0;
}
Main函数
Main函数中增加了时间函数用来测试查找时间的大小,当然,在试验中,无法输入大量数据,故两者查找时间相差不大。
int main(int argc, char* argv[])
{
clock_t start,finish;
printf("输入构造的顺序表的长度:");
SSTable ST;int n;
scanf("%d",&n);
CreateTable(ST,n);
printf("检查顺序表\n");
OutputTable(ST);
printf("\n--------------顺序查找--------------------\n");
printf("输入要查找的值的序号:");
int key;
scanf("%d",&key);
int t;
start=clock();
t=Search_Seq(ST,key);
finish=clock();
if(t==0)
printf("查找失败,无匹配\n");
else
{
printf("关键字为%d的数据是%s。\n",t,ST.elem[Search_Seq(ST,key)].data);
printf("查找时间为: %lf\n",(double)(finish-start));
}
printf("\n--------------折半查找--------------------\n");
printf("输入要查找的值的序号:");
scanf("%d",&key);
start=clock();
t=Search_Bin(ST,key);
finish=clock();
if(t==0)
printf("查找失败,无匹配\n");
else
{
printf("关键字为%d的数据是%s。\n",t,ST.elem[Search_Bin(ST,key)].data);
printf("查找时间为: %lf\n",(double)(finish-start));
}
return 0;
}
数据:
查找:
注意:
1. Main函数中增加了时间函数用来测试查找时间的大小,当然,在试验中,无法输入大量数据,故两者查找时间相差不大。
2.定义结构体的时候要注意
每个数据有两个元素,一个是关键字,一个是保存数据
typedef struct{
ElemType data[10];
KeyType key;
}Node;
typedef struct{
Node elem[MAXSIZE];
int length;
}SSTable;
希望对大家有帮助,有什么C/C++学习上的问题也可以来和我交流!
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!