1. 程式人生 > >20172318 2018-2019-1 《程序設計與數據結構》實驗1報告

20172318 2018-2019-1 《程序設計與數據結構》實驗1報告

++ trac next res comm ret 遇到 輸入 ins

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,再將他們用空格分開導致的

其他(感悟、思考等)

這次實驗不僅需要用到鏈表和數組,還得用點時間復習一下文件輸入和讀取方面的知識,考驗我們掌握多方面知識的能力

參考資料

  • 《Java軟件結構與數據結構教程(第四版)》

20172318 2018-2019-1 《程序設計與數據結構》實驗1報告