C/C++泛型编程(1)线性查找算法

线性查找:从头到尾一步步依次序检查特定数值是否出现在线性序列中,如果当前元素值与该特定数值相同,此算法返回当前元素在此序列的位置,否则就移至下一个元素。

 

(一)C语言实现线性查找:

char* strchr(char* s,int c){ //字符串s中查找数值c

while(*s !='\0' && *s!=c){

   ++s;

   return *s==c?s:(char*)0;
 }

}

 

【指向序列结尾的指针】 代替 【整数计数法】

char *find1(char* first,char* last,int c){

 while(first!=last && *first !=c){
  ++first;

 }

 return first;

}

char A[N];

...

char* result=find1(A,A+N,c);

if(result==A+N){//查找失败

}else{//查找成功}

 

C语言中的三种不同种类指针:a.普通而有效指针如&A[0],可提领。b.非法指针如NULL。c.越过尾端指针,不可提领。

range[first,last)

一般满足如下性质:

(1)任何指针p,empty range[p,p) 空区间是有效区间。

(2)[first,last)有效且不为空,则[first+1,last)也必有效。

(3)[first,last)有效,mid为满足以下条件的任何指针:first出发后可到达mid,mid出发后可到达last,那么[first,mid) 和 [mid,last)亦有效

(4)如果[first,mid) 和 [mid,last)有效,那么[first,last)必有效。

 

【注意】每个range一次只能支持一个有效的iterator

 

(二)C++实现线性查找:

template <class Iterator,class T>

Iterator find(Iterator first,Iterator last,const T& value){

 while(first !=last && * first!==value){

 first ++;

}

 return first;

}

 

 

【注意】Iterator是算法与数据结构之间的接口。以iterator作为引数,便可以作用在许多不同的数据结构上。我们仅仅要求:iterator能够以某种线性顺序遍历某个数据结构,以访问其中的所有元素。

 

STL 5个迭代器:输入迭代、输出迭代、向前迭代、反转迭代、随机迭代 继承关系图如下:

C/C++泛型编程(1)线性查找算法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值