数据结构折半排序查找
折半查询
一、实验目的
1,掌握排序算法及基本思想及实现的技术;能够根据实际问题特点的要求选择合理的排序方法,理解排序
在数据处理中的重要性;
2.学会比较各种排序方法的稳定性分析以及在最好 、最坏和平均情况的时间性能分析。 3.掌握顺序查找和折半查找两种查找的算法及实现技术;了解它们各自的优缺点。 4.熟悉各种查找方法的适用范围和条件;掌握顺序查找、折半查找的基本思想及效率分析。 二、实验环境
1.硬件:每个学生需配备计算机一台。操作系统:DOS或Windows 2.软件:DOS或Windows操作系统+Turbo C;
三、实验要求
1.本次实验较为简单,每个同学独立按时完成,通过实验掌握记录的概念,为以后数据库技术打好基础。
2.如果输入数据较为繁琐,可减低每个班的人数。
3.输入输出数据要有提示,方便用户操作。
四、实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
1.现在某个学院有20名同学分属于2个班级(Class1和Class2,每个班有10名同学,每个同学记录包括:
班级、学号、姓名、性别、电话号码等信息)。
2.以学号为主关键字,以班级为次关键字,建立一个顺序
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
,表中的每个数据元素是一个记录,其中的某
个域用来存储关键字的值,按关键字的值进行顺序查找。为分析排序方法的稳定性,关键字可用次关键字。
#include "stdio.h"
#include "malloc.h"
#include "string.h"
typedef struct
{int cla;
int num;
char name[7];
char sex;
long phnum;
}stu_hc;
typedef struct
{stu_hc *elem;
int length;
int sum;
}sqlist_hc;
sqlist_hc *initlist_hc()
{sqlist_hc *l;int n;
l=(sqlist_hc*)malloc(sizeof(sqlist_hc));
if(!l)printf("出错!\n");
printf("输入学生人数:");scanf("%d",&n);
l->length=0;l->sum=n;
l->elem=(stu_hc*)malloc(n*sizeof(stu_hc));
if(!l->elem)printf("出错!\n");
return(l);}
int place_hc(sqlist_hc *l,int c,int num) {int low,high,mid,j=-1,i;
low=0;high=l->length-1;
while(low<=high)
{mid=(low+high)/2;
if(l->elem[mid].num>num)high=mid-1; else {j=mid;low=mid+1;}}
i=j;
for(j=mid;j>=i;j--)
{if(j==-1||num>l->elem[j].num)break; else if(num==l->elem[j].num&&c>l->elem[j].cla)break;}
return(++j);}
void move_hc(sqlist_hc *l,int j) {int i;
for(i=l->length-1;i>=j;i--)
{l->elem[i+1].cla=l->elem[i].cla; strcpy(l->elem[i+1].name,l->elem[i].name); l->elem[i+1].num=l->elem[i].num; l->elem[i+1].sex=l->elem[i].sex; l->elem[i+1].phnum=l->elem[i].phnum;}}
void createlist_hc(sqlist_hc *l)
{int i,j,c,num;
char nam[7],s;long p;
printf("输入学生信息(class name num sex phonenum):\n");
for(i=0;i
sum;i++)
{flushall();
scanf("%d %s %d %c %ld",&c,nam,&num,&s,&p);
j=!(l->length)?0:place_hc(l,c,num);
move_hc(l,j);
l->elem[j].cla=c;
strcpy(l->elem[j].name,nam); l->elem[j].num=num;
l->elem[j].sex=s;
l->elem[j].phnum=p;
l->length++;}}
void seekstu_hc(sqlist_hc *l)
{int low,high,mid,num,c; printf("输入查找人的学号和班级号:");
scanf("%d %d",&num,&c);
while(num!=-1||c!=-1)
{low=0;high=l->length-1;
while(low<=high)
{mid=(low+high)/2;
if(l->elem[mid].numelem[mid].num>num)high=mid-1; else {if(l->elem[mid].claelem[mid].cla>c)mid--;
break;}}
printf("%d,%s,%d,%c,%ld\n",l->elem[mid].cla,l->elem[mid].name,l->elem[mid].num,l->elem[mid].sex,l->elem[
mid].phnum);
printf("输入查找人的学号和班级号:"); scanf("%d %d",&num,&c);}}
void printlist_hc(sqlist_hc*l)
{int i,j=0;
printf("当前表中信息如下:class/name/num/sex/phonenum\n");
for(i=0;isum;i++)
{printf("%d/%s/%d/%c/%ld
",l->elem[i].cla,l->elem[i].name,l->elem[i].num,l->elem[i].sex,l->elem[i].phnum);
if(++j==3){j=0;printf("\n");}}
printf("\n");}
main()
{sqlist_hc *l;
l=initlist_hc(); createlist_hc(l); printlist_hc(l); seekstu_hc(l);
printf("作者:黄晨");}