20172319 实验二《树》实验报告

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 Files\Java\jdk-11.0.1\lib\src\java.base\java\util)

前期准备:

  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() + "\n" );

                    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 + "\n" +
                            "The number of elements in the array is:  :" + MyArray.length + "\n";
                }
            }
        }
        return result;
    }
  • 本次提交点的相关代码(有删减):
            System.out.println("实验的第三部分:");
            System.out.print(MyArray3.Array_Selection_sort());
  • 运行结果截图(仅部分)

返回目录


测试过程及遇到的问题

  • 问题1:
  • 解决:

返回目录


分析总结

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

返回目录


代码托管

返回目录


参考资料

Intellj IDEA 简易教程

Android开发简易教程

Android studio项目上传至oschina(码云)教程

返回目录

原文地址:https://www.cnblogs.com/Tangcaiming/p/9943025.html

时间: 2024-12-14 04:27:06

20172319 实验二《树》实验报告的相关文章

实验二 20155335 实验报告 固件程序设计

实验二 20155307 20155335 20155338 实验报告 固件程序设计 一.实验内容: 1.安装MDK,JLink驱动,运行uVision4,破解MDK2.KEIL-MDK 中添加Z32 SC-000芯片库,完成LED实验3.完成UART发送与中断接收实验4.理解国密算法标准SM1,SM2,SM3,SM4并用gcc和gcc-arm编译5.完成SM1加密实验 二.实验步骤 在开始试验之前,先安装MDK,JLink驱动,运行uVision4,破解MDK, 很多付费软件为了保证试用和购买

20175325 《JAVA程序设计》实验二《JAVA开发环境的熟悉》实验报告

20175325 <JAVA程序设计>实验二<JAVA开发环境的熟悉>实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 指导教师:娄嘉鹏 实验日期:2018年4月17日 实验名称:面向对象程序设计 实验目的与要求: 1.完成实验.撰写实验报告,注意实验报告重点是运行结果,遇到的问题以及分析. 2.实验报告中统计自己的PSP(Personal Software Process)时间: 3.掌握使用IDEA完成基础编程与程序调试

实验二报告 20135209潘恒 20135204郝智宇

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础                      班级:1352 姓名:   潘恒     郝智宇 学号: 20135209     20135204 成绩:             指导教师:娄嘉鹏          实验日期:2015.11.17 实验密级:         预习程度:            实验时间:15:30~17:30 仪器组次:04,09     必修/选修:必修        

OOAD实验二 报告

实验二: 实验要求: (1)能够完整地分析系统Use Case用况组成: (2)能够正确地确定Use Case Diagram用况图中的Actor角色: (3)能够根据需求文档确定每一个用例的详细描述,即事件流: (4)能够使用Rose(或其他UML工具)正确画出Use Case Diagram用例图: 学号:201430340104 姓名:贺世宇 班级:14级软R1班 ATM系统的用况图:   用况:验证身份 用户插入卡片 检测卡片性质 若是普通银行卡,则呈现输入银行卡密码页面 若是技术人员工

20172325 学号 2017-2018-2 《程序设计与数据结构》实验二报告

课程:<程序设计与数据结构> 班级: 1723 姓名: 邓煜坤 学号:20172325 实验教师:王志强 实验日期:2018年4月23日 必修/选修: 必修 1.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 6完成蓝墨云上 (1)-(5)实验. 2. 实验过程及结果 实验一: 做实验一的时候是按照老师博客做出来的,在过程上很顺利 代码链接 实验二: 实验二按照教程来也很顺利,对T

信息安全系统设计基础实验二:固件设计

北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础 班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩: 指导教师:娄家鹏 实验日期:2015.11.10 实验密级: 预习程度: 实验时间:15:30~18:00 仪器组次: 必修/选修: 实验序号:1 实验名称:实验一:Linux开发环境的配置和使用 实验目的与要求: 1.掌握程序的烧写方法; 2.能够实现Bootloader; 3.实现密码学中常见算法的固化. 实验仪器: 名称 型号 数量 嵌

FPGA与simulink联合实时环路系列——实验二LED

实验二LED 实验内容 ????在实验一的基础上,将simulink产生的测试信号输出到FPGA开发板上的LED灯进行显示,这里要在生成的硬件模型上进行修改,将传送到FPGA的信号输出到8个LED灯上,并且对信号进行分配引脚. 创建模型 ????在Matlab的指令窗口输入以下指令,hdlsetuptoolpath('ToolName','Altera Quartus II','ToolPath','C:\altera\11.0\quartus\bin\quartus.exe(修改为软件安装的路

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

课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder:用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 (2)基于Linked

20172328《程序设计与数据结构》实验二:树

20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:2018年11月5日-2018年11月12日 必修选修: 必修 一.实验要求内容 实验1:实现二叉树 参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder) 用JUnit或自己编写驱动类对自己实现的LinkedB