20172308 实验一《程序设计与数据结构》线性结构 实验报告

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.实验结果截图:
    1320922-20181005100339802-827967758.png

  • 线性结构之链表(2):
    1.实现节点插入、删除、输出操作
    2.继续上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器
    3.从磁盘读取一个文件, 这个文件有两个数字
    4.从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作
    从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作
    5.从链表中删除刚才的数字1. 并打印所有数字和元素的总数
    6.实验结果截图:
    1320922-20181005100736663-1006993198.png

  • 线性结构之链表(3):
    1.使用冒泡排序法或者选择排序法根据数值大小对链表进行排序
    2.学号是双数, 使用选择排序
    3.在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素
    4.实验结果截图:
    1320922-20181005102311144-828931754.png

1320922-20181005102322561-1734473562.png

1320922-20181005102354363-1696870080.png

  • 线性结构之数组(4):
    1.通过键盘输入一些整数,建立一个数组
    2.这些数是学号中依次取出的两位数,再加上今天的时间
    3.打印所有数组元素, 并输出元素的总数
    4.用一个特殊变量名来记录元素的总数,变量名是你的名字
    5.实现数组插入、删除、输出操作
    6.继续上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器
    7.从磁盘读取一个文件, 这个文件有两个数字
    8.从文件中读入数字1, 插入到数组第 5 位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作
    从文件中读入数字2, 插入到数组第 0 位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作
    9.从数组中删除刚才的数字1. 并打印所有数字和元素的总数
    10.实验结果截图:
    1320922-20181005102723942-1655392521.png

1320922-20181005102739802-61510677.png

1320922-20181005102810812-1430040543.png

  • 线性结构之数组(5):
    1.使用插入排序法或者选择排序法根据数值大小对数组进行排序
    2.学号是双数, 使用插入排序
    3.在排序的每一个轮次中, 打印元素的总数,和目前数组的所有元素
    4.实验结果截图:
    1320922-20181005103312519-1512391990.png

3. 实验过程中遇到的问题和解决过程

  • 问题1:实验过程中遇到最大的问题如图:
    1320922-20181005104336325-1767071636.png
    从排序的结果来看,本来应该是按照选择排序的方式来排序的,排出来的结果甚至连大小都不对
    但是仔细看一下,会发现也是有顺序:

  • 问题1解决过程:排的顺序是按照数字的第一个数来排的,如果都是一位数结果就是正常的,如果是两位数,排大小却只取两位数的第一位来与其它数比较。比如,会把1认为是与11,111相等。但是这些都是我猜的,然后百度一下我用来排序的方法compareTo;

1320922-20181005112821694-1231536396.png
1320922-20181005114217868-770568211.png

代码中的list是comparable型的,直接用compareTo方法得到的就是我上面所说的结果,但是很奇怪为什么会这样;于是强转了String类型,再转成int型作比较即可得到正确排序,如图:
1320922-20181005113656680-1794640575.png

【参考资料】
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.感悟

本次实验的大部分内容都是上学期做过的,这次重新练习了一遍觉得自己已经忘得差不多了,但还是很有收获的,重新温习了一下知识,还是要勤学、多回顾以前的知识才好

转载于:https://www.cnblogs.com/zhouyajie/p/9744235.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值