20172319实验二《树》实验报告(代码片段)

tangcaiming tangcaiming     2023-01-17     407

关键词:

20172319 2018.11.04-11.12

实验二《树》 实验报告

课程名称:《程序设计与数据结构》  
学生班级:1723班  
学生姓名:唐才铭  
学生学号:20172319 
实验教师:王志强老师
课程助教:张师瑜学姐、张之睿学长
实验时间:2018年11月04日——2018年11月12日
必修/选修:必修

目录


实验内容

  1. 实验二-1-实现二叉树: 完成链树LinkedBinaryTree的实现。
  2. 实验二 树-2-中序先序序列构造二叉树: 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二?树的功能
  3. 实验二 树-3-决策树: 自己设计并实现一颗决策树
  4. 实验二 树-4-表达式树: 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
  5. 实验二 树-5-二叉查找树: 完成PP11.3
  6. 实验二 树-6-红黑树分析: 参考http://www.cnblogs.com/rocedu/p/7483915.html对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果

返回目录


实验要求

  1. 完成蓝墨云上与实验二《树》相关的活动,及时提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分。
  2. 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
  3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

返回目录


实验步骤

  1. 实验二-1-实现二叉树:
    参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
    用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
  2. 实验二 树-2-中序先序序列构造二叉树:
    基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二?树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
    用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
    技术分享图片
  3. 实验二 树-3-决策树:
    自己设计并实现一颗决策树
    提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
  4. 实验二 树-4-表达式树:
    输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,则为0分)
    提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
  5. 实验二 树-5-二叉查找树:
    完成PP11.3
    提交测试代码运行截图,要全屏,包含自己的学号信息
    课下把代码推送到代码托管平台
  6. 实验二 树-5-二叉查找树:
    参考http://www.cnblogs.com/rocedu/p/7483915.html对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果。
    (C:Program FilesJavajdk-11.0.1libsrcjava.basejavautil)

前期准备:

  1. 预先下载安装好IDEA 。

需求分析:

  1. 需要掌握二叉查找树的相关知识;
  2. 需要掌握当任意给出两个序能构建出唯一一棵二叉树;
  3. 需要理解表达式树的实现;
  4. 需要理解决策树的实现。

返回目录


代码实现及解释

本次实验一共分为六个提交点:

  • 实验二-1-实现二叉树:
  • 根据自己的需求,写好自己所需要的链表节点类链表类
  • 在链表类里写了add方法用于往链表添加元素
 public void add(int number)
        Linked_list_node Node = new Linked_list_node(number);

        if (this.head==null)
            this.head = Node;
        
        else 
            this.head.addLinked_list_node(Node);
        
    
  • 具体的代码实现:
        System.out.println("实验的第一部分:");
        System.out.print("Enter some integers and create a linked list :   ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] strings = input.split(" ");

        Stack<String> Break_up = new Stack<String>();
        for (int i = strings.length; i > 0 ; i--)
            Break_up.push(strings[i-1]);
        
        System.out.print("The contents of the stack are :   ");
        System.out.println(Break_up);
        Linked_list linked_list = new Linked_list();
        linked_list.add(0);
        while (!Break_up.empty()) 
            int tempelement = Integer.parseInt(Break_up.pop());
            linked_list.add(tempelement);
        
        int ntangcaiming = 0;
        ntangcaiming = linked_list.getCount();
        System.out.print("The contents of the queue are :   ");
        System.out.println(linked_list);
        System.out.print("The number of linked elements is :   ");
        System.out.println(ntangcaiming);
  • 运行结果截图:
    技术分享图片

  • 线性结构之链表(2)
  • 根据需要,我们需要写插入和删除的方法:
  • 为了更好地实现需求,我们在链表前端放入了一个取值为0的节点linked_list.add(0);,以便于在任何地方都能实现插入删除,而打印时将其隐藏。

public void insert(int index,Linked_list_node node)
        if(index < 1||index > getCount() + 1)
            System.out.println("Wrong position, cannot insert");
            return;
        
        int length = 1;
        Linked_list_node temp = head;
        while(head.next != null)
        
            if(index == length++)
                node.next = temp.next;
                temp.next = node;
                return;
            
            temp = temp.next;
        
    

    public void delete(int index)
        if(index < 1 || index > getCount())
            System.out.println("Wrong position, cannot be deleted");
            return;
        
        int length=1;
        Linked_list_node temp = head;
        while(temp.next != null)
            if(index == length++)
                temp.next = temp.next.next;
                return;
            
            temp = temp.next;
        
    
  • 根据以前所写IO进行文件的创建及读取;
  • 本次提交点相关代码如下:
        System.out.println("实验的第二部分:");
        try 
            File file = new File("D:\\huawei\\Javawindows文件","EXP1-First semester of sophomore.txt");

            InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(reader);
            int[] file_word_temp = new int[2];
            String[] file_word = bufferedReader.readLine().split(" ");
            file_word_temp[0] = Integer.parseInt(file_word[0]);
            file_word_temp[1] = Integer.parseInt(file_word[1]);

            Linked_list_node Node_insert1 = new Linked_list_node(file_word_temp[0]);
            Linked_list_node Node_insert2 = new Linked_list_node(file_word_temp[1]);

            linked_list.insert(5,Node_insert1);
            System.out.print("The list after inserting 1 at the fifth position is :   ");
            System.out.println(linked_list);
            System.out.print("The number of linked elements is :   ");
            ntangcaiming = linked_list.getCount();
            System.out.println(ntangcaiming);
            linked_list.insert(1,Node_insert2);
            System.out.print("The list after inserting 2 at the first position is :   ");
            System.out.println(linked_list);
            ntangcaiming = linked_list.getCount();
            System.out.print("The number of linked elements is :   ");
            System.out.println(ntangcaiming);
            System.out.print("The list after deleting the inserted number 1 is :   ");
            linked_list.delete(6);
            System.out.println(linked_list);
            ntangcaiming = linked_list.getCount();
            System.out.print("The number of linked elements is :   ");
            System.out.println(ntangcaiming);
  • 运行结果截图:
    技术分享图片

  • 线性结构之链表(2)

  • 根据要求,我们所选择的是冒泡排序法,依据要求打印排序过程(这里只打印元素交换的时候):
  • 冒泡代码实现如下(有删减):

public void Bubble_sort(Linked_list_node Head,Linked_list linked_list)


        Linked_list_node temp = null, tail = null;
        
        temp = head;

        int count=1;
        while(temp.next != tail)
            while(temp.next != tail)
                if(temp.number > temp.next.number)
                    int temp_number = temp.number;
                    temp.number = temp.next.number;
                    temp.next.number = temp_number;
                    System.out.print("The list sorted by the "+ count + " truly bubbling sort is :  ");
                    System.out.println(linked_list);
                    System.out.print("The number of linked elements is :  " + linked_list.getCount() + "
" );

                    count++;
                
                temp = temp.next;

            
            tail = temp;
            temp = head;
        
    
  • 相关提交点的代码:
            System.out.println("实验的第三部分:");
            System.out.println("Print only the rounds that have implemented the element exchange:");

            linked_list.Bubble_sort(linked_list.head,linked_list);
    
        catch (IOException E)
        System.out.println("错误,指定路径不存在");
    
  • 运行结果截图(仅仅展示部分截图):
    技术分享图片

  • 线性结构之数组(4)
  • 根据需要编写自己的数组类
  • 本次提交点相关代码如下:

 System.out.println("实验的第一部分:");
        System.out.print("Enter some integers and create a linked list:");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();

        int ntangcaiming = 0 ;
        String[] temp_MyArray = input.split(" ");
        Array MyArray = new Array(temp_MyArray);

        System.out.print("The elements in the array are:   ");
        System.out.println(MyArray);
        System.out.print("The number of elements in the array is:  ");
        ntangcaiming = MyArray.size();
        System.out.println(ntangcaiming);

        System.out.println("实验的第二部分:");
        try 
            File file = new File("D:\\huawei\\Javawindows文件","EXP1-First semester of sophomore.txt");
            InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(reader);
            int[] file_word_temp = new int[2];
            String[] file_word = bufferedReader.readLine().split(" ");
            file_word_temp[0] = Integer.parseInt(file_word[0]);
            file_word_temp[1] = Integer.parseInt(file_word[1]);


            System.out.print("The array after 1 is inserted in position 5 is :   ");
            Array MyArray1 = new Array(MyArray.Array_Insert(4, String.valueOf(file_word_temp[0]))) ;
            System.out.println(MyArray1);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray1.size();
            System.out.println(ntangcaiming);


            System.out.print("The list after inserting 2 at the first position is :   ");

            Array MyArray2 = new Array(MyArray1.Array_Insert(0, String.valueOf(file_word_temp[1])));
            System.out.println(MyArray2);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray2.size();
            System.out.println(ntangcaiming);

            System.out.print("The array after deleting the inserted number 1 is :   ");

            Array MyArray3 = new Array(MyArray2.Array_Delete(5));
            System.out.println(MyArray3);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray3.size();
            System.out.println(ntangcaiming);
  • 运行结果截图:

技术分享图片

  • 线性结构之数组(5)
  • 按照要求,我选择的是选择排序法:
  • 相关代码如下:
 public String Array_Selection_sort() 
        int[] temp_MyArray = new int[MyArray.length];
        for (int i = 0 ; i < MyArray.length; i ++)
            temp_MyArray[i] = Integer.parseInt(MyArray[i]);
        

        String result = "";
        for (int i = 0; i < temp_MyArray.length - 1 ; i++)
            for (int j = i + 1;j < temp_MyArray.length; j++ )
                if (temp_MyArray[i]<temp_MyArray[j])
                    int temp = temp_MyArray[i];
                    temp_MyArray[i] = temp_MyArray[j];
                    temp_MyArray[j] = temp;
                    String every = "";
                    for (int data : temp_MyArray)
                        every += data + " ";
                    
                    result += "The list sorted by the SelectSorting is :  " + every + "
" +
                            "The number of elements in the array is:  :" + MyArray.length + "
";
                
            
        
        return result;
    
  • 本次提交点的相关代码(有删减):
            System.out.println("实验的第三部分:");
            System.out.print(MyArray3.Array_Selection_sort());
  • 运行结果截图(仅部分)
    技术分享图片

返回目录


测试过程及遇到的问题

  • 问题1:
  • 解决:

返回目录


分析总结

  • 这是一个全新的内容,与我们原来所学的相关,且更深一层并更接近了我们的生活,虽然项目的开发过程的某些代码的含义还不能完全明白,但在以后的过程中会逐一认识、了解并掌握。

返回目录


代码托管

技术分享图片

返回目录


参考资料

Intellj IDEA 简易教程
Android开发简易教程
Android studio项目上传至oschina(码云)教程

返回目录



























201723032018-2019-1《程序设计与数据结构》实验二报告(代码片段)

201723032018-2019-1《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:范雯琪学号:20172303实验教师:王志强助教:张师瑜/张之睿实验日期:2018年11月5日必修/选修:必修实验内容本次实验主要是关... 查看详情

20172314《程序设计与数据结构》实验报告——树(代码片段)

...序设计与数据结构》班级:1723姓名:方艺雯学号:20172314实验教师:王志强实验日期:2018年11月8日必修/选修:必修1、实验内容及要求实验二-1-实现二叉树参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,pos... 查看详情

20172301哈夫曼树实验报告(代码片段)

20172301哈夫曼树实验报告课程:《Java软件结构与数据结构》班级:1723姓名:郭恺学号:20172301实验教师:王志强老师实验日期:2018年12月9日必修/选修:必修一.实验内容二.实验过程哈夫曼树哈夫曼(Haffman)树,也称最优二叉树... 查看详情

201723152018-2019-1《程序设计与数据结构》实验二报告(代码片段)

...序设计与数据结构》班级:1723姓名:赵乾宸学号:20172316实验教师:王志强必修/选修:必修1.实验内容1-实现二叉树参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)用JUnit或自己编写驱动类对自己... 查看详情

实验四决策树算法及应用(代码片段)

博客班级计算机与信息学院AHPU-机器学习实验-计算机18级作业要求实验四决策树算法及应用作业目标(1)理解决策树算法原理,掌握决策树算法框架;(2)理解决策树学习算法的特征选择、树的生成和树的剪枝;(3)能根据不... 查看详情

哈夫曼编码(代码片段)

201723192018.11.19-11.25实验三《查找与排序》实验报告课程名称:《程序设计与数据结构》学生班级:1723班学生姓名:唐才铭学生学号:20172319实验教师:王志强老师课程助教:张师瑜学姐、张之睿学长实验时间:2018年11月19日——201... 查看详情

区块链技术与应用实验报告(实验二)(代码片段)

文章目录区块链技术与应用实验报告(实验二)关于作者**作者介绍**一、实验目的二、实验原理简介三、实验环境四、实验步骤4.1实验先关命令参数说明4.2三个节点都运行后,新打开一个dos窗口,然后输入`bitcoin-cli–h ... 查看详情

区块链技术与应用实验报告(实验二)(代码片段)

文章目录区块链技术与应用实验报告(实验二)关于作者作者介绍一、实验目的二、实验原理简介三、实验环境四、实验步骤4.1实验先关命令参数说明4.2三个节点都运行后,新打开一个dos窗口,然后输入`bitcoin-cli–h`4.... 查看详情

20192308王泽荣python实验二报告(代码片段)

201923082022-2022-2《Python程序设计》实验二报告课程:《Python程序设计》班级:1923姓名:王泽荣学号:20192308实验教师:王志强实验日期:2022年3月31日必修/选修:公选课1.实验内容设计并完成一个完整的应用程序,完成加减乘除模... 查看详情

20165223实验二面向对象程序设计(代码片段)

目录一、实验报告封面二、具体实验内容(一)初步掌握JUnit的使用(二)IDEA中的JAVA程序开发(三)自主练习三、实验总结四、PSP时间一、实验报告封面北京电子科技学院(BESTI)实验报告◆◇◆◇课程Java程序设计班级1652班姓... 查看详情

20172328《程序设计与数据结构》实验二:树(代码片段)

20172328《程序设计与数据结构》实验二:树课程:《软件结构与数据结构》班级:1723姓名:李馨雨学号:20172328实验教师:王志强老师实验日期:2018年11月5日-2018年11月12日必修选修:必修一、实验要求内容实验1:实现二叉树参... 查看详情

20172302《java软件结构与数据结构》实验二:树实验报告

...件结构与数据结构》班级:1723姓名:侯泽洋学号:20172302实验教师:王志强老师实验日期:2018年11月5日必修/选修:必修实验内容(1)参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder;用JUnit或自己... 查看详情

201723052017-2018-2《程序设计与数据结构》实验二报告(代码片段)

201723052017-2018-2《程序设计与数据结构》实验报告课程:《程序设计与数据结构》班级:1723姓名:谭鑫学号:20172305实验教师:王志强实验日期:2018年10月13日必修/选修:必修实验内容实验二-1-实现二叉树:(1)参考教材p212,完成链... 查看详情

201723172017-2018-2《程序设计与数据结构》实验二报告(代码片段)

201723172017-2018-2《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:蒋子行学号:20172317实验教师:王志强实验日期:2018年4月22日必修/选修:必修实验内容ExperimentcontentMasterthebasicofunittestingandTDD(Tes... 查看详情

哈夫曼树的创建实验报告(代码片段)

 代码参考严蔚敏《数据结构》1#include<string.h>2#include<stdlib.h>3#include<stdio.h>45intm,s1,s2;67typedefstruct89unsignedintweight;10unsignedintparent,lchild,rchild;11HTNode,*HuffmanTree;/ 查看详情

201723292017-2018-2《程序设计与数据结构》实验二报告(代码片段)

201723292017-2018-2《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:王文彬学号:20172329实验教师:王志强实验日期:2018年4月21日必修/选修:必修1.实验内容初步掌握单元测试和TDD理解并掌握面向... 查看详情

1723032017-2018-2《程序设计与数据结构》实验二报告(代码片段)

1723032017-2018-2《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:范雯琪学号:20172303实验教师:王志强助教:张旭升/刘伟康实验日期:2018年4月17日必修/选修:必修1.实验内容初步掌握单元测试... 查看详情

201723302017-2018-2《程序设计与数据结构》实验二报告(代码片段)

201723302017-2018-2《程序设计与数据结构》实验二报告课程:《程序设计与数据结构》班级:1723姓名:李楠学号:30实验教师:王志强实验日期:2018年4月18日必修/选修:必修1.实验内容1:初步掌握单元测试和TDD2:理解并掌握面向... 查看详情