大话数据结构C语言51 查找算法

Posted 是CodeAllen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话数据结构C语言51 查找算法相关的知识,希望对你有一定的参考价值。

欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源
程序员技术交流①群:736386324 ,程序员技术交流②群:371394777    

静态查找和动态查找

静态查找:数据集合稳定,不需要添加,删除元素的查找操作。
动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。
 

关键字

在查找表查找某个特定元素时,前提是需要知道这个元素的一些属性。例如,每个人上学的时候都会有自己唯一的学号,因为你的姓名、年龄都有可能和其他人是重复的,唯独学号不会重复。 而学生具有的这些属性(学号、姓名、年龄等)都可以称为 关键字
 
关键字又细分为 主关键字 次关键字 若某个关键字可以唯一地识别一个数据元素时,称这个关键字为 主关键字 ,例如学生的学号就具有唯一性; 反之,像学生姓名、年龄这类的关键字,由于不具有唯一性,称为 次关键字
 
 

查找结构

对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。
 
对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题,这些技术我们都将在这部分教程里边介绍给大家。
 
 

顺序查找

顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功。如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。
 
实例代码:Sq_Search.c
// 顺序查找,a为要查找的数组,n为要查找的数组的长度,key为要查找的关键字
int Sq_Search(int *a, int n, int key)
{
    int i;
    for( i=1; i <= n; i++ )
    {
        if( a[i] == key )
        {
            return i;
        }
    }
    return 0;
}

 

优化代码:Sq_Search_2.c
// 顺序查找优化方案,a为要查找的数组,n为要查找的数组的长度,key为要查找的关键字
int Sq_Search(int *a, int n, int key)
{
    int i = n;
    a[0] = key
    while( a[i] != key )
    {
        i--;
    }
    
    return i;
}

 

 
问题:假设以下有一个结构体存放的是学生的记录,每条记录包括: 学号、姓名、成绩,请编写一个程序,要求输出1024编号同学的具体信息。

 
#include <stdio.h>

typedef struct student
{
    int id;
    char name[10];
    float score;
}Student;

float search(Student stu[], int n, int key)
{
    int i;
    
    for( i=0; i < n; i++ )
    {
        if( stu[i].id == key )
        {
            return i.score;
        }
    }
    
    return -1;
}

int main()
{
    Student stu[4] = {
        {1024, "Q", 100}, 
        {1026, "W", 60}, 
        {1028, "E", 100}, 
        {1030, "R", 60}
        };
    
    float score;
    
    score = search(stu, 4, 1024);
    printf("1024号的成绩是:%f", score);
    
    return 0;
}

 

以上是关于大话数据结构C语言51 查找算法的主要内容,如果未能解决你的问题,请参考以下文章

大话数据结构C语言52 折半查找和插值查找(按比例查找)

大话数据结构C语言54 线性索引查找

C语言数据结构(大话数据结构——笔记1)数据结构绪论算法线性表

大话数据结构C语言55 二叉排序树

大话数据结构C语言62 散列表(哈希表)查找

大话数据结构C语言56 二叉排序树的查找插入和删除