20172308 2018-2019-1 实验1 《线性结构》报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 周亚杰
学号:20172308
实验教师:王志强
实验日期:2018年9月30日
必修/选修: 必修
1.实验内容
- 线性结构之链表(1):通过键盘输入一些整数,建立一个链表,打印所有链表元素, 并输出元素的总数。
- 线性结构之链表(2):实现节点插入、删除、输出操作,扩展功能,从磁盘读取一个文件,从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
- 线性结构之链表(3):使用选择排序法根据数值大小对链表进行排序,在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
- 线性结构之数组(4):通过键盘输入一些整数,建立一个数组,打印所有数组元素, 并输出元素的总数;实现数组插入、删除、输出操作, 扩展功能,从磁盘读取一个文件,从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
- 线性结构之数组(5):使用选择排序法根据数值大小对数组进行排序,在排序的每一个轮次中, 打印元素的总数,和目前数组的所有元素。
2. 实验过程及结果
链表与数组练习,所有功能在一个程序中完成
每完成一个功能签入一次码云
-
线性结构之链表(1):
1.通过键盘输入一些整数,建立一个链表
2.这些数是学号中依次取出的两位数,再加上今天的时间
3.打印所有链表元素, 并输出元素的总数
4.用一个特殊变量名来记录元素的总数,变量名是你的名字
5.实验结果截图:
-
线性结构之链表(2):
1.实现节点插入、删除、输出操作
2.继续上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器
3.从磁盘读取一个文件, 这个文件有两个数字
4.从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作
从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作
5.从链表中删除刚才的数字1. 并打印所有数字和元素的总数
6.实验结果截图:
-
线性结构之链表(3):
1.使用冒泡排序法或者选择排序法根据数值大小对链表进行排序
2.学号是双数, 使用选择排序
3.在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素
4.实验结果截图:
- 线性结构之数组(4):
1.通过键盘输入一些整数,建立一个数组
2.这些数是学号中依次取出的两位数,再加上今天的时间
3.打印所有数组元素, 并输出元素的总数
4.用一个特殊变量名来记录元素的总数,变量名是你的名字
5.实现数组插入、删除、输出操作
6.继续上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器
7.从磁盘读取一个文件, 这个文件有两个数字
8.从文件中读入数字1, 插入到数组第 5 位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作
从文件中读入数字2, 插入到数组第 0 位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作
9.从数组中删除刚才的数字1. 并打印所有数字和元素的总数
10.实验结果截图:
- 线性结构之数组(5):
1.使用插入排序法或者选择排序法根据数值大小对数组进行排序
2.学号是双数, 使用插入排序
3.在排序的每一个轮次中, 打印元素的总数,和目前数组的所有元素
4.实验结果截图:
3. 实验过程中遇到的问题和解决过程
-
问题1:实验过程中遇到最大的问题如图:
从排序的结果来看,本来应该是按照选择排序的方式来排序的,排出来的结果甚至连大小都不对
但是仔细看一下,会发现也是有顺序: -
问题1解决过程:排的顺序是按照数字的第一个数来排的,如果都是一位数结果就是正常的,如果是两位数,排大小却只取两位数的第一位来与其它数比较。比如,会把1认为是与11,111相等。但是这些都是我猜的,然后百度一下我用来排序的方法compareTo;
代码中的list是comparable型的,直接用compareTo方法得到的就是我上面所说的结果,但是很奇怪为什么会这样;于是强转了String类型,再转成int型作比较即可得到正确排序,如图:
【参考资料】
java中的compareto方法的详细介绍
String类中的compareTo方法总结
-
问题2:还有一个问题是,从文件中读取数字,然后赋给一个String类型的变量,本以为很简单,却发现根本不能直接赋值
-
问题2解决过程:
这里我采取的措施是,先创建文件
OutputStream outputStream1 = new FileOutputStream(file);
再将数字写入文件
outputStream1.write(("1 2").getBytes());
我认为这样就可以保证写进去的数据是string型的,然后直接读取数字赋给string变量就行了
InputStream inputStream1 = new FileInputStream(file); String result = inputStream1.read()
然而事实是,要将读取的数字赋给string变量需要跟多的操作
String result = new BufferedReader(new InputStreamReader(inputStream1)) .lines().collect(Collectors.joining(System.lineSeparator()));
参考资料中有更多的读取数字赋给变量的方法
【参考资料】
Java中InputStream和String之间的转换方法
4.感悟
本次实验的大部分内容都是上学期做过的,这次重新练习了一遍觉得自己已经忘得差不多了,但还是很有收获的,重新温习了一下知识,还是要勤学、多回顾以前的知识才好