20192317邓子彦 实验六 《数据结构与面向对象程序设计》实验报告

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("链表的内容为:\n" +site);
                }
            }
        }
    }
}
  • 2.运行截图




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

  • 问题1:刚开始做实验的时候还不太理解链表的含义,一开始不知道该如何下手。

  • 解决办法:上CSDN搜索JAVA链表的基本操作,有很多人发布关于链表的帖子,通过学习后我开始理解链表的结构和操作。

  • 问题2:进行实验三的时候,我对链表的理解还不够深入,想着通过比较然后直接将两个数交换,一直报错。

  • 解决办法:刚开始我的思路是把链表转成数组进行交换,可是过程过于繁琐,我去问同学该怎么操作。后面理解到了链表的节点含有两个引用,是不能直接交换的,判断两个节点内容大小时要强制转换类型成Int,然后通过插入节点和删除节点实现交换操作

4. 实验体会

  • 这次实验前面的三个其实难度不是很大,但是后面的两个在安卓中实现难度却很高,我上网查了很多教程还是不太懂该如何在Android Studio中怎么实现实验一二三,害,可能自己还是不够努力,继续加油吧!
posted @ 2020-11-10 22:50  无事发生  阅读(155)  评论(0编辑  收藏  举报