20192303 2020-2021-1 《数据结构与面向对象程序设计》实验六报告

20192303 2020-2021-1 《数据结构与面向对象程序设计》实验六报告

课程:《数据结构与面向对象程序设计》
班级: 1923
姓名: 杨佳宁
学号: 20192303
实验教师:王志强老师
实验日期:2020年11月5日
必修/选修: 必修

一、实验内容

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 (你的名字)来表示元素的总数。

4.在android上实现实验(1)和(2)

5.在android平台上实现实验(3)

二、实验过程及结果

1、链表练习
输入学号及当前日期,并建立链表
(1)运行结果截图

(2)代码

编写运行代码

import java.util.Scanner;

public class shiyan6 {
    public static void main(String[] args) {
        int nYangJiaNing = 0,j=0;
        Scanner scan = new Scanner(System.in);
        System.out.println("Please input numbers(id and time)");
        String a = scan.nextLine();
        String[] b = a.split(" ");
        Linked[] list = new Linked[20];
        for(int i=0;i<b.length;i++)
        {
            int num=Integer.parseInt(b[i]);
            list[i] = new Linked(num);
            nYangJiaNing++;
        }
        Linked head = list[0];
        for(int i=0;i<nYangJiaNing;i++)
        {
            list[j].setNext(list[++j]);
        }
        System.out.println("\n"+"元素个数:"+nYangJiaNing);
        System.out.println(head.print(head));
    }
}

import java.util.Scanner;

public class Linked {
    public int element;
    public int a;
    public Linked next = null;
    public Linked temp,top;



    public Linked(int a) {
        this.a = a;
    }

    public String getnum(){
        String b = Integer.toString(a);
        return b;
    }

    public void setNext(Linked next){
        this.next=next;
    }

    public Linked getNext() {
        return next;
    }

    public void insert(Linked Head, int a, Linked insertnode){
        Linked temp = Head;
        if(a==0){
            insertnode.setNext(temp);
            //Head = insertnode;
        }
        else {
            for(int i=0;i<a;i++)
            {
                top = temp;
                temp = temp.getNext();
            }
            top.setNext(insertnode);
            insertnode.setNext(temp);
            temp=top;
        }
    }

    public void delete(Linked Head, int a){
        Linked temp = Head;
        int i=0;
        if(a==0)
        {
            ;
        }
        else {
            while(i!=a-1){
                temp = temp.getNext();
                i++;
            }
            top = temp;
            temp=temp.getNext();
            temp=temp.getNext();
            top.setNext(temp);
            temp=top;
        }
    }

    public void sort(Linked Head, int count){
        Linked temp = Head;
        Linked c,d;
        c = temp;
        d = c.getNext();
        for(int i = 0;i<count-1;i++)
        {
            c = temp;
            d = c.getNext();
            for(int j =0;j<count-i-1;j++)
            {
                if(c.getElement()<d.getElement())
                {
                    int t;
                    t = c.getElement();
                    c.setElement(d.getElement());
                    d.setElement(t);
                }
                System.out.println(Head.print(Head));
                System.out.println("个数"+count);
                c=c.getNext();
                d=d.getNext();
            }
        }
    }

    public int getElement()
    {
        return a;
    }

    public void setElement (int elem)
    {
        a=elem;
    }


    public String print(Linked head){
        String result="元素:";
        for(;;)
        {
            if(head.getNext()==null){
                result +=head.getnum();
                break;
            }
            else
            {
                result += head.getnum()+",";
                head=head.getNext();
            }
        }
        return result;
    }

}

【题目二】
在链表中实现插入、删除、输出
(1)运行结果截图

(2)代码

实现文件的写入和读取操作,链表的插入、删除功能

import java.io.*;
import java.util.Scanner;

public class shiyan624{
    public static void main(String[] args) throws IOException {
        int i,num;
        File file = new File("E:\\test", "test.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        Reader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);
        String content = bufferedReader.readLine();

        String[] ss1 = content.split(" ");
        Linked[] list1 = new Linked[2];
        for(i=0;i<ss1.length;i++)
        {
            num=Integer.parseInt(ss1[i]);
            list1[i] = new Linked(num);
        }

        int nYangJiaNing = 0,j=0;
        Scanner scan = new Scanner(System.in);
        System.out.println("Please input numbers(id and time)");
        String a = scan.nextLine();
        String[] b = a.split(" ");
        Linked[] list = new Linked[20];
        for(i=0;i<b.length;i++)
        {
            num=Integer.parseInt(b[i]);
            list[i] = new Linked(num);
            nYangJiaNing++;
        }
        Linked head = list[0];
        for(i=0;i<nYangJiaNing;i++)
        {
            list[j].setNext(list[++j]);
        }
        System.out.println("\n"+"元素个数:"+nYangJiaNing);
        System.out.println(head.print(head));

        int q=5;
        System.out.println("插入元素1:");
        head.insert(head,q-1,list1[0]);
        nYangJiaNing++;
        System.out.println(head.print(head));

        System.out.println("插入元素2:");
        head.insert(head,0,list1[1]);
        head = list1[1];
        nYangJiaNing++;
        System.out.println(head.print(head));

        System.out.println("删除元素1:");
        head.delete(head,5);
        System.out.println(head.print(head));
        nYangJiaNing--;
        System.out.println("元素个数:"+nYangJiaNing);


    }
}

【题目三】
使用冒泡排序对数值的大小进行排序
(1)运行结果截图

(2)代码

import java.io.*;
import java.util.Scanner;

public class shiyan63 {
    public static void main(String[] args) throws IOException {
        int i,num;
        File file = new File("E:\\test", "test.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        Reader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);
        String content = bufferedReader.readLine();

        String[] ss1 = content.split(" ");
        Linked[] list1 = new Linked[2];
        for(i=0;i<ss1.length;i++)
        {
            num=Integer.parseInt(ss1[i]);
            list1[i] = new Linked(num);
        }

        int nYangJiaNing = 0,j=0;
        Scanner scan = new Scanner(System.in);
        System.out.println("Please input numbers(id and time)");
        String a = scan.nextLine();
        String[] b = a.split(" ");
        Linked[] list = new Linked[20];
        for(i=0;i<b.length;i++)
        {
            num=Integer.parseInt(b[i]);
            list[i] = new Linked(num);
            nYangJiaNing ++;
        }
        Linked head = list[0];
        for(i=0;i<nYangJiaNing ;i++)
        {
            list[j].setNext(list[++j]);
        }
        System.out.println("\n"+"元素个数:"+nYangJiaNing );
        System.out.println(head.print(head));

        System.out.println("学号:20192303,冒泡排序");

        head.sort(head,nYangJiaNing );
        System.out.println(head.print(head));
        System.out.println("\n"+"元素个数:"+nYangJiaNing );




    }


}

三、实验过程中遇到的问题和解决过程

问题一:不清楚如何在android stdio中新建.txt文件
问题一解决方案:查询博客

四、心得体会

要提高自学能力,不要过分依赖于老师讲授知识的模式
要多学、多练,总结课上敲过的代码,弄清代码每部分的含义
遇到问题要及时解决,否则会越攒越多

四、参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)学习指导》

posted @ 2020-11-11 18:22  20192303杨佳宁  阅读(138)  评论(0编辑  收藏  举报