20172318 2018-2019-1 《程序设计与数据结构》实验1报告
Posted m1sty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172318 2018-2019-1 《程序设计与数据结构》实验1报告相关的知识,希望对你有一定的参考价值。
20172318 2017-2018-2 《程序设计与数据结构》实验4报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 陆大岳
学号:20172318
实验教师:王志强
实验日期:2018年9月30日
必修/选修: 必修
1.实验内容
链表练习,要求实现下列功能:
(1)通过键盘输入一些整数,建立一个链表(1分);
这些数是你学号中依次取出的两位数。 再加上今天的时间。
例如你的学号是 20172301
今天时间是 2018/10/1, 16:23:49秒
数字就是
20, 17,23,1, 20, 18,10,1,16,23,49
打印所有链表元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是
int nZhangSan = 0; //初始化为 0.
(2)实现节点插入、删除、输出操作
继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
从磁盘读取一个文件, 这个文件有两个数字。
从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
(3)使用冒泡排序法或者选择排序法根据数值大小对链表进行排序(2分);
如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。数组练习,要求实现下列功能:
(1)通过键盘输入一些整数,建立一个链表(1分);
这些数是你学号中依次取出的两位数。 再加上今天的时间。
例如你的学号是 20172301
今天时间是 2018/10/1, 16:23:49秒
数字就是
20, 17,23,1, 20, 18,10,1,16,23,49
打印所有数组元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是
int nZhangSan = 0; //初始化为 0.
(2)实现节点插入、删除、输出操作(2分,3个知识点根据实际情况酌情扣分);
继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
从磁盘读取一个文件, 这个文件有两个数字。
从文件中读入数字1, 插入到数组第 5 位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作。
从文件中读入数字2, 插入到数组第 0 位,并打印所有数字,和元素的总数。 保留这个数组,并继续下面的操作。
从数组中删除刚才的数字1. 并打印所有数字和元素的总数。
(3)使用冒泡排序法或者选择排序法根据数值大小对数组进行排序(2分);
如果你学号是单数, 选择选择排序, 否则选择冒泡排序。
在排序的每一个轮次中, 打印元素的总数,和目前数组的所有元素。
2. 实验过程及结果
第一部分 通过键盘输入一些整数,建立一个链表
exp1 exp1 = new exp1();
Scanner scanner = new Scanner(System.in);
System.out.println("输入学号、日期、时间");
String string = scanner.nextLine();
StringTokenizer stringTokenizer = new StringTokenizer(string);
for (int i = 0; i < string.length(); i++) {
while (stringTokenizer.hasMoreTokens()) {
String f = stringTokenizer.nextToken();
int num = Integer.parseInt(f);
exp1.add(num);
}
}
System.out.println("打印所有元素:" + exp1.toString() + "元素总数:" + exp1.Size());
第二部分
- 读取文件
File file = new File("D:\\shuzi.txt");
FileReader fileReader = null;
try {
fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str = "";
str = bufferedReader.readLine();
String[] strings = str.split(" ");
int num1=Integer.parseInt(strings[0]);
int num2=Integer.parseInt(strings[1]);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
- 插入、删除、输出操作
public void insert( int data, int index) {
NumberNode node = new NumberNode(data);
NumberNode current = list;
NumberNode pre = list;
while (t != index) {
pre = current;
current = current.next;
t++;
}
node.next = current;
pre.next = node;
t = 0;
nLudayue++;
}
public void delete(int num){
NumberNode node = new NumberNode(num);
NumberNode current, temp;
if(list.Num == num) {
current = list.next;
list = current;
}
else{
current = list;
while(current.next.Num != num)
current = current.next;
temp = current.next.next;
current.next = temp;
}
nLudayue --;
}
public String toString(){
String result = "";
NumberNode current = list;
while (current != null){
result += current.Num + " ";
current = current.next;
}
return result;
}
第三部分 选择排序
public void Selection(){
NumberNode current;
current = list;
int[] A = new int[nLudayue];
for(int i = 0; i < nLudayue; i++) {
A[i] = current.Num;
current = current.next;
}
int[] B = selectionSort(A);
list = null;
int top2 = nLudayue;
for(int i =0;i< top2; i++){
int num = B[i];
add(num);
}
}
public int[] selectionSort(int[] list) {
int min;
int temp;
for (int index = 0; index < list.length - 1; index++) {
min = index;
for (int scan = index + 1; scan < list.length; scan++)
if (list[scan] - (list[min]) < 0)
min = scan;
temp = list[min];
list[min] = list[index];
list[index] = temp;
}
return list;
}
第四部分 用数组实现插入、删除、输出操作
- 插入、删除、输出操作
public void insert(int num ,int index){
int[] number = Number;
if(index != 0){
for(int i = nLudayue ;i>= index ;i--)
{
number[i]=number[i-1];
}
number[index-1]= num;
}
else {
for (int i = nLudayue;i > index;i--)
number[i] = number[i-1];
number[0] = num;
}
nLudayue++;
}
public void delete(int num){
int[] number = Number;
int index = 0;
while (number[index]!=num) {
index++;
}
for (int i = index +1; i< nLudayue; i++) {
number[i-1] = number[i];
}
nLudayue--;
}
public String toString() {
String result = "";
for(int i = 0;i<nLudayue;i++)
result += Number[i] + " ";
return result;
}
第五部分 冒泡排序
public void Sort() {
int[] number = Number;
for (int i = 0; i < nLudayue; i++) {
for (int j = 0; j < nLudayue - i - 1; j++) {
if (number[j] > number[j + 1]) {
int temp = number[j+1];
number[j+1] = number[j];
number[j] = temp;
}
}
}
}
3. 实验过程中遇到的问题和解决过程
问题1:
出现了输入8个数字却将前面四个一起读取了的问题
问题1解决方案:后来发现原因是我先写了20172318,再将他们用空格分开导致的
其他(感悟、思考等)
这次实验不仅需要用到链表和数组,还得用点时间复习一下文件输入和读取方面的知识,考验我们掌握多方面知识的能力
参考资料
以上是关于20172318 2018-2019-1 《程序设计与数据结构》实验1报告的主要内容,如果未能解决你的问题,请参考以下文章
20172318 2018-2019-1 《程序设计与数据结构》第7周学习总结
20172318 2017-2018-2 《程序设计与数据结构》实验3报告
20172318 2017-2018-2 《程序设计与数据结构》实验1报告
20172318 2017-2018-2 《程序设计与数据结构》实验5报告