目录
一、 介绍
相信大家再日常学习生活中遇到难题常常会上网输入关键字,查找到你想要的答案;那么在C语言中如何查找到你想要的数据呢?初学C语言,老师肯定会让你试试在数组中找到指定的一个数,将他改成另一值;查找的方法多种多样,运用场景也千变万化,接下来我们一起来学习基础且实用的查找方法

二、顺序表查找
2.1 认识与基础

若给定一个数组,在数组中查找某一元素,并返回其下标。就像在衣柜里找衣服一样,按顺序一件一件的查找到你想要的就行。我们看看代码是如何实现的⬇️
int Sequential_Sreach(int* a, int key, int n) //a为传入的数组;key为需要查找的元素;
{ //n为数组元素个数;
for (int i = 0; i < n; i++)
{
if (a[i] == key)
return i;
}
return 0; //若没有找到,则返回0;
}
2.2 优化改进
上述方法,每进入一次循环都要判断 i 是否越界,接下来介绍一个改进后的代码:若要查找数组下标从1到n中的某个元素,设置一个哨兵,每次与该哨兵比较,一起通过代码来理解⬇️
int Sequential_Sreach(int* a, int key, int n)
{
a[0] = key;
int i = n;
while (a[i] != key)
{
i--;
}
return i;
}
※
与之前不一样的是这里是找下标1到n中的元素,将a[0]赋值需要查找的数,从右往左查找,进入while循环,减去下标 i 直到a[ i ] ==key;
若当数组中没有查到到,此时i = 0,跳出while循环,return 0;
2.3 例题:移除元素
LeetCode 27.移除元素https://leetcode.cn/problems/remove-element/
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
审题:最开始做这道题的时候可能会轻敌,移除元素不就只需要将查找到的元素删除吗,但这是个数组,并且题目要求返回删除后的长度,所以每次删除一个元素,需要将其后面的所有元素往前移一位,像这样你可以很简单的将其暴力地解出,但是效率会很低;这里我们介绍一个做题时常用且巧妙地方法:双指针(左右指针)
解题:
(1)定义 left , right 指向同一数组,需要查找的元素 val;
(2)※for循环中,right遍历整个数组,若right指向的元素等于 val,则left保持原来位置(该位置值为val,待覆值),right指向下一位置;
※ 当right指向的元素不为val时,将此时的值赋给left指向的值,就将原本为val的值覆盖了
(3)※ left为数组下标,最后left指向的是left+1个数,但移除后的的个数为left;

本文从顺序表查找开始,逐步深入到二分查找、插值查找等有序表查找方法,最终详细解析散列表(哈希表)的原理及其应用场景。通过多个实例加深理解,适合初学者入门掌握。
最低0.47元/天 解锁文章
1597

被折叠的 条评论
为什么被折叠?



