zoukankan      html  css  js  c++  java
  • 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,再将他们用空格分开导致的

    其他(感悟、思考等)

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

    参考资料

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/m1sty/p/9749866.html
Copyright © 2011-2022 走看看