選修/必修:必修php
實驗1
鏈表練習,要求實現下列功能:java
(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
作完這一步,把你的程序簽入源代碼控制(git push)。web
(2)實現節點插入、刪除、輸出操做(2分,3個知識點根據實際狀況酌情扣分);數組
繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器;服務器
從磁盤讀取一個文件, 這個文件有兩個數字。 從文件中讀入數字1, 插入到鏈表第 5 位,並打印全部數字,和元素的總數。 保留這個鏈表,繼續下面的操做。 從文件中讀入數字2, 插入到鏈表第 0 位,並打印全部數字,和元素的總數。 保留這個鏈表,並繼續下面的操做。 從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數。
簽入全部代碼。數據結構
(3)使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序(2分);
若是你學號是單數, 選擇冒泡排序, 不然選擇選擇排序。
在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。函數
在(2)獲得的程序中繼續擴展, 用同一個程序文件,寫不一樣的函數來實現這個功能。 仍然用 nZhangSan (你的名字)來表示元素的總數。測試
(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. 並打印全部數字和元素的總數。
簽入全部代碼。
在(2)獲得的程序中繼續擴展, 用同一個程序文件,寫不一樣的函數來實現這個功能。 仍然用 nZhangSan (你的名字)來表示元素的總數。
這是聲明的Scannner類以及使用Scanner類進行讀取的截圖。
這是使用StringTokenier類進行分割以及循環插入的截圖。
這是實現尾插法的截圖。具體思路爲先創造一個類這個類的構造函數中聲明瞭一個空的引用變量next以及一個int型變量的空間。而後使用指針指向下一個被插入的節點,以此往復。這個類的截圖我也會在下面進行給出。
這是尾插法的截圖
這是結點類的截圖
這是實現打印的方法的截圖。這個具體的就不想解釋,但仍是要說一說,主要就是經過一個while循環,在節點不爲空時將其中儲存的int性變量提取出來而後,儲存在一個String型變量中最後進行輸出。
這是實現統計元素總量的方法,主要就是經過定義一個變量對頭結點進行引用,而後經過循環遍歷整個鏈表,同時在循環中對nDuanZhixaun變量進行自加運算,從而達到統計元素總量的目的。
測試類代碼截圖以及測試結果截圖。
按索引插入
主要思路:首先考慮一下按索引插入的狀況共分三種:從頭插入,從尾插入,還有從中間插入。
用if條件語句判斷若是首節點爲空,在頭節點插入,直接令頭結點爲傳入數據的節點。若是頭結點不爲空,就令新引入的節點的指針指向頭結點,而後將引入的節點聲明爲頭結點。從中間插入,我則使用了兩個變量,一個引用頭結點,另外一個引用頭結點的下一個節點。而後使用for循環,令兩個節點進行遍歷至輸入索引對應的節點處。兩個節點分別表示帶插入節點的先後節點。而後用前節點的指針指向新插入的節點,用新插入的節點的指針指向後節點。
上截圖
按索引刪除
主要思路:首先考慮到了首先要找到要刪除的節點,經過循環進行遍歷一樣先定義先後節點等到找到要刪除的節點時,而後使用前節點的指針指向後節點。
上截圖
按搜索元素刪除
主要思路:經過遍歷查找傳入元素所對應的節點同時遍歷先後節點,而後將前節點的指針指向後節點。
上截圖
文件讀取
主要思路:這個我能夠詳細解釋一下。首先聲明一個File形變量,並向構造函數中傳入須要讀取文件的絕對路徑(即從磁盤到文件夾到文件),以得到文件的位置,而後使用Reader類讀取文件內容,而後使用BufferReader將文件內容存放在緩衝區。最後使用BufferReader類的readLine方法讀取文件。
上截圖
測試結果截圖
實驗三
進行排序因爲個人學號是20172304,顯然這是一個偶數,顯然交給個人任務是選擇排序,選擇排序的方法我有點生疏就上網上查閱了一下,爲了證實本身已經懂了,決定要詳細的說明一下,首先要作嵌套循環,外循環遍歷整個鏈表,內循環,從外循環所在的節點,遍歷整個鏈表,並對節點儲存的數據進行比較,若是大於外循環所在的節點,則交換數據之。因爲要求進行輸出元素總數,因此我在每次內循環結束時都調用了一次鏈表的打印方法。
上截圖
測試結果截圖
按索引插入
主要思路:首先在方法內定義一個數組。而後將索引處的數據以及索引後數組內的數據經過循環存入新數組中,最後經過循環將新數組內的元素添加到原有的數組中。固然首先要檢查數組是否已滿,若是已滿就要進行擴容。我寫了一個擴容的方法。就是定義一個新數組是原有數組的容量的兩倍。而後經過循環將原有數組的元素複製到新數組對應的位置上。
上截圖
這是索引插入的截圖
擴容的方法截圖
按索引刪除
主要思路:經過循環遍歷到索引對應的數組的位置所儲存的數值,而後將索引後的元素經過循環複製到新建立的數組對應位置,而後經過循環將新建立的數組的元素複製到原數組中。
上截圖
搜索元素進行刪除
主要思路:作這個的時候我就有點偷懶了,經過遍歷找到傳入元素所在的索引值,而後調用以前寫的按照索引刪除的方法,你懂的‘’‘’‘’‘。
上截圖
測試結果截圖
實驗五
進行選擇排序,原理和鏈表類似。一樣是進行嵌套循環,而後外循環對整個數組有元素的部分進行遍歷,而後內循環在外循環索引的基礎上進行循環,遇到比外循環索引對應的元素小的元素就進行交換。同時在進行內循環一次是就將整個數組進行輸出。
上截圖
測試結果截圖
問題一:
在實驗一中,有一步是將用戶傳進來的數據經過StringTokenizer類進行分割。這時要進行一步操做就是將數據存入鏈表節點中,以下圖,節點中儲存的數據類型是int型
然而,用StringTokenizer分割出來的數據是實打實的String類型,因此一開始想用int來進行強轉。可是報錯。
問題一解決方案:後來諮詢了同窗
XX:「String轉int怎麼轉來着?」
XXX:「好像是用Integer什麼來着。」
感謝萬能的IDEA,當我輸入"Integer."就當即顯示出了「paseInt(String s)」的字樣,而後就瓜熟蒂落的成功了。只要進行一次裝箱,拆箱的操做,藉助中間媒介,就能夠將String轉Int了。
問題二解決方案
這個,說了也許你可能不信,當時我進行了以下操做,那時並無多想。
第一步:在java中右擊新建立的文本文件。
而後點擊「Copy Path」,而後複製到Flie類的構造函數的括號裏。
而後我就知道了,這一步須要的是絕對路徑。
還有一些問題因爲當時忘記截圖,因此準備採用口述的方式。
問題三:在進行數組的插入方法時,一開始個人腦子秀逗了,想的是用數組自己進行自循環,即相似於
for(tnt b=index;b<nDuanZhixaun//數組的元素數量 ;b++) a[b+1]=a[b]
這段代碼來解決,可是這個方法過於簡單粗暴,回饋給個人就是在索引值後面,會有一堆重複 的數字,當時我還記得那些數字是一堆「5」。
int []c=new int[a.length]; int d=0; int f=0; for(int b=index;b<nDuanZhixuan;b++) { c[b]=a[b]; d++; }
這樣我成功的解決了這個問題。
本次實驗是對前面所學知識的一個總結,經過此次實驗,我對曾經學過的知識有了更深一步的瞭解同時對一些類的應用也更加熟悉,同時也弄懂了一些過去不是很懂的知識點可謂是受益不淺。正所謂「溫故而知新,能夠爲師矣」正是此理。