20192317邓子彦 实验六 《数据结构与面向对象程序设计》实验报告
课程:《程序设计与数据结构》
班级: 1923
姓名: 邓子彦
学号:20192317
实验教师:王志强
实验日期:2020年11月5日
必修/选修: 必修
1. 实验内容
1.链表练习,要求实现下列功能:
通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。打印所有链表元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。做完这一步,把你的程序签入源代码控制(git push)。
2.链表练习,要求实现下列功能:
实现节点插入、删除、输出操作;继续你上一个程序,扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;从磁盘读取一个文件,这个文件有两个数字。从文件中读入数字1,插入到链表第 5位,并打印所有数字,和元素的总数。保留这个链表,继续下面的操作。从文件中读入数字2,插入到链表第0位,并打印所有数字,和元素的总数。保留这个链表,并继续下面的操作。从链表中删除刚才的数字1,并打印所有数字和元素的总数。
3.链表练习,要求实现下列功能:
使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;如果你学号是单数, 选择冒泡排序,否则选择选择排序。在排序的每一个轮次中,打印元素的总数,和目前链表的所有元素。
2. 实验过程及结果
一、实验一
- 1.实验代码
public abstract class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
LinkedList site = new LinkedList();
int nDengZiYan = 0;
for(int i = 0;i < 11;i++){
site.add(in.nextInt());
}
System.out.println(site);
System.out.println("The LinkedList has " + site.size() +" numbers");
}
-
2.运行截图
-
二、实验二
-
1.实验代码
public abstract class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
LinkedList site = new LinkedList();
int nDengZiYan = 0;
for(int i = 0;i < 11;i++){
site.add(in.nextInt());
}
System.out.println(site);
System.out.println("The LinkedList has " + site.size() +" numbers");
BufferedReader br1 = null;
try {
String Line1,Line2;
br1 = new BufferedReader(new FileReader("D:\ExperimentLinkedList\src\number.txt"));
System.out.println("读取第一个文本");
Line1 = br1.readLine();
Line2 = br1.readLine();
System.out.println(Line1);
site.add(5,Integer.parseInt(Line1));
System.out.println(site);
System.out.println("链表长度为:"+site.size());
System.out.println("读取第二个文本");
site.addFirst(Integer.parseInt(Line2));
System.out.println(Line2);
System.out.println(site);
System.out.println("链表长度为:"+site.size());
}catch (IOException ioe){
ioe.printStackTrace();
}
}
-
2.运行截图
-
三、实验三
-
1.实验代码
//冒泡排序法
public abstract class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
LinkedList site = new LinkedList();
int nDengZiYan = 0;
for(int i = 0;i < 11;i++){
site.add(in.nextInt());
}
System.out.println(site);
System.out.println("The LinkedList has " + site.size() +" numbers");
BufferedReader br1 = null;
try {
String Line1,Line2;
br1 = new BufferedReader(new FileReader("D:\ExperimentLinkedList\src\number.txt"));
System.out.println("读取第一个文本");
Line1 = br1.readLine();
Line2 = br1.readLine();
System.out.println(Line1);
site.add(5,Integer.parseInt(Line1));
System.out.println(site);
System.out.println("链表长度为:"+site.size());
System.out.println("读取第二个文本");
site.addFirst(Integer.parseInt(Line2));
System.out.println(Line2);
System.out.println(site);
System.out.println("链表长度为:"+site.size());
}catch (IOException ioe){
ioe.printStackTrace();
}
nDengZiYan = site.size();
int temp;
for ( int i = 1; i < nDengZiYan - 1; i++) {
for (int j = 0; j < (nDengZiYan - i); j++) {
if ((int)site.get(j + 1) < (int)site.get(j)) {
site.add(j,site.get(j + 1));
site.remove(j+2);
System.out.println("链表的元素总数为:" +site.size());
System.out.println("链表的内容为:
" +site);
}
}
}
}
}
- 2.运行截图
3. 实验过程中遇到的问题和解决过程
-
问题1:刚开始做实验的时候还不太理解链表的含义,一开始不知道该如何下手。
-
解决办法:上CSDN搜索JAVA链表的基本操作,有很多人发布关于链表的帖子,通过学习后我开始理解链表的结构和操作。
-
问题2:进行实验三的时候,我对链表的理解还不够深入,想着通过比较然后直接将两个数交换,一直报错。
-
解决办法:刚开始我的思路是把链表转成数组进行交换,可是过程过于繁琐,我去问同学该怎么操作。后面理解到了链表的节点含有两个引用,是不能直接交换的,判断两个节点内容大小时要强制转换类型成Int,然后通过插入节点和删除节点实现交换操作
4. 实验体会
- 这次实验前面的三个其实难度不是很大,但是后面的两个在安卓中实现难度却很高,我上网查了很多教程还是不太懂该如何在Android Studio中怎么实现实验一二三,害,可能自己还是不够努力,继续加油吧!