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

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

課程:《Java軟件結構與數據結構》
班級: 1723
姓名: 譚鑫
學號:20172305
實驗教師:王志強
實驗日期:2018年9月25日
必修/選修: 必修html

1.實驗內容

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

2. 實驗過程及結果

  • 實驗(1)-(3)就是創建鏈表的過程,實驗(4)-(5)就是創建數組的過程,看起來兩部分都很簡單,由於有相關代碼和方法,不過在慢慢敲的過程當中才發現數組的插入和刪除沒有方法,還有冒泡排序和選擇排序的方法,此外還要實現IO流的問題,從文件中讀取數字。因此,不簡單...數組

  • 實驗一--鏈表練習(1):這部分相對簡單,對添加的元素進行輸出以及統計元素數目,只需加一個計數的整型變量以和實現添加到鏈表的方法就行,考慮到後面的編寫。進行類的編寫以及變量int nTanXin = 0
    • 結果:
  • 實驗一--鏈表練習(2):按索引值在鏈表上添加元素和刪除元素的方法,這部分在以前的測試內容上都涉及到相關內容,很容易就寫成了。比較頭疼的是讀文件內的數字,上學期學過的IO流到如今早都忘的差很少了。翻着上學期的相關代碼,看着註釋一步步撿起。
    • 結果:
  • 實驗一--鏈表練習(3):鏈表內元素按照冒泡排序方式進行一步步的輸出。上學期學過的兩個排序方法--選擇排序和插入排序,沒有冒泡排序。好在經過老師上課的講解,搞懂一些皮毛,經過老師推薦的網站加持勉強寫出來。
    • 結果:
  • 實驗一--數組練習(4):覺得這部分能夠的編寫能夠直接Ctrl + c和Ctrl + v就能夠了,可是找了半天沒有插入和刪除的相關代碼。插入的思路就是在插入位置後面的全部元素的索引值加一就好,刪除的思路就是在刪除元素的後面的全部元素的索引值減一就好。
    • 結果:
  • 實驗一--數組練習(5):對數組的內容進行選擇排序,藉助上學期Sorting代碼進行改寫,可是要實現每部操做都要輸出的內容,最簡單粗暴的方法就是在兩個for循環內穿插輸出語句,看輸出內容是否符合。
    • 結果:

3. 實驗過程當中遇到的問題和解決過程

  • 問題1:冒泡排序的代碼分析
  • 問題1的解決方案:冒泡排序就是重複地遍歷過要排序的鏈表,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。遍歷鏈表的工做是重複地進行直到沒有再須要交換,也就是說該鏈表已經排序完成。經過老師給出的網站,咱們能夠看到排序的每一次步驟就像是氣泡同樣從一側到另外一側。在頭結點不爲空的狀況下,添加兩個while循環,若是添加一個的話,從實現的角度來看只會出現一次排序過程,因此添加了兩個循環內容,條件看似同樣,可是在乎義上,內循環經過temp1所指數字與temp的下一個進行大小比較,不符合就進行相鄰元素的交換。而後往下執行輸出的代碼,而後在鏈表上繼續向下遍歷。直至跳出內循環,而後經過交換又從頭開始進行遍歷直至排序結束。爲了表示第幾回排序,特地添加一個單獨的計數變量,進行輸出次數。對於老師要求的在每一次顯示的過程當中也要顯示元素的數量,以爲在排序過程當中沒有元素樹木上的變化,就用變量nTanXin在每一次輸出的中顯示。
intNode temp1 = head, temp2 = null;
int num = 0;
while(temp1.next != temp2){
    while(temp1.next != temp2){
        if(temp1.next.getNumber() < temp1.getNumber()){
            int number = temp1.getNumber();
            temp1.setNumber(temp1.next.getNumber());
            temp1.next.setNumber(number);
        }
        temp1 = temp1.next;
        num++;
        intNode temp = head;
        System.out.print("第" + num + "次:(元素總數:" + nTanXin +")");
        while (temp != null) {
            System.out.print(temp.getNumber()+" ");
            temp = temp.next;
        }
        System.out.println();
    }
    temp2 = temp1;
    temp1 = head;
}

  • 問題2:IO流讀寫文件中內容
  • 問題2的解決方案:早在上學期就學過的東西,本學期運用的時候卻到處碰壁,好在碼雲上有相關代碼。從文件中讀取的代碼有了,可是如何建立文件,並往裏面寫入數字又是一個問題。BufferedReader對應的輸入緩存流BufferedOutputStream能夠將字符串以字節的形式寫到指定文件中。因此,在讀取文件以前我用BufferedOutputStream相關的方法進行寫入,緩存流算有個特色就是須要刷新一下,而我第一次運行就由於沒有刷新直接關閉致使文件建成可是內容沒有,找了好半天才發現缺乏刷新的相關代碼。
從文件中讀取內容:
File file = new File("sort.txt");
Reader reader = new FileReader(file);
BufferedReader bufferedreader = new BufferedReader(reader);
String string = bufferedreader.readLine();
往文件中寫入內容:
File file = new File("sort.txt");
OutputStream outputstream = new FileOutputStream(file);
BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(outputstream);
String str = "xxxxxxx";
bufferedoutputstream.write(str.getBytes());
bufferedoutputstream.flush();
bufferedoutputstream.close();
  • 問題3:關於數組的插入和刪除
  • 問題3的解決方案:數組的插入和刪除不一樣於鏈表的插入和刪除,鏈表的插入直接串在一塊兒就好,刪除就是摳出去刪除元素而後鏈接在一塊兒。可是,數組的插入和刪除須要進行移位,也考慮過環形數組在必定程度上能夠避免移位,不過也只是在頭尾進行添加和刪除的。因此,不可避免的進行移位,想在循環體運用是三行代碼進行一位一位的交換,但是調來調去都是在添加元素後面一成不變的都是同一個數。改了半天也沒有一點變化,就換爲暫時數組來解決了。暫時數組的商都就是插入或是刪除的索引值與總數目的差。換成用暫時數組就行了。
交換的代碼
temp = min;
min = num;
num = temp;

其餘

實驗一的五個實驗在座的過程當中發現對於上學期的只是仍是有不少不足的,在學習新知識的同時還要兼顧溫習舊知識,就像IO流的相關代碼,若是好好溫習的話就不會出現問題的。還有排序和插入、刪除的問題全都是邏輯問題,考慮的必定要周到全面纔不會到處碰壁。緩存

參考資料

相關文章
相關標籤/搜索