数据结构实验报告5(电大)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告五查找(学科:数据结构)
姓名单位班级学号实验日期成绩评定教师签名批改日期
实验名称:实验五查找
5.1 折半查找
【问题描述】
某班学生成绩信息表中,每个学生的记录已按平均成绩由高到低排好序,后来发现某个学生的成绩没有登记到信息表中,使用折半查找法把该同学的记录插入到信息表中,使信息表中的记录仍按平均成绩有序。
【基本信息】
(1)建立现有学生信息表,平均成绩已有序。
(2)输入插入学生的记录信息。
(3)用折半查找找到插入位置,并插入记录。
【测试数据】
自行设计。
【实验提示】
(1)用结构数组存储成绩信息表。
(2)对记录中的平均成绩进行折半查找。
【实验报告内容】
设计程序代码如下:
#include
#include
#define N 5
struct student{
char name[10];
float avg;
}
void insort(struct student s[],int n)
{
int low,hight,mid,k;
char y[10];
float x;
low=1;
hight=n;
strcpy(y,s[0].name );
x=s[0].avg ;
while(low<=hight)
{
mid=(low+hight)/2;
if(x>s[mid].avg )
hight=mid-1;
else
low=mid+1;
}
for(k=0;k strcpy(s[k].name,s[k+1].name) ; s[k].avg =s[k+1].avg ; } printf("%d",low); strcpy(s[low-1].name ,y) ; s[low-1].avg =x; } void main() { Struct student a[N]= {{"caozh",96},{"cheng",95},{"zhao",93},{"wang",92},{"chen",91}}; struct student stu[N]; int i; for(i=0;i stu[i+1]=a[i]; printf("初始%d 位同学的信息表\n",MAX); printf("排名姓名平均分数\n"); for(i=1;i<=N;i++) printf("%d: %6s %3.2f\n",i,stu[i].name,stu[i].avg); printf("\n"); printf("\n"); printf("请输入学生的姓名:"); scanf("%s",stu[0].name ); printf("\n"); printf("请输入平均成绩:"); scanf("%f",&stu[0].avg ); printf("\n"); insort(stu,N); printf("折半排序后同学的信息表\n",MAX); printf("排名姓名平均分数\n"); for(i=0;i<=N;i++) { printf("%d: %6s %3.2f\n",i+1,stu[i].name,stu[i].avg); } printf("\n"); } 程序运行结果如下: 5.2 二叉排序树的建立 【问题描述】 参阅相关资料,阅读建立二叉排序树的程序。 【基本要求】 (1)掌握建立二叉排序树的原理和方法。 (2)能跟踪程序人工建立二叉排序树。 【实验报告内容】 设计程序代码如下: #include #include #define MAX 5 typedef struct Bnode { int key; struct Bnode *left; struct Bnode *right; }Bnode; Bnode * btInsert(int x,Bnode *root); void Inorder(Bnode *root); void main() { int i; int a[MAX]={60,40,70,20,80}; Bnode * root=NULL; printf("按关键字序列建立二叉排序树\n"); for(i=0;i printf("\n"); for(i=0;i printf("中序遍历的二叉排序树\n"); Inorder(root); printf("\n"); } Bnode * btInsert(int x,Bnode * root) { Bnode *p,*q; int flag=0; p=(Bnode *)malloc(sizeof(Bnode)); p->key=x; p->right=p->left=NULL; if(root==NULL) { root=p; return p; } q=root; while(flag==0) { if(q->key>x) { if(q->left!=NULL) q=q->left; else { q->left=p; flag=1; } } else { if(q->right!=NULL) q=q->right; else {