• 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,再将他们用空格分开导致的

    其他(感悟、思考等)

    这次实验不仅需要用到链表和数组,还得用点时间复习一下文件输入和读取方面的知识,考验我们掌握多方面知识的能力

    参考资料

  • 相关阅读:
    微服务与SOA的区别
    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
    pika常见问题解答(FAQ)
    大容量类Redis存储--Pika介绍
    Beego开启热升级
    Beego框架的一条神秘日志引发的思考
    Redis的最常被问到知识点总结
    go语言的defer语句
    GO-REDIS的一些高级用法
    go使用go-redis操作redis 连接类型,pipline, 发布订阅
  • 原文地址:https://www.cnblogs.com/m1sty/p/9749866.html
Copyright © 2020-2023  润新知