/* *Copyright (c) 2015 , 烟台大学计算机学院 *All right resvered . *文件名称: 线性表顺序查找算法.cpp *作 者: 郑兆涵 *查找——线性表顺序查找算法 */
问题:对线性表顺序查找算法进行分析
编程代码:
//线性表顺序查找算法 #include <stdio.h> #define MAXL 100 typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; //KeyType为关键字的数据类型 InfoType data; //其他数据 } NodeType; typedef NodeType SeqList[MAXL]; //顺序表类型 int SeqSearch(SeqList R,int n,KeyType k) { int i=0; while (i<n && R[i].key!=k) //从表头往后找 i++; if (i>=n) return 0; else return i+1; } int main() { int i,n=10; int result; SeqList R; KeyType a[]= {2,3,1,8,5,4,9,0,7,6},x=9; for (i=0; i<n; i++) R[i].key=a[i]; result = SeqSearch(R,n,x); if(result>0) printf("序列中第 %d 个是 %d\n",result, x); else printf("木有找到!\n"); return 0; }
学习心得:
被查找的对象是由一组元素组成的表或文件,而每个元素由若干哥数据项组成,假设每个元素都有一个能唯一标识该元素的关键字,在这种条件下,查找的定义是:给定一个值k,在含有n个元素的表中找出关键字等于k的元素.若找到,则查找成功,返回该元素的信息或该元素在表中的位置;否则查找失败,返回相关的指示信息.
线性表顺序查找算法分析:
查找与数据的存储有关,线性表{a1,a2,....,an}有顺序和链式两种存储结构.作为顺序表存储时实现顺序查找算法.顺序查找是一种最简单的查找方法.它的基本思路是:从表的一端开始,顺序扫描线性表,依次将扫描到的关键字和给定值k相比较,若当前扫描到的关键字与k值相等,则查找成功;若扫描结束,扔未找到关键字等于k的元素,则查找失败.顺序查找算法(在顺序表R[0..n-1]中查找关键字为k的元素,成功是返回找到的元素的逻辑序号,失败时返回0):
#define MAXL 100 typedef int KeyType; typedef struct { KeyType key; //KeyType为关键字的数据类型 InfoType data; //其他数据 } NodeType; typedef NodeType SeqList[MAXL]; //顺序表类型<pre name="code" class="cpp">int SeqSearch(SeqList R,int n,KeyType k) { int i=0; while (i<n && R[i].key!=k) //从表头往后找 i++; if (i>=n) return 0; else return i+1; }
首先定义顺序表的类型,再定义一个SeqSearch()函数实现顺序查找.在SeqSearch(SeqList R,int n,KeyType k)中,其中是在具有n个数据元素R的SeqList中查找值为k的过程.在函数进行运算过程中,首先是通过while判断,当i<n个数据元素的时候,并且R[i].key!=k,也就是说当i在数组规定的长度内,并且当关键字的值不等于k的时候,进行循环i++.最后再进行判断当i>=n的时候,返回0,失败;当i<n时也就是找到了R[i].key=k,则返回i+1,i为逻辑顺序,则返回i+1是得到了物理顺序.此成功时的平均查找长度为O(n).