c语言实现线性表二分查找(完整代码附详细注释)

语言实现线性表二分查找

1,输入输出结果样例展示:

在这里插入图片描述
注:第一行输入线性表数字个数
第二行输入线性表
第三行输出待查找数字
输出结果为线性表中该数字位置下标(未找到返回0)

2,代码展示(供参考)

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

typedef int ElementType;
typedef int Position;
typedef struct LNode List;

struct LNode {
    ElementType Data[100];
    Position Last;
};
//结构体定义线性表 

/****************************** 
*******************************  
* 函数名:int divide(int num) * 
* 接口:num    返回值:num	  * 
* 函数功能:二分位置		  * 
*******************************
******************************/ 
int divide(int num)
{
	if(num % 2 == 0)
	{
		return num / 2;
	}
	else if(num % 2 == 1 && num != 1)
	{
		return (num - 1) / 2;
	}
}

/*********************************** 
************************************ 
* 函数名:List *ReadInput(int num) * 
* 接口:num    返回值:L			   * 
* 函数功能:将数字输入线性表	   * 
************************************ 
***********************************/ 
List *ReadInput(int num) 
{
	List *L;
	int i;
	
	for(i=1;i <= num;i++)
	{
		scanf("%d", &L->Data[i]);
	}
	
	return L;
}

/**************************************************** 
***************************************************** 
* 函数名:int BinarySearch(List *L,   				* 
* int X, int num, int markh, int markl)             * 
* 接口:List *L, int X, int num,int markh, int markl *    
* 返回值:markh + num		                        * 
* 函数功能:找出数字在表中位置并返回(未找到返回0)	* 
***************************************************** 
****************************************************/ 
int BinarySearch(List *L, int X, int num, int markh, int markl)
{
	int T = 0;
	
	while(markl != markh)
	{
		if(L->Data[markl] < X)
		{
			return 0;
		}
		
		num = divide(num);
		
		if(L->Data[markh + num] == X)
		{
			T = 1;
			break;
		}
		else if(L->Data[markh + num] > X)
		{
			markl = markl - num;
		}
		else
		{
			markh = markh + num;
		}
	}
	
	if(T != 1)
		return 0;
	else
		return markh + num;
}

/******************************* 
******************************** 
* 函数名:int main() 		   * 
* 接口:void    返回值:0	   * 
* 函数功能:二分查找           * 
********************************
*******************************/ 
int main()
{
    List *L;
    ElementType X;
    Position P;
    int num, markl, markh = 0;
	
	scanf("%d", &num);
    L = ReadInput(num);
	
	markl = num;
	
    scanf("%d", &X);
    P = BinarySearch(L, X, num, markh, markl);
    
    if(P == 0)
    	printf("0\n");
    else
    	printf("%d\n", P);

    return 0;
}



/*	Edit by TonyT
No reprinting withou author's permission!!*/ 

Edit by TonyT

No reprinting withou author’s permission!!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值