找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1537|回复: 0
收起左侧

数据结构实验报告

[复制链接]
ID:426590 发表于 2018-11-14 19:15 | 显示全部楼层 |阅读模式
《数据结构与算法》
上 机 实 验 报 告
(请双面打印)
实验内容          二叉树的基本操作         
      BinarySearch Tree的建立与遍历  
指导教师        
上机日期                                
      信息与通信工程学院   
学生姓名                       
                 
                           
                                 
指导老师签字                          

《数据结构与算法》上机实验
  
题目
  
顺序表与单链表的基本操作
主要
  
内容
1.        熟悉VC6.0编程环境;
  
2.       掌握Binary Search Tree的基本特性,掌握二叉树的遍历方法;
  
3.        加深对二叉树的理解,逐步培养解决问题的编程能力。
设计
  
要求
参考给定的程序,实现Binary Search Tree的建立与遍历。要求如下:
  
1.        数据结点不少于10;
  
2.        数据中不要包括重复的数据;
  
3.        请数据结点保存在数组中,依次插入数据;
  
4.        二叉树的存储结构为二叉链表;
  
5.        对二叉树进行先序遍历并在屏幕上输出该序列;
  
6.        对二叉树进行中序遍历并在屏幕上输出该序列;
  
7.        对二叉树进行后序遍历并在屏幕上输出该序列;
  
  
提示:
  
1.        参考课本P10;
  
2.        先序、中序、后序遍历可参考PPT6.3 章第8页。
  
  
提高选做:
  
1.    实现查找函数。
  
主要
  
仪器
  
设备
装有Visual  C++6.0或Visual Studio 2010的计算机一台。
主要
  
参考
  
文献
[1]   严蔚敏, 吴伟民. 数据结构 (C语言版) [M]. 北京: 清华大学出版社, 2015.
  
[2]  谭浩强. 《C语言程序设计》(第二版)[M].北京: 清华大学出版社, 2005.
上机实验进度计划(起止时间、工作内容)
本次上机实验共4学时。
上机日期
2017.10.24
上机实验实验室名称
计算中心-D机房

一、请简单手写出二叉树的条性质
请预留足够多的空白,打印之后再手写。
1.     二叉树的第k层最多有___________个结点;
2.     深度为k的二叉树最多有_________个结点;
3.     请简要证明二叉树的第3条性质;
二、上机程序与问题
请将原程序、各个问题的答案写在程序中,并直接拷在此处。
#include<stdlib.h>
#include<stdio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElementType; //?  
typedef int Status; //?      
typedef struct TreeNode* Position; //?       用Position代替TreeNode*,实现结构体指针
typedef struct TreeNode* BSTree; //?         用BSTree代替TreeNode*,实现结构体指针
// 下面几句话的作用是什么?
struct TreeNode{
        ElementType Element;//?      定义一个整形变量Element
        struct TreeNode* Left;//?      创建一个指向左支路的指针
        struct TreeNode* Right;
};
// 问题: 简述下述函数的功能,并指出输入和输出分别是什么?
BSTree Insert(ElementType X, BSTree T){
        if (T==NULL){
        // 问题:本部分的作用?      判断T指针是否有指向的内存空间,若没有则分配
                 T=(BSTree)malloc(sizeof(structTreeNode)); //?   给指针T分配空间
                 if (T==NULL)
                         exit(OVERFLOW);//?      异常中止
                 else{
                         T->Element=X;
                         T->Left=NULL;
                         T->Right=NULL;
                 }
        }
        else{
                 // 问题:本部分的作用?       根据传进来的参数,决定左支路或者右支路
                 if(X<T->Element)
                         T->Left=Insert(X,T->Left);//?       给T加一个左支路
                 else if(X>T->Element)
                         T->Right=Insert(X,T->Right);
        }
        return T; // 请问:返回的T代表什么意思?    树的节点   
}
void Traverse (BSTree T)//先序遍历
{
        if(T)
        {
                 printf("%d  ",T->Element);
                 Traverse(T->Left);
                 Traverse(T->Right);
        }
}
void zhong (BSTree T)//中序遍历
{
        if(T)
        {
                 zhong(T->Left);
                 printf("%d  ",T->Element);
                 zhong(T->Right);
        }
}
void hou(BSTree T)//后序遍历
{
        if(T)
        {
                 hou(T->Left);
                 hou(T->Right);
                 printf("%d  ",T->Element);
        }
}
void main()
{
        int seq[10]={35, 27,19, 0, 32, 12, 87, 26, 5, 41}; // 输入序列数据
        BSTree T=NULL; //?     创建一个结构体指针T
        // 下面这3句话产生的效果是什么?     按照Insert函数分配支路
        for (int i=0; i<10;i++){
        T=Insert(seq, T);
        }
        printf("\n先序遍历输出序列为:\n");
        // 先编子程序,然后在这里调用子程序,实现二叉树的先序遍历
        Traverse(T);
        printf("\n中序遍历输出序列为:\n");
        // 先编子程序,然后在这里调用子程序,实现二叉树的中序遍历
        zhong(T);
        printf("\n后序遍历输出序列为:\n");
        // 先编子程序,然后在这里调用子程序,实现二叉树的后序遍历
        hou(T);
        // 提高题(不要求同学必须完成):
        // 如果以上程序均已完成,尝试写出Find函数
        // Find函数实现的功能是:在上述二叉树T中查找某个数X,如果查找成功,则返回X的地址;否则,返回NULL;
        //先编子程序,然后在这里调用子程序,输出返回的地址
}
                              
if(T==NULL)
printf(0):
else if(T->Element==X)
printf(sd,D);
else if (X< T->Element)
find(Xx,T->Left);
else
find(X,T->Right):
return 0;
void main()
{
int seq[10]={ 35,27,19,0,32,12,87,26,5,41};
BSTree T=NULL;
for(int i=0;i< 10;i++){
T=Insert(seq,T);//将数字填入二叉树
printf("\n先序遍历输出序列为:\n");
Traverse(T);//调用子程序,实现叉树的先序遍历
printf("\n中序遍历输出序列为:\n");
zhong(T);//调用子程序,实现叉树的中序遍历
printf("\n后序遍历输出序列为:\n");
hou(T);//调用子程序,实现二叉树的后序遍历
int X;
printf("n输入要查找的数:");
scanf("%d",&X);
find(x,T);
}
三、结果
1. 画出你的二叉树,写出你的先序、中序、后序遍历结果。
2. 贴出你的实验结果。注意:图片要有图标和图题,图片处理一下,避免大片的黑色。
3. 从程序上看,如果数据中有重复的数据,程序是怎么处理的?

四、遇到的问题、解决方法与个人心得。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表