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

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

課程:《程序設計與數據結構(下)》
班級: 1723
姓名: 王志偉
學號:20172309
實驗教師:王志強老師
實驗日期:2018年9月27日
必修/選修: 必修html

1.實驗內容

實驗1.1:線性結構之鏈表:

  • 實驗要求:
  1. 經過鍵盤輸入一些整數,創建一個鏈表(1分);
  2. 這些數是你學號中依次取出的兩位數。 再加上今天的時間。
  3. 打印全部鏈表元素, 並輸出元素的總數。
  4. 在你的程序中,請用一個特殊變量名來紀錄元素的總數,變量名就是你的名字。
  5. 把程序簽入源代碼控制(git push)。

實驗1.2:線性結構之鏈表(拓展):

  • 實驗要求:
  1. 實現節點的插入,刪除,輸出操做(2分);
    2.從磁盤讀取一個文件, 這個文件有兩個數字。
  2. 從文件中讀入數字1, 插入到鏈表第 5 位,並打印全部數字,和元素的總數。 保留這個鏈表,繼續下面的操做。
  3. 從文件中讀入數字2, 插入到鏈表第 0 位,並打印全部數字,和元素的總數。 保留這個鏈表,並繼續下面的操做。
  4. 從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數。

實驗1.3:線性結構之鏈表之排序:

  • 實驗要求:1. 使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序(2分);
  1. 使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序(2分);
  2. 在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。

實驗1.4:線性結構之數組:

實驗1.5:線性結構之數組之拓展:

2.遇到的問題及解決方案:

2.1實驗01中遇到的問題:

  • 問題一:在設置節點與結點之間的鏈接時出現了問題,結果輸出鏈表時,只出現首尾結點。以後發現出現的問題是:直接使用了head =head.next正確的作法是:LinearNode temp = headtemp = temp.next
  • 問題二:在寫方法的時候,記得之前能夠在main函數中直接調用方法。可是不太記得怎麼寫這個方法,因此直接在main函數中直接調用了一下方法,以後說是否是靜態方法。因此知道了相關知識是靜態方法與實例方法,因此我去百度了一下相關知識:
    我的以爲這篇講的很好
    總的來講是:
方法 對象.方法 直接調用方法 調用靜態成員變量 調用實例成員變量
靜態方法 ×
實例方法 ×

作法: 因此我把靜態方法裏面用到的變量都加上了static,以後就成功了。O(∩_∩)O哈哈~java

2.2實驗02中遇到的問題:

  • 嗯,在進行插入是,插入的後一部分丟了!!!:
    出現這個問題的緣由是:當輸入node.next =temp;,node已經等於temp,temp.next = node.next.next;此時temp.next爲null,因此後面就沒了,解決方法就是使用兩個指針。node

  • 首先看到這個實驗以爲很簡單,可是我到了交做業的前兩天才知道,實驗要求的是在指定位置插入、刪除元素。而我寫的方法就像是棧裏面的push、與pop。o(╥﹏╥)o,以後我只好重寫,以後在寫的過程當中出現了這個問題:
    這個問題是,在插入的不顯示是什麼,而是地址!!!!出現這個問題後我表示很茫然,以後使用雙指針這個問題就沒有了(之前用了一個指針)····git

  • 修改後的代碼:
public void insert(int place,int element){
        LinearNode node1,node2;
        LinearNode temp = new LinearNode(element);

        if (place==0){
            temp.next = Head;
            Head =temp;
        }
        else {
            node1=Head;
            node2=Head.next;

            for (int i =0; i<place-1;i++){
                node1=node1.next;
                node2=node2.next;
            }
            if (node2!=null){
                temp.next=node2;
                node1.next=temp;
            }
            else {
                node1.next=temp;
            }
            nWangZhiwei++;
        }
    }

2.3實驗03中出現的問題及解決方案:

  • 剛剛看到這個實驗的時候感受沒什麼思路,由於根本不知道冒泡排序是什麼,以後學習了冒泡排序是什麼以後仍是很懵逼~~~~·由於不知道怎麼對鏈表進行排序,一開始的時候覺得要交換鏈表的位置,本身感受很麻煩。以後不知道何時忽然想到了能夠直接把一個String型值傳進去,再換成數組,再進行排序,這樣就會很簡單(由於之前作過,如今也是這麼作的!)
  • 其次就是很不理解這個條件在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。了,明明鏈表裏的元素個數都沒什麼變化,爲何還要每次都打印出來?
  • 說了這麼多直接寫方法吧:
for(int i =0;i < score.length - 1;i++){//使用冒泡排序
            for(int j = 0;j <  score.length - 1-i;j++){ // j開始等於0,
                if(score[j] < score[j+1]) {
                    int temp = score[j];
                    score[j] = score[j+1];
                    score[j+1] = temp;
                    for (int p =0 ;p<score.length;p++){
                        result+= score[p]+ " ";
                }
                    result+="鏈表中的數量:"+nWangZhiwei;//每一部完成後都打印出來,並加上鍊表中元素個數。
                result+="\n";
            }

2.4實驗04中出現的問題及解決方案:

  • 在作這個實驗的時候出現了一個問題:如圖

    就是在第四個位置插入元素,插入後原來的第四個元素丟了······
    這是代碼
    以後把第二個框的i改爲i-1 以後出現這個問題:
    ,緣由是越界!!
    以後仔細想一想才知道了緣由,本身的邏輯並無什麼問題只是應該這樣改:
    (出現越界的緣由是當插入第一個元素時,它會進入到 else temp[i]=array[i-1]; 此時i=0,i-1=-1。因此越界!!1)

2.5 實驗05能夠直接使用實驗03的方法,毫無違和感!因此沒錯誤~

3. 收穫感悟


作這個實驗的感覺就是首先得把基礎知識搞懂,上課的時候必定要認真聽老師講,否則課下得付出兩三倍的時間去消磨它!其次,就是實驗的題目得看請,這五個小實驗我居然有兩次把方法看錯了,害得我後面都重寫了,浪費了很多時間。嗯,就這麼多,就這樣吧。加油!
數組

4. 參考文獻

相關文章
相關標籤/搜索