数据结构——【查找】——顺序查找

这篇文章将简单介绍三大查找中的顺序查找,顺序查找主要用于线性表中的查找,其中,线性表可有序可无序。

顺序查找的缺点是,当n较大时,平均查找长度较大,效率低;优点是对数据元素的存储没有要求,顺序存储或链式存储皆可。

对于无序表:

查找成功的平均查找长度为(n+1)/2

查找失败的平均查找长度为n+1

对于有序表:

查找成功的平均查找长度为(n+1)/2

查找失败的平均查找长度为n/2+n/(n+1)


下面将投放C代码

代码呢,分别展示了链表和顺序表的顺序查找方法

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
#define keyType int

//数据元素结构体
typedef struct {
    keyType key;	//查找表中每个数据元素的值
}ElemType;

//顺序表结构体
typedef struct{
	int data[MaxSize];
	int length;
}SeqList;

//查找表的数据结构
typedef struct{
    ElemType *elem;		//存放查找表中数据元素的数组
    int length;		//记录查找表中数据的总数量
}SSTable,*SSTableList;

//创建顺序表
void createTable(SeqList &L){
	int i=0;
	L.length=0;		//用循环方法初始化时,千万要记得给length赋初值
	for(;i<5;i++){		
		L.data[i] = i;
		L.length++;
	}
}

//输出顺序表
void printTable(SeqList L){
	int i;
	for(i = 0;i<L.length;i++){
		printf("%d\t",L.data[i]);
	}
	printf("\n");
}

//创建查找表
void Create(SSTableList &T,int length){
    T=(SSTable *)malloc(sizeof(SSTable));
    T->length=length;
    T->elem =(ElemType *)malloc((length+1)*sizeof(ElemType));
    //根据查找表中数据元素的总长度,在存储时,从数组下标为 1 的空间开始存储数据
    for (int i=1; i<=length; i++) {
        T->elem[i].key = i;
    }
}

//链表查找表查找的功能函数,其中key为关键字
int Search_Link(SSTableList T,keyType key){
	T->elem[0].key = key;	//0号做为哨兵
	int i;
	for(i = T->length; T->elem[i].key!=key; i--);
    return i;
}

//顺序查找表查找的功能函数,其中key为关键字
int Search_Seq(SeqList T,keyType key){
	int i;
	for(i = T.length-1; T.data[i]!=key; i--);
    return i;
}

int main(int argc, const char * argv[]) {
    SSTableList T;    //创建查找表
    Create(T,6);      
    printf("请输入查找数据的关键字:\n");
    int key;
    scanf("%d",&key);
    int location=Search_Link(T, key);    //顺序查找key
    if (location==0) {
        printf("查找失败\n");
    }else{
        printf("数据在查找表中的位置为:%d\n",location);
    }

	SeqList L;    //创建顺序表
	createTable(L);    
	printTable(L);    //输出顺序表
	int location1=Search_Seq(L, key)+1;    //顺序查找key
    if (location1==-1) {
        printf("查找失败\n");
    }else{
        printf("数据在查找表中的位置为:%d\n",location1);
    }

    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值