/*
*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).