查找算法

1.实验所涉及的知识点

(1)顺序查找

(2)折半查找

 

2.程序源码

 #include "stdafx.h"
 #include<string.h> // 字符串函数头文件
 #include<ctype.h> // 字符函数头文件
 #include<malloc.h> // malloc()等
 #include<limits.h> // INT_MAX等
 #include<stdio.h> // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
 #include<stdlib.h> // atoi(),exit()
 #include<io.h> // eof()
 #include<math.h> // 数学函数头文件,包括floor(),ceil(),abs()等
 #include<sys/timeb.h> // ftime()
 #include<stdarg.h> // 提供宏va_start,va_arg和va_end,用于存取变长参数表
 // 函数结果状态代码。在教科书第页
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 // #define INFEASIBLE -1 没使用
 // #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为,故去掉此行
 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
 typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第、章用到

typedef int KeyType;
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))
typedef struct{
	KeyType key;
}SElemType;
typedef struct{
	SElemType *elem;
	int length;
}SSTable;
Status Search_Seq(SSTable ST,KeyType key){
	int i;
	ST.elem[0].key = key;
	for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
	return i;
}
Status Search_Bin(SSTable ST,KeyType key){
	int low,mid,high;
	low=1;high=ST.length;
	while(low<=high){
		mid=(low+high)/2;
		if(EQ(key,ST.elem[mid].key))
			return mid;
		else if (LT(key,ST.elem[mid].key))
			high=mid-1;
		else
			low=mid+1;
	}
	return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	SSTable ST;
    int i,num,mykeyname,flag;
	int Search_Seq(SSTable ST,int mykeyname);
	int Search_Bin(SSTable ST,int mykeyname);
    printf("请输入表长:");
    scanf_s("%d",&ST.length);
    ST.elem=(SElemType*)malloc(sizeof(SElemType)*(ST.length));
    printf("请输入表中每个元素:");
    for(i=1;i<=ST.length-1;i++)
    {
        scanf_s("%d",&num);
		ST.elem[i].key=num;
        printf("%d ",ST.elem[i]);
    }
    printf("请输入所要查找的元素:");
    scanf_s("%d",&mykeyname);
	ST.elem[0].key=mykeyname;
    flag=0;
	flag=Search_Bin(ST,mykeyname);
    if (flag) 
		printf("ok. position:%d",flag);
    else
		printf("not found");
	system("pause");
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值