顺序表查找

在这里我们采用最简单的查找算法,就是顺序查找。

主要工作:

1、新建一个数据结构SeqList代表顺序表。

2、确定线性表长度,元素内容,和查找元素,返回元素的位置。

1、当我们新建一个C++控制台应用程序之后,默认的给出的初始代码如下:

1 #include "stdafx.h"

2 

3 int _tmain(int argc, _TCHAR* argv[])

4 {

5     return 0;

6 }

那么这个#include "stdafx.h" #include "stdio.h" 是什么关系呢,我们看一下stdfx.h的定义内容:

#pragma once

#include "targetver.h"

#include <stdio.h>

#include <tchar.h>

这样就明白了,stdfx.h里面包含了stdio.h,这个问题就不用纠结了。

2、明确一下,我们顺序表中的元素数据类型都是int类型,所以要提前定义一下:

#define ElemType int

为了演示方便我们限定一下列表的最大长度为100,同样需要提前声明一下:

#define    MAXSIZE  100

3、顺序表的数据结构

1 typedef  struct

2 {

3     ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/

4     int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),从0开始,空表置为-1*/

5 }SeqList;

4、查找函数

 
 1 int  Locate(SeqList L, ElemType e)

 2 {    

 3     int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/

 4     while ((i<=L.last)&&(L.elem[i]!=e))        /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/

 5         i++; 

 6     if  (i<=L.last)

 7         return(i+1);  /*若找到值为e的元素,则返回其序号*/

 8     else

 9         return(-1);  /*若没找到,则返回空序号*/

10 }

需要注意的是在这里我们如果查找到相关元素,返回的是它的位置,不是索引,所以是从1开始。

5、完整代码

 
 1 // SqlList.cpp : 定义控制台应用程序的入口点。

 2 //

 3 

 4 #include "stdafx.h"

 5 

 6 #define ElemType int

 7 #define    MAXSIZE  100  

 8 

 9 typedef  struct

10 { 

11     ElemType  elem[MAXSIZE]; 

12     int       last;  

13 }SeqList;

14 

15 int  Locate(SeqList L, ElemType e)

16 {    

17     int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/

18     while ((i<=L.last)&&(L.elem[i]!=e))        /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/

19         i++; 

20     if  (i<=L.last)

21         return(i+1);  /*若找到值为e的元素,则返回其序号*/

22     else

23         return(-1);  /*若没找到,则返回空序号*/

24 }

25 

26 int _tmain(int argc, _TCHAR* argv[])

27 {

28     SeqList l;

29     int p,q,r;

30     int i;

31     printf("请输入线性表的长度:");

32     scanf("%d",&r);

33     l.last = r-1;

34     printf("请输入线性表的各元素值:\n");

35     for(i=0; i<=l.last; i++)

36     {

37         scanf("%d",&l.elem[i]);

38     }

39     printf("请输入要查找的元素值:\n");

40     scanf("%d",&q);

41     p=Locate(l,q);

42     if(p == -1)

43         printf("在此线性表中没有该元素!\n");

44     else

45         printf("该元素在线性表中的位置为:%d\n",p);

46     return 0;

47 }

你可能感兴趣的:(顺序)