2021年数据结构实验报告中央电大

试验汇报(五)

专业名称

课程名称

批改老师

主持老师

试验成绩

校外评阅老师

试验名称 查找

使用关键设备 PC, VC++6.0

试验要求

1.掌握折半查找算法步骤和实现方法;

2.掌握二叉排序树性质、结构方法;

3.按试验内容完成相关程序,并用实例进行测试,验证其正确性。

试验汇报内容:

试验5.1 折半查找

设计程序代码以下:

#include<stdio.h>

#include<string.h>

#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<low-1;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<N;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 二叉排序树建立

设计程序代码以下:

#include<stdio.h>

#include<stdlib.h>

#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<MAX;i++) printf("%d ",a[i]);

printf("\n");

for(i=0;i<MAX;i++) root=btInsert(a[i],root);

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

{

q->right=p;

flag=1;

}

}

}

return root;

}

void Inorder(Bnode *root)

{

if(root!=NULL) {

Inorder(root->left);

printf("%d ",root->key);

Inorder(root->right);

}

}

程序运行结果以下:

  • 下载文档
  • 收藏
  • 0