#include<stdio.h>
#define N 100 //数组大小
typedef struct
{
int number; //学号
char name[5];//姓名
char sex[2];//性别
int age;//年龄
}record;
typedef struct
{
record stu[N];//数据数组
int num;//总人数
}seqlist;
//建立学生信息
void create(seqlist &L)
{
int i = 0; L.num = 0;
printf("请依次输入(学号为0视为终止):\n");
printf("学号 姓名 性别 年龄\n");
scanf("%d %s %s %d", &L.stu[i].number, L.stu[i].name, L.stu[i].sex, &L.stu[i].age);
while(L.stu[i++].number!=0)
{
L.num++;
scanf("%d %s %s %d",&L.stu[i].number,L.stu[i].name, L.stu[i].sex, &L.stu[i].age);
}
}
//输出学生信息
void print(seqlist L)
{
int i = 0;
printf("学生基本信息\n");
printf("学号 姓名 性别 年龄\n");
for (; i < L.num; i++)
printf("%5d %5s %5s %5d\n",L.stu[i].number,L.stu[i].name, L.stu[i].sex, L.stu[i].age);
}
//顺序查找学生信息
int find(seqlist L, int number)
{
for (int i = L.num; i >= 0; i--)
if (L.stu[i].number == number)return i;
return -1;
}
//折半查找学生信息
int halffind(seqlist L, int number)
{
int low, high,mid;
low = 1; high = L.num;
while (low <= high)
{
mid = (low + high) / 2;
if (number == L.stu[mid].number)return mid;
else if (number < L.stu[mid].number)high = mid - 1; //我使用了零号单元,所以这里减了1
else low = mid +1 ;
}
return -1;
}
int main()
{
seqlist L;
int n,i;
create(L);
print(L);
printf("************** 折半查找 ****************:\n");
printf("输入学生学号:\n");
scanf("%d", &n);
i=halffind(L, n);
if (i == -1)printf("can not find\n");
else printf("%5d %5s %5s %5d\n", L.stu[i].number, L.stu[i].name, L.stu[i].sex, L.stu[i].age);
printf("************** 顺序查找 ****************;\n");
printf("输入学生学号:\n");
scanf("%d", &n);
i = find(L, n);
if (i == -1)printf("can not find\n");
else printf("%5d %5s %5s %5d\n", L.stu[i].number, L.stu[i].name, L.stu[i].sex, L.stu[i].age);
}
折半查找+顺序查找
于 2023-12-03 05:01:08 首次发布