20202325 实验五和六 《数据结构与面向对象程序设计》
20202325 2021-2022-1 《数据结构与面向对象程序设计》实验五和六报告
课程:《程序设计与数据结构》
班级: 2023
姓名: 和宇
学号:20202325
实验教师:王志强
实验日期:2021年11月4日
必修/选修: 必修
1.链表练习,要求实现下列功能:
- 通过键盘输入一些整数,建立一个链表;
这些数是你学号中依次取出的两位数。 再加上今天的时间。
例如你的学号是 20172301
今天时间是 2018/10/1, 16:23:49秒
数字就是
20, 17,23,1, 20, 18,10,1,16,23,49
打印所有链表元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是
int nZhangSan = 0; //初始化为 0.
做完这一步,把你的程序签入源代码控制(git push)。 -
2.链表练习,要求实现下列功能:
-
实现节点插入、删除、输出操作;
- 继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
从磁盘读取一个文件, 这个文件有两个数字。
从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。 - 从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
-
3.链表练习,要求实现下列功能:
- 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。
- 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
-
- 总程序:
-
public class Input { Node temp; Node head = null; int hy = 0; public void Add(int n) { Node N = new Node(n); if (head == null) { head = N; hy++; return; } temp = head; while (temp.next != null) { temp = temp.next; } temp.next = N; hy++; } public void Insert(int index, int d) { Node temp = head; Node N = new Node(d); if (index > hy || index < 0) { System.out.println("超出范围!"); // return; } else if(index==0){ N.next=temp; head=N; hy++; // return; } else { int i; for (i = 0; i < index - 1; i++) { temp = temp.next; } Node per=temp.next; N.next = per; temp.next = N; hy++; } } public int Length(){ return hy; } public void delete(int index){ if(index<1 || index>Length()){ System.out.println("超出范围"); } if(index==1){ head=head.next; hy--; } int i=1; Node pre=head; Node cur=pre.next; while(cur!=null){ if (i == index) { pre.next = cur.next; hy--; } pre = cur; cur = cur.next; i++; } } public void Sort(){ Node newhead=head; int temp; Node jie=head;
for(int i=0;i<hy;i++){
// Node rejie=jie.next;
// while(rejie!=null)
// for(int j=1;j<hy-i;j++)
while(jie.next!=null){
if(jie.data>jie.next.data){
ten=jie.data;
jie.data= jie.next.data;;
jie.next.data=ten;
}
else{
jie=jie.next;
}
}
Node xy=head;
while(xy!=null){
System.out.print(xy);
xy=xy.next;
}
System.out.println();
jie=head;
}} }
import java.io.*; import java.sql.SQLOutput; import java.util.Scanner; public class InputTest { public static void main(String[] args) throws IOException{ Node node = null; int nHeYu = 0; Scanner scan = new Scanner(System.in); Input cite = new Input(); int m[] = new int[20]; int i = 0; System.out.println("请按顺序输入年月日、时间以及学号!(输入负数退出输入)"); for (i = 0; ; i++) { m[i] = scan.nextInt(); if(m[i]<0){ break; } cite.Add(m[i]); nHeYu++; } cite.temp= cite.head; for (i = 0; i < nHeYu; i++) { System.out.print(cite.temp.data + " "); cite.temp = cite.temp.next; } System.out.println(); System.out.println("链表里的元素个数为:" + nHeYu); File file=new File("E:\\java\\Filetest\\test\\Input.txt"); if(!file.exists()){ file.createNewFile(); } OutputStream outputStream=new FileOutputStream(file); byte[] test={'2','9'}; outputStream.write(test); InputStream inputStream=new FileInputStream(file); int a,b; a=inputStream.read()-48; b=inputStream.read()-48; System.out.println(); System.out.println("在链第五位插入数字1:"); cite.Insert(5,a); cite.temp= cite.head; for(i=0;i<cite.Length();i++){ System.out.print(cite.temp.data+" "); cite.temp= cite.temp.next; } System.out.println(); System.out.println("在第零位插入数字2:"); cite.temp=cite.head; cite.Insert(0,b); cite.temp=cite.head; while(cite.temp!=null){ System.out.print(cite.temp.data+" "); cite.temp= cite.temp.next; } System.out.println(); System.out.println("删除刚才输入的数据1:"); cite.temp= cite.head; cite.delete(6); while(cite.temp!=null){ System.out.print(cite.temp.data+" "); cite.temp=cite.temp.next; } System.out.println(); System.out.println("链表的长度为:"+cite.Length()); System.out.println("20202325,冒泡排序:"); cite.temp=cite.head; cite.Sort(); // while(cite.temp!=null){ // System.out.print(cite.temp.data+" "); // cite.temp=cite.temp.next; // } } }
public class Node{ int data; Node next=null; public Node(int data){ this.data=data; } @Override public String toString() { return data+" "; }
-
-
4.在android上实现实验(1)和(2)
-
5.在android平台上实现实验(3)
-
三. 实验过程中遇到的问题和解决过程
- 问题1:令变量 i<Stack.size 时,输出的只有两位数,令 c=Stack.size,i<c 时可以输出四位。
- 问题2:在接口设temp后在主函数中多次使用temp导致有些混乱。
- 其他(感悟、思考等)
- 编的很艰难,Android这一块搞得迷迷糊糊的。
-