/***************************************************/
/* Description:线性表的查找_折半查找(C语言源代码)
/* Date:2021/9/1
/* Author:汝南城
/****************************************************/
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct {
int key;
char name[10];
}ElemType;
typedef struct {
ElemType* R;
int length;
}SSTable;
/*①初始化顺序表*/
int Init_Sqe(SSTable* ST)
{
ST->R = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
if (!ST->R)
return 0;
else
{
ST->length = 0;
return 1;
}
}
/*②折半查找(非递归算法)*/
int Search_Bin(SSTable *ST, int key)
{
int low = 1;
int high = ST->length;
while (high>=low) /*循环结束条件:low>high*/
{
int mid = (high + low) / 2;
if (ST->R[mid].key == key)
return mid;
else if (ST->R[mid].key > key)
high = mid - 1;
else
low = mid + 1;
}
return 0;
}
/*③折半查找(递归算法)*/
int Search_Bin1(SSTable* ST, int key,int low,int high)
{
if (low > high)
return 0;
else
{
int mid = (high + low) / 2;
if (ST->R[mid].key == key)
return mid;
else if (ST->R[mid].key > key)
Search_Bin1(ST, key, low, mid - 1);
else
Search_Bin1(ST, key, mid + 1,high);
}
}
void main()
{
SSTable* S1 = (SSTable*)malloc(sizeof(SSTable));
/*①初始化顺序表*/
int a = 0;
a = Init_Sqe(S1);
//printf("%d",a);
/*往顺序表里存数据*/
ElemType info;
for (info.key = 1; info.key <= 10; info.key++)
{
S1->R[info.key].key = info.key+100;
}
/*打印顺序表中的数据*/
int j;
for (j = 1; j <= 10; j++)
{
printf("%d ", S1->R[j].key);
S1->length++;
}
printf("\n%d", S1->length);
/*②折半查找(非递归算法)*/
int b = 0;
b=Search_Bin(S1,109);
printf("\n%d",b);
/*③折半查找(递归算法)*/
int c = 0;
int low = 1, high = S1->length;
c = Search_Bin1(S1, 109,low, high);
printf("\n%d",c);
}
线性表的查找_折半查找(C语言源代码)
最新推荐文章于 2022-04-16 00:06:22 发布