20172319 實驗一《線性結構》實驗報告

20172319 2018.09.30-10.07

實驗一《線性結構》 實驗報告

課程名稱:《程序設計與數據結構》  
學生班級:1723班  
學生姓名:唐才銘  
學生學號:20172319 
實驗教師:王志強老師
課程助教:張師瑜學姐、張之睿學長
實驗時間:2018年09月30日——2018年10月08日
必修/選修:必修

目錄


實驗內容

  1. 鏈表練習,要求實現如下功能: 經過鍵盤輸入一些整數,創建一個鏈表;這些數是你學號中依次取出的兩位數,再加上今天的時間;打印全部鏈表元素, 並輸出元素的總數。
  2. 鏈表練習,要求實現下列功能: 實現節點插入、刪除、輸出操做;繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器。
  3. 鏈表練習,要求實現下列功能: 使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序。
  4. 數組練習,要求實現下列功能: 經過鍵盤輸入一些整數,創建一個鏈表;這些數是你學號中依次取出的兩位數,再加上今天的時間;打印全部數組元素, 並輸出元素的總數;實現節點插入、刪除、輸出操做;繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器。
  5. 數組練習,要求實現下列功能: 使用冒泡排序法或者選擇排序法根據數值大小對數組進行排序。

返回目錄html


實驗要求

  1. 完成藍墨雲上與實驗一《線性結構》相關的活動,及時提交代碼運行截圖和碼雲Git連接,截圖要有學號水印,不然會扣分。
  2. 完成實驗、撰寫實驗報告,實驗報告以博客方式發表在博客園,注意實驗報告重點是運行結果,遇到的問題(工具查找,安裝,使用,程序的編輯,調試,運行等)、解決辦法(空洞的方法如「查網絡」、「問同窗」、「看書」等一概得0分)以及分析(從中能夠獲得什麼啓示,有什麼收穫,教訓等)。報告能夠參考範飛龍老師的指導
  3. 嚴禁抄襲,有該行爲者實驗成績歸零,並附加其餘懲罰措施。

返回目錄前端


實驗步驟

  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)。
  2. 鏈表練習,要求實現如下功能:
    實現節點插入、刪除、輸出操做(2分,3個知識點根據實際狀況酌情扣分);
    繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器;
    從磁盤讀取一個文件, 這個文件有兩個數字。
    從文件中讀入數字1, 插入到鏈表第 5 位,並打印全部數字,和元素的總數。 保留這個鏈表,繼續下面的操做。
    從文件中讀入數字2, 插入到鏈表第 0 位,並打印全部數字,和元素的總數。 保留這個鏈表,並繼續下面的操做。
    從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數。
    簽入全部代碼。
  3. 鏈表練習,要求實現如下功能:
    使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序(2分);
    若是你學號是單數, 選擇冒泡排序, 不然選擇選擇排序。
    在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。
    在(2)獲得的程序中繼續擴展, 用同一個程序文件,寫不一樣的函數來實現這個功能。 仍然用 nZhangSan (你的名字)來表示元素的總數。
  4. 數組練習,要求實現下列功能:
    經過鍵盤輸入一些整數,創建一個鏈表(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分,3個知識點根據實際狀況酌情扣分);
    繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器;
    從磁盤讀取一個文件, 這個文件有兩個數字。
    從文件中讀入數字1, 插入到數組第 5 位,並打印全部數字,和元素的總數。 保留這個數組,繼續下面的操做。
    從文件中讀入數字2, 插入到數組第 0 位,並打印全部數字,和元素的總數。 保留這個數組,並繼續下面的操做。
    從數組中刪除剛纔的數字1. 並打印全部數字和元素的總數。
    簽入全部代碼。
  5. 數組練習,要求實現下列功能:
    使用冒泡排序法或者選擇排序法根據數值大小對數組進行排序(2分);
    若是你學號是單數, 選擇選擇排序, 不然選擇冒泡排序。
    在排序的每個輪次中, 打印元素的總數,和目前數組的全部元素。
    在(2)獲得的程序中繼續擴展, 用同一個程序文件,寫不一樣的函數來實現這個功能。 仍然用 nZhangSan (你的名字)來表示元素的總數。

前期準備:

  1. 預先下載安裝好IDEA 。

需求分析:

  1. 須要分清數組與鏈表的區別;
  2. 須要理解數組及鏈表實現相關線性表操做的原理及須要注意的地方;
  3. 須要熟練運用數組去實現相關線性表;
  4. 須要熟練運用鏈表去實現相關線性表。

返回目錄java


代碼實現及解釋

本次實驗一共分爲五個提交點:

  • 線性結構之鏈表(1):
  • 根據本身的需求,寫好本身所須要的鏈表節點類鏈表類
  • 在鏈表類裏寫了add方法用於往鏈表添加元素
public void add(int number){
        Linked_list_node Node = new Linked_list_node(number);

        if (this.head==null){
            this.head = Node;
        }
        else {
            this.head.addLinked_list_node(Node);
        }
    }
  • 具體的代碼實現:
System.out.println("實驗的第一部分:");
        System.out.print("Enter some integers and create a linked list :   ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] strings = input.split(" ");

        Stack<String> Break_up = new Stack<String>();
        for (int i = strings.length; i > 0 ; i--){
            Break_up.push(strings[i-1]);
        }
        System.out.print("The contents of the stack are :   ");
        System.out.println(Break_up);
        Linked_list linked_list = new Linked_list();
        linked_list.add(0);
        while (!Break_up.empty()) {
            int tempelement = Integer.parseInt(Break_up.pop());
            linked_list.add(tempelement);
        }
        int ntangcaiming = 0;
        ntangcaiming = linked_list.getCount();
        System.out.print("The contents of the queue are :   ");
        System.out.println(linked_list);
        System.out.print("The number of linked elements is :   ");
        System.out.println(ntangcaiming);
  • 運行結果截圖:
    node

  • 線性結構之鏈表(2)
  • 根據須要,咱們須要寫插入和刪除的方法:
  • 爲了更好地實現需求,咱們在鏈表前端放入了一個取值爲0的節點linked_list.add(0);,以便於在任何地方都能實現插入刪除,而打印時將其隱藏。git

public void insert(int index,Linked_list_node node){
        if(index < 1||index > getCount() + 1){
            System.out.println("Wrong position, cannot insert");
            return;
        }
        int length = 1;
        Linked_list_node temp = head;
        while(head.next != null)
        {
            if(index == length++){
                node.next = temp.next;
                temp.next = node;
                return;
            }
            temp = temp.next;
        }
    }

    public void delete(int index){
        if(index < 1 || index > getCount()){
            System.out.println("Wrong position, cannot be deleted");
            return;
        }
        int length=1;
        Linked_list_node temp = head;
        while(temp.next != null){
            if(index == length++){
                temp.next = temp.next.next;
                return;
            }
            temp = temp.next;
        }
    }
  • 根據之前所寫IO進行文件的建立及讀取;
  • 本次提交點相關代碼以下:
System.out.println("實驗的第二部分:");
        try {
            File file = new File("D:\\huawei\\Javawindows文件","EXP1-First semester of sophomore.txt");

            InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(reader);
            int[] file_word_temp = new int[2];
            String[] file_word = bufferedReader.readLine().split(" ");
            file_word_temp[0] = Integer.parseInt(file_word[0]);
            file_word_temp[1] = Integer.parseInt(file_word[1]);

            Linked_list_node Node_insert1 = new Linked_list_node(file_word_temp[0]);
            Linked_list_node Node_insert2 = new Linked_list_node(file_word_temp[1]);

            linked_list.insert(5,Node_insert1);
            System.out.print("The list after inserting 1 at the fifth position is :   ");
            System.out.println(linked_list);
            System.out.print("The number of linked elements is :   ");
            ntangcaiming = linked_list.getCount();
            System.out.println(ntangcaiming);
            linked_list.insert(1,Node_insert2);
            System.out.print("The list after inserting 2 at the first position is :   ");
            System.out.println(linked_list);
            ntangcaiming = linked_list.getCount();
            System.out.print("The number of linked elements is :   ");
            System.out.println(ntangcaiming);
            System.out.print("The list after deleting the inserted number 1 is :   ");
            linked_list.delete(6);
            System.out.println(linked_list);
            ntangcaiming = linked_list.getCount();
            System.out.print("The number of linked elements is :   ");
            System.out.println(ntangcaiming);
  • 運行結果截圖:
    windows

  • 線性結構之鏈表(2)數組

  • 根據要求,咱們所選擇的是冒泡排序法,依據要求打印排序過程(這裏只打印元素交換的時候):
  • 冒泡代碼實現以下(有刪減):服務器

public void Bubble_sort(Linked_list_node Head,Linked_list linked_list){


        Linked_list_node temp = null, tail = null;
        
        temp = head;

        int count=1;
        while(temp.next != tail){
            while(temp.next != tail){
                if(temp.number > temp.next.number){
                    int temp_number = temp.number;
                    temp.number = temp.next.number;
                    temp.next.number = temp_number;
                    System.out.print("The list sorted by the "+ count + " truly bubbling sort is :  ");
                    System.out.println(linked_list);
                    System.out.print("The number of linked elements is :  " + linked_list.getCount() + "\n" );

                    count++;
                }
                temp = temp.next;

            }
            tail = temp;
            temp = head;
        }
    }
  • 相關提交點的代碼:
System.out.println("實驗的第三部分:");
            System.out.println("Print only the rounds that have implemented the element exchange:");

            linked_list.Bubble_sort(linked_list.head,linked_list);
    }
        catch (IOException E){
        System.out.println("錯誤,指定路徑不存在");
    }
  • 運行結果截圖(僅僅展現部分截圖):
    網絡

  • 線性結構之數組(4)
  • 根據須要編寫本身的數組類
  • 本次提交點相關代碼以下:數據結構

System.out.println("實驗的第一部分:");
        System.out.print("Enter some integers and create a linked list:");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();

        int ntangcaiming = 0 ;
        String[] temp_MyArray = input.split(" ");
        Array MyArray = new Array(temp_MyArray);

        System.out.print("The elements in the array are:   ");
        System.out.println(MyArray);
        System.out.print("The number of elements in the array is:  ");
        ntangcaiming = MyArray.size();
        System.out.println(ntangcaiming);

        System.out.println("實驗的第二部分:");
        try {
            File file = new File("D:\\huawei\\Javawindows文件","EXP1-First semester of sophomore.txt");
            InputStreamReader reader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(reader);
            int[] file_word_temp = new int[2];
            String[] file_word = bufferedReader.readLine().split(" ");
            file_word_temp[0] = Integer.parseInt(file_word[0]);
            file_word_temp[1] = Integer.parseInt(file_word[1]);


            System.out.print("The array after 1 is inserted in position 5 is :   ");
            Array MyArray1 = new Array(MyArray.Array_Insert(4, String.valueOf(file_word_temp[0]))) ;
            System.out.println(MyArray1);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray1.size();
            System.out.println(ntangcaiming);


            System.out.print("The list after inserting 2 at the first position is :   ");

            Array MyArray2 = new Array(MyArray1.Array_Insert(0, String.valueOf(file_word_temp[1])));
            System.out.println(MyArray2);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray2.size();
            System.out.println(ntangcaiming);

            System.out.print("The array after deleting the inserted number 1 is :   ");

            Array MyArray3 = new Array(MyArray2.Array_Delete(5));
            System.out.println(MyArray3);
            System.out.print("The number of elements in the array is:  ");
            ntangcaiming = MyArray3.size();
            System.out.println(ntangcaiming);
  • 運行結果截圖:

  • 線性結構之數組(5)
  • 按照要求,我選擇的是選擇排序法:
  • 相關代碼以下:
public String Array_Selection_sort() {
        int[] temp_MyArray = new int[MyArray.length];
        for (int i = 0 ; i < MyArray.length; i ++){
            temp_MyArray[i] = Integer.parseInt(MyArray[i]);
        }

        String result = "";
        for (int i = 0; i < temp_MyArray.length - 1 ; i++){
            for (int j = i + 1;j < temp_MyArray.length; j++ ){
                if (temp_MyArray[i]<temp_MyArray[j]){
                    int temp = temp_MyArray[i];
                    temp_MyArray[i] = temp_MyArray[j];
                    temp_MyArray[j] = temp;
                    String every = "";
                    for (int data : temp_MyArray){
                        every += data + " ";
                    }
                    result += "The list sorted by the SelectSorting is :  " + every + "\n" +
                            "The number of elements in the array is:  :" + MyArray.length + "\n";
                }
            }
        }
        return result;
    }
  • 本次提交點的相關代碼(有刪減):
System.out.println("實驗的第三部分:");
            System.out.print(MyArray3.Array_Selection_sort());
  • 運行結果截圖(僅部分)

返回目錄


測試過程及遇到的問題

  • 問題1:Git至碼雲
  • 解決:起初,在網絡上找了個教程(張昊然同窗也發過,但沒注意看......),按着教程走,結果:


    而後針對他們瘋狂地找解決方法例如:git pull origin master --allow-unrelated-histories
    但依舊無效,這鬼東西整了我一個星期,最後,張昊然同窗說多是建立的項目的緣由,而後刪了項目重建,

    語言依舊是Android,其餘兩個無所謂,但別勾選使用remade初始化項目,最終獲得了:

  • 問題2:刪除APP
  • 解決:若是個人APP被我整得Android studio都認不出來了(n!的問題,多到沒法一一解決),我想刪掉怎麼辦?
  • 然而它並不能簡單地經過右鍵刪除:

    經過了解知道:這是一種對於APP的保護機制,要想刪除,只能經過:


    然而,這僅僅是刪除在Android studio上的,要想完全刪除,還需去相應文件存儲的硬盤裏刪掉相應文件。

返回目錄


分析總結

  • 這是一個全新的內容,與咱們原來所學的相關,且更深一層並更接近了咱們的生活,雖然項目的開發過程的某些代碼的含義還不能徹底明白,但在之後的過程當中會逐一認識、瞭解並掌握。

返回目錄


代碼託管

返回目錄


參考資料

Intellj IDEA 簡易教程
Android開發簡易教程
Android studio項目上傳至oschina(碼雲)教程

返回目錄

相關文章
相關標籤/搜索