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


    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)。

    1.程序代码

    import java.util.Scanner;
    
    public class ex61 {
    public static void main(String[] args) {
        int[] x = new int[11];
        Scanner sc = new Scanner(System.in);
        int y = 0;
        for (y = 0; y <= 10; y++) {
            x[y] = sc.nextInt();
        }
        sc.close();
        ex61zhulei a = new ex61zhulei(x[0]);
        ex61zhulei b = new ex61zhulei(x[1]);
        ex61zhulei c = new ex61zhulei(x[2]);
        ex61zhulei d = new ex61zhulei(x[3]);
        ex61zhulei e = new ex61zhulei(x[4]);
        ex61zhulei f = new ex61zhulei(x[5]);
        ex61zhulei g = new ex61zhulei(x[6]);
        ex61zhulei h = new ex61zhulei(x[7]);
        ex61zhulei i = new ex61zhulei(x[8]);
        ex61zhulei j = new ex61zhulei(x[9]);
        ex61zhulei k = new ex61zhulei(x[10]);
    
        ex61zhulei head = a;
        a.next = b;
        b.next = c;
        c.next = d;
        d.next = e;
        e.next = f;
        f.next = g;
        g.next = h;
        h.next = i;
        i.next = j;
        j.next = k;
    
        ex61.Printlinkedlist(a);
    }
    
    public static void Printlinkedlist(ex61zhulei head) {
        ex61zhulei point = head;
        int Yukunyang = 0;
        while(point != null){
            System.out.println("number:"+point.number);
            point = point.next;
            Yukunyang++;
        }
        System.out.println("Yukunyang:"+Yukunyang);
    }
    

    }

    public class ex61zhulei {
    protected int number;
    protected ex61zhulei next = null;
    
    public ex61zhulei(int number) {
        this.number = number;
    }
    
    
    @Override
    public String toString() {
        return "ex61zhulei{" +
                "number=" + number +
                ", next=" + next +
                '}';
    }
    

    }

    2.运行截图



    2.链表练习,要求实现下列功能:

    实现节点插入、删除、输出操作;

    继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;

    从磁盘读取一个文件, 这个文件有两个数字。

    从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。

    从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。

    从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

    3.链表练习,要求实现下列功能:

    使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;

    如果你学号是单数, 选择冒泡排序, 否则选择选择排序。

    在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。

    在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。

    我的(2)和(3)的功能在同一个程序中实现

    1.程序代码

    Main

    import java.io.*;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    public class Main {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        System.out.println("Please input your studentnumber and the time (eg: 20,19,23,14,20,20,11,8,14,4,30)");
        String sen = scan.nextLine();
        int yky = 0, number2;
        int[] number = new int[100];//定义数组
        String[] numbers = sen.split(",");//用,分割字符串
    
        //将字符串转化为int型并且放入数组
        for (int m = 0; m < numbers.length; m++) {
            number[m] = Integer.parseInt(numbers[m]);
        }
    
        //实例化并且定义Head的表头
        Link Head = new Link(number[0]);
    
        //形成数组链表
        int nYukunyang = 1;
        for (int a = 1; a < numbers.length; a++) {
            Link node = new Link(number[a]);
            Head.BackLink(Head, node);
            nYukunyang++;
        }
    
        //创建文件
        File file = new File("LinkNum.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        Writer writer1 = new FileWriter(file);
        writer1.write("2019 ");
        writer1.flush();
    
    
        writer1.append("2330");
        writer1.flush();
    
    
        Reader reader = new FileReader(file);
        BufferedReader bufferedreader = new BufferedReader(reader);
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedreader.readLine());
        number2 = stringTokenizer.countTokens();
        int[] ints = new int[number2];
        while (stringTokenizer.hasMoreTokens()) {
            ints[yky] = Integer.parseInt(stringTokenizer.nextToken());
            yky++;
        }
    
        Link q = new Link(ints[0]);
        Link p = new Link(ints[1]);
    
        System.out.println("The list is: ");
        Head.toString();
        System.out.println();
        System.out.println("There are " + nYukunyang + " numbers in the list");
    
        Link Head1= Link.HeadInsert(Head, p);
        System.out.println("There are " + nYukunyang++ + " numbers in the list");
        System.out.println();
    
    
        Link.MidInsert(Head1, q, 5);
        System.out.println("There are " + nYukunyang++ + " numbers in the list");
        System.out.println();
    
        Link.DeleteLink(Head1, 5);
        System.out.println("There are " + nYukunyang-- + " numbers in the list");
        System.out.println();
    
        Link.SelectionSort(Head1);
        System.out.println("There are " + nYukunyang + " numbers in the list");
        System.out.println();
    }
    

    }

    public class Link {
    protected int number;
    protected Link next = null;
    
    public Link(int number){
        this.number = number;
    }
    
    public String toString()
    {
        Link node =this;
        while (node!=null) {
            System.out.print(node.number+" ");
            node = node.next;
        }
        System.out.println();
        return null;
    }
    
    //尾插法
    public void BackLink(Link Head,Link node1){
        Link temp=Head;
        while(temp.next!=null)
            temp=temp.next;
    
        temp.next=node1;
    }
    
    //头插法
    public static Link HeadInsert(Link Head,Link node){
        System.out.println("The list headinserted is: ");
        node.next=Head;
        Head=node;
        Head.toString();
        return Head;
    }
    
    //中间插入
    public  static void MidInsert(Link Head,Link node1,int place){
        System.out.println("The list midinserted is: ");
        Link temp= Head;
    
        int a=1;
        while(a<4){
            temp= temp.next;
            a++;
        }
        node1.next=temp.next;
        temp.next=node1;
        Head.toString();
    
    }
    
    //删除
    public static void DeleteLink(Link Head, int t) {//删除可以指向他的下一个元素
        System.out.println("The list deleted is: ");
        Link temp = Head;
        Link temp1=Head;
        Link node=Head;
        for (int i = 0; i < t-2; i++) {
            temp1 = temp1.next;
        }
        temp1.next = temp1.next.next;
        while (temp1!=null) {
            temp1 = temp1.next;
        }
        Head.toString();
    }
    
    //选择排序
    public static void SelectionSort(Link Head) {
        System.out.println("The list after selectiondort is: ");
        int temp;
        Link node = Head;
        while (node != null) {
            Link reNode = node.next;
            while (reNode != null) {
                if (reNode.number > node.number) {
                    temp = reNode.number;
                    reNode.number = node.number;
                    node.number = temp;
                }
                reNode = reNode.next;
            }
            node = node.next;
        }
        Head.toString();
    }
    

    }

    2.运行截图



    实验问题解决和心得体会

    在做第一个任务时,遇到的问题是输入11个数之后无法输出任何内容,后来加上了ex61.Printlinkedlist(a),将代码前后两部分连起来,正常输出了结果。任务三中我需要使用选择排序法,但是打一下学C语言时我只会冒泡排序法。之后我借助百度和同学的帮助学会了选择排序法。我对栈和链表的使用还十分低级,比如任务一需要输入11个数,我就重复了11次.next,如果想要更简捷应该使用数组,这些都是我需要学习掌握的地方。不能只满足于实现功能,应该追求更加高效简捷地实现功能。

  • 相关阅读:
    编译错误error:&nbsp;invalid&amp;nbsp…
    移植OK6410&#039;S&nbsp;dm9000ae…
    JavaScript 正则表达式-严格匹配
    JavaScript indexOf() 方法
    JavaScript splice() 方法
    Css文字效果
    知识点-语句
    知识点—变量、运算符(表达式)
    WPF RichTextBox相关总结
    WPF调用图片路径,或资源图片
  • 原文地址:https://www.cnblogs.com/yukunyang/p/13961386.html
Copyright © 2020-2023  润新知