【大话数据结构C语言】51 查找算法
【摘要】
欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777
静态查找和动态查找
静态查找:数据集合稳定,不需要添加,删除元素的查找操作。
动态查找:数据集合在查找的过程中...
欢迎关注我的公众号是【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;
-
}
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/116862773
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)