20172305 2018-2019-1 《程序设计与数据结构》实验一报告
课程:《Java软件结构与数据结构》
班级: 1723
姓名: 谭鑫
学号:20172305
实验教师:王志强
实验日期:2018年9月25日
必修/选修: 必修html
1.实验内容
- 实验一--链表练习,要求实现下列功能:
- (1)经过键盘输入一些整数,创建一个链表。
- (2)打印全部链表元素, 并输出元素的总数,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。
- 实验一--链表练习,要求实现下列功能:
- (1)实现节点插入、删除、输出操做(2分,3个知识点根据实际状况酌情扣分);继续你上一个程序, 扩展它的功能,每作完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
- (2)从磁盘读取一个文件, 这个文件有两个数字。
- (3)从文件中读入数字1,插入到链表第5位,并打印全部数字,和元素的总数。保留这个链表,继续下面的操做。
- (4)从文件中读入数字2,插入到链表第0位,并打印全部数字,和元素的总数。 保留这个链表,并继续下面的操做。
- (5)从链表中删除刚才的数字1,并打印全部数字和元素的总数。
- 实验一--链表练习,要求实现下列功能:
- (1)使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;若是你学号是单数, 选择冒泡排序, 不然选择选择排序。在排序的每个轮次中, 打印元素的总数,和目前链表的全部元素。
- 实验一--数组练习,要求实现下列功能:
- (1)经过键盘输入一些整数,创建一个数组。
- (2)打印全部数组元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。
- (3)实现节点插入、删除、输出操做(2分,3个知识点根据实际状况酌情扣分);继续你上一个程序, 扩展它的功能,每作完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
- (4)从磁盘读取一个文件, 这个文件有两个数字。
- (5)从文件中读入数字1,插入到链表第5位,并打印全部数字,和元素的总数。保留这个链表,继续下面的操做。 从文件中读入数字2,
- (6)插入到链表第0位,并打印全部数字,和元素的总数。 保留这个链表,并继续下面的操做。
- (7)从链表中删除刚才的数字1,并打印全部数字和元素的总数。
- 实验一--数组练习,要求实现下列功能:
- (1)使用冒泡排序法或者选择排序法根据数值大小对数组进行排序;若是你学号是单数, 选择选择排序, 不然选择冒泡排序。在排序的每个轮次中, 打印元素的总数,和目前数组的全部元素。
2. 实验过程及结果
3. 实验过程当中遇到的问题和解决过程
- 问题1:冒泡排序的代码分析
- 问题1的解决方案:冒泡排序就是重复地遍历过要排序的链表,一次比较两个元素,若是他们的顺序错误就把他们交换过来。遍历链表的工做是重复地进行直到没有再须要交换,也就是说该链表已经排序完成。经过老师给出的网站,咱们能够看到排序的每一次步骤就像是气泡同样从一侧到另外一侧。在头结点不为空的状况下,添加两个while循环,若是添加一个的话,从实现的角度来看只会出现一次排序过程,因此添加了两个循环内容,条件看似同样,可是在乎义上,内循环经过temp1所指数字与temp的下一个进行大小比较,不符合就进行相邻元素的交换。而后往下执行输出的代码,而后在链表上继续向下遍历。直至跳出内循环,而后经过交换又从头开始进行遍历直至排序结束。为了表示第几回排序,特地添加一个单独的计数变量,进行输出次数。对于老师要求的在每一次显示的过程当中也要显示元素的数量,以为在排序过程当中没有元素树木上的变化,就用变量nTanXin在每一次输出的中显示。
intNode temp1 = head, temp2 = null;
int num = 0;
while(temp1.next != temp2){
while(temp1.next != temp2){
if(temp1.next.getNumber() < temp1.getNumber()){
int number = temp1.getNumber();
temp1.setNumber(temp1.next.getNumber());
temp1.next.setNumber(number);
}
temp1 = temp1.next;
num++;
intNode temp = head;
System.out.print("第" + num + "次:(元素总数:" + nTanXin +")");
while (temp != null) {
System.out.print(temp.getNumber()+" ");
temp = temp.next;
}
System.out.println();
}
temp2 = temp1;
temp1 = head;
}

- 问题2:IO流读写文件中内容
- 问题2的解决方案:早在上学期就学过的东西,本学期运用的时候却到处碰壁,好在码云上有相关代码。从文件中读取的代码有了,可是如何建立文件,并往里面写入数字又是一个问题。BufferedReader对应的输入缓存流BufferedOutputStream能够将字符串以字节的形式写到指定文件中。因此,在读取文件以前我用BufferedOutputStream相关的方法进行写入,缓存流算有个特色就是须要刷新一下,而我第一次运行就由于没有刷新直接关闭致使文件建成可是内容没有,找了好半天才发现缺乏刷新的相关代码。
从文件中读取内容:
File file = new File("sort.txt");
Reader reader = new FileReader(file);
BufferedReader bufferedreader = new BufferedReader(reader);
String string = bufferedreader.readLine();
往文件中写入内容:
File file = new File("sort.txt");
OutputStream outputstream = new FileOutputStream(file);
BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(outputstream);
String str = "xxxxxxx";
bufferedoutputstream.write(str.getBytes());
bufferedoutputstream.flush();
bufferedoutputstream.close();
- 问题3:关于数组的插入和删除
- 问题3的解决方案:数组的插入和删除不一样于链表的插入和删除,链表的插入直接串在一块儿就好,删除就是抠出去删除元素而后链接在一块儿。可是,数组的插入和删除须要进行移位,也考虑过环形数组在必定程度上能够避免移位,不过也只是在头尾进行添加和删除的。因此,不可避免的进行移位,想在循环体运用是三行代码进行一位一位的交换,但是调来调去都是在添加元素后面一成不变的都是同一个数。改了半天也没有一点变化,就换为暂时数组来解决了。暂时数组的商都就是插入或是删除的索引值与总数目的差。换成用暂时数组就行了。
交换的代码
temp = min;
min = num;
num = temp;
其余
实验一的五个实验在座的过程当中发现对于上学期的只是仍是有不少不足的,在学习新知识的同时还要兼顾温习旧知识,就像IO流的相关代码,若是好好温习的话就不会出现问题的。还有排序和插入、删除的问题全都是逻辑问题,考虑的必定要周到全面才不会到处碰壁。缓存
参考资料