龙空技术网

知识分享:数据结构—C语言实现“顺序查找”和“折半查找”

C语言编程 333

前言:

现时咱们对“c语言col”大约比较注重,看官们都需要知道一些“c语言col”的相关内容。那么小编在网上收集了一些关于“c语言col””的相关资讯,希望大家能喜欢,小伙伴们一起来学习一下吧!

今日份分享:使用C语言实现静态查找表中的顺序查找和折半查找,并分析时间长短

Search.h文件

#define OK 1#define ERROR -1#include <stdio.h>#include<stdlib.h>#include<time.h>#define MAXSIZE 100typedef 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++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

标签: #c语言col