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

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识分享:数据结构—C语言实现“顺序查找”和“折半查找”相关的知识,希望对你有一定的参考价值。

今日份分享:使用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++编程学习交流圈子,QQ群:739386924点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

 编程学习视频分享:

 

以上是关于知识分享:数据结构—C语言实现“顺序查找”和“折半查找”的主要内容,如果未能解决你的问题,请参考以下文章

二分查找(折半查找)算法详解(C语言实现)

数据结构 查找表的顺序查找折半查找插值查找以及Fibonacci查找

数据结构(C语言版)严蔚敏--->常用的查找算法[静态查找表动态查找表]

数据结构(C语言版)严蔚敏--->常用的查找算法[静态查找表动态查找表]

C语言编写数据结构查找算法

六大查找算法(Python 语言实现)