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

顺序查找的缺点是,当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;
}

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐