20172319 实验二《树》实验报告
Posted tangcaiming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172319 实验二《树》实验报告相关的知识,希望对你有一定的参考价值。
20172319 2018.11.04-11.12
实验二《树》 实验报告
课程名称:《程序设计与数据结构》
学生班级:1723班
学生姓名:唐才铭
学生学号:20172319
实验教师:王志强老师
课程助教:张师瑜学姐、张之睿学长
实验时间:2018年11月04日——2018年11月12日
必修/选修:必修
目录
实验内容
- 实验二-1-实现二叉树: 完成链树LinkedBinaryTree的实现。
- 实验二 树-2-中序先序序列构造二叉树: 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二?树的功能
- 实验二 树-3-决策树: 自己设计并实现一颗决策树
- 实验二 树-4-表达式树: 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
- 实验二 树-5-二叉查找树: 完成PP11.3
- 实验二 树-6-红黑树分析: 参考http://www.cnblogs.com/rocedu/p/7483915.html对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果
实验要求
- 完成蓝墨云上与实验二《树》相关的活动,及时提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分。
- 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导。
- 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
实验步骤
- 实验二-1-实现二叉树:
参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 - 实验二 树-2-中序先序序列构造二叉树:
基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二?树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
- 实验二 树-3-决策树:
自己设计并实现一颗决策树
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 - 实验二 树-4-表达式树:
输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,则为0分)
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 - 实验二 树-5-二叉查找树:
完成PP11.3
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台 - 实验二 树-5-二叉查找树:
参考http://www.cnblogs.com/rocedu/p/7483915.html对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果。
(C:Program FilesJavajdk-11.0.1libsrcjava.basejavautil)
前期准备:
- 预先下载安装好IDEA 。
需求分析:
- 需要掌握二叉查找树的相关知识;
- 需要掌握当任意给出两个序能构建出唯一一棵二叉树;
- 需要理解表达式树的实现;
- 需要理解决策树的实现。
代码实现及解释
本次实验一共分为六个提交点:
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(码云)教程
以上是关于20172319 实验二《树》实验报告的主要内容,如果未能解决你的问题,请参考以下文章
20172302 《Java软件结构与数据结构》实验二:树实验报告