大话数据结构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 查找算法的主要内容,如果未能解决你的问题,请参考以下文章