数据结构------查找之顺序查找
本人因目前备战考研,需要用到数据结构,因此整理了一些数据结构方面的知识点,如有错误之处,欢迎各位指导。
1.基本名词概念:
(1)查找:查找是指在数据集合中寻找满足某种条件的数据元素的过程。
(2)查找表:查找表是用于查找的同种数据类型的数据集合。 静态查找表是只涉及到了查询和检索操作的一类查找表;与此对应,动态查找表是一类不仅涉及到了查询和检索操作,还有动态插入或删除操作的查找表。
(3)关键字:数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。例如,在由一个学生元素构成的数据集合中,学生元素中“学号”这一数据项的值唯一标识一名学生。
(4)平均查找长度:在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度是指在所有查找过程中进行关键字的比较次数的平均值。
2.顺序查找:
(1)顺序查找又称线性查找,主要用于在线性表中进行查找。
(2)顺序查找的查找过程为:从表中的第一个数据元素开始,逐个同记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中最后一个关键字查找完也没有成功匹配,则查找失败。顺序查找算法比较简单,下面是该算法的代码实现过程(相关注释已经在代码中标明了):
#include<iostream>
using namespace std;
#define maxSize 10
typedef int elemType;
//定义一个线性表的结构体,新的结构体名为ssTable
typedef struct{
elemType data[maxSize];//表中的数组用来存储数据
int tableLen=maxSize;//表的长度
}ssTable;
int search(ssTable ST,elemType key)//顺序查找函数
{
int i;
for(i=0;i<ST.tableLen && ST.data[i]!=key;i++);//当i小于表的长度且data[i]中的数据元素不为要查找的key值时,执行循环
return i==ST.tableLen? -1:i+1;//查找失败返回-1,查找成功便返回要查找的元素在表中的位置
}
int main()
{
ssTable sst;
elemType e;
elemType b;
cout<<"请依次往表中输"<<maxSize<<"个元素: ";
for(int i=0;i<maxSize;i++)
{
cin>>e;
sst.data[i]=e;
cin.get();
}
cout<<"您输入的"<<maxSize<<"个元素分别为:";
for(int i=0;i<maxSize;i++)
{
cout<<sst.data[i]<<" ";
}
cout<<endl;
cout<<"请输入要查找的元素: ";
cin>>b;
int result=search(sst,b);
if(result==-1)
{
cout<<"列表中没有该元素"<<endl;
}else
{
cout<<"元素'"<<b<<"'在第"<<result<<"个"<<endl;
}
return 0;
}
代码运行结果如下图所示:
下一篇博客将会更新折半查找知识。