第9章 顺序查找

【查找思想】

从表的一端开始逐个将记录的关键字和给定K值进行比较,若某个记录的关键字和给定K值相等,查找成功;否则,若扫描完整个表,仍然没有找到相应的记录,则查找失败。

【算法实现】

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

#define EQ(a,b) ((a)==(b))

/* 数据元素类型定义 */
typedef int KeyType;		//关键字类型 
typedef struct
{
	KeyType key;			//关键字域	
	//float weight;			//其他域(此处可设为权重) 
}ElemType;

/* 静态查找表的顺序存储结构 */
typedef struct
{
	ElemType *elem;		//数据元素存储空间基址,0号单元弃用 
	int length;			//表长度 
}SSTable;

//创建查找表
void Create(SSTable *ST)
{
	printf("请输入查找表的长度:");
	scanf("%d", &ST->length);
	
    ST->elem = (ElemType *)malloc(ST->length*sizeof(ElemType));
    printf("请依次输入表中数据元素的关键字:");
    for(int i = 1; i <= ST->length; i++)
        scanf("%d", &ST->elem[i].key);
}

//顺序查找
int Seq_Search(SSTable ST, KeyType key)
{
	int i;
	ST.elem[0].key = key;	//设置监视哨兵,失败返回0
	for(i = ST.length; !EQ(ST.elem[i].key, key); --i);
	return i;
}

int main()
{
	SSTable ST;
	KeyType key;
	Create(&ST);
	
	printf("请输入待查找数据元素的关键字:");
	scanf("%d", &key);
	printf("查找位置为:%d\n", Seq_Search(ST, key));
	return 0; 
}

运行结果如下:

【算法分析】

  1. 等概率查找成功时,查找第 i i 个元素成功的比较次数 C i = n i + 1 C_i=n-i+1 ,则平均查找长度ASL:
  1. 包含查找不成功时,查找失败的比较次数为 n + 1 n+1 ,若成功与不成功的概率相等,对每个记录的查找概率为 P i = 1 / ( 2 n ) P_i=1/(2n) ,则平均查找长度ASL:
发布了674 篇原创文章 · 获赞 103 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/103638790