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

it2022-05-08  7

语言实现线性表二分查找

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!!


最新回复(0)