在这里我们采用最简单的查找算法,就是顺序查找。
主要工作:
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 }
转载于:https://www.cnblogs.com/humaoxiao/archive/2013/04/25/3042627.html
相关资源:顺序表查找的实现