顺序查找法

特点:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。存储结构通常为顺序结构也可以为链式结构。
算法思想:在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字。从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则返回相应的下标。
没有顺序排序的数据:只能顺序查找,如果数据排序了使用顺序查找和折半查找都可以。
顺序查找:速度慢

#include<iostream>
using namespace std;

typedef struct{
    int r[100];
    int length;
}SStable;

//在顺序表ST中顺序查找关键字等于K的元素,若找到,则返回函数值为该元素的位置,否则为0  
int Search_Seq(SStable &ST,int k) {
    int i;
    ST.r[0]=k;//将0号单元作为哨兵,从而避免了每次查找都要判断i是否越界的问题
    i=ST.length;
    while(ST.r[i]!=k)  
        i--;  
    return i;//即如果查找失败,则返回0  
}  

//建立需要查找的顺序表
void CreateTable(SStable &ST,int n)  
{  
    int i;  
    cin>>ST.length;  
    for(i=1;i<=n;i++)  //给顺序表下标从1开始,因为0设置为了“监视哨”  
        cin>>ST.r[i];    
} 

int main()  
{  
    //freopen("in.txt","r",stdin);  
    int k;  
    SStable ST;   
    CreateTable(ST,30);   
    k=Search_Seq(ST,120);//顺序查找  
    cout<<k<<endl;  
    return 0;
}  

平均查找长度ASL=(n+1)/2;

下面为不设置“监视哨”的顺序查找算法,它在循环控制条件中增加了i>=1,用以判断是否越界。加监视哨可以省去这个条件,从而提高查找效率。

int Search_Seq(SStable &ST,int k) {
        int i=ST.length;
        while(i>=1&&ST.r[i]!=k)
            i--;
        if(i>=1)
            return i;
        else
            return 0;
 }

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值