(1)鏈表練習,要求實現下列功能:經過鍵盤輸入一些整數,創建一個鏈表,這些數是你學號中依次取出的兩位數, 再加上今天的時間。打印全部鏈表元素, 並輸出元素的總數。php
(2)鏈表練習,要求實現下列功能:實現節點插入、刪除、輸出操做,繼續你上一個程序, 擴展它的功能,每作完一個新功能,或者寫了超過10行新代碼,就簽入代碼,提交到源代碼服務器。java
(3)鏈表練習,要求實現下列功能:使用插入排序法或者選擇排序法根據數值大小對鏈表進行排序。在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。web
(4)數組練習,要求實現下列功能:(1)經過鍵盤輸入一些整數,創建一個數組;(2)實現節點插入、刪除、輸出操做。簽入全部代碼。windows
(5)數組練習,要求實現下列功能:使用插入排序法或者選擇排序法根據數值大小對數組進行排序,在排序的每個輪次中, 打印元素的總數,和目前數組的全部元素。數組
這裏是要求咱們創建一個整數的鏈表,並將它們打印出來,同時要記錄元素的總數。
咱們首先創建一個節點類,這是創建鏈表的一個前提基礎,在這個類裏要設置好兩個變量,一個是指向下一數字的節點next;另外一個就是咱們在鏈表存儲的整數。採用方法重載給出兩種構造函數。服務器
public class LinearNode<T> { public int number; public LinearNode next; public LinearNode() { next = null; } public LinearNode(int number) { this.number = number; next = null; } }
接下來即是開始創建鏈表。數據結構
實驗結果截圖:
函數
首先咱們要進行從文件中讀取數字這一操做,這裏首先要建立File對象,採用輸出流進行讀取,這裏是以字符爲單位讀取文件內容,一次讀一個字節,而後將讀取出的字符轉換爲對應數字,並將它們儲存在一個int型數組中。this
File file = new File("D:\\JAVA程序設計\\Java-pro\\text.txt"); Reader reader = null; try { System.out.println("以字符爲單位讀取文件內容,一次讀一個字節:"); reader = new InputStreamReader(new FileInputStream(file)); int tempchar; int[] array = new int[2]; int x = 0; while ((tempchar = reader.read()) != -1) { if (((char) tempchar) != '\r'&&((char) tempchar) != '\n') { { array[x]=tempchar-(int)('0'); System.out.print((array[x])+" "); x++; } } } reader.close(); } catch (Exception e) { e.printStackTrace(); }
而後咱們進行如下操做:
1.從文件中讀入數字1, 插入到鏈表第 5 位,並打印全部數字,和元素的總數。 保留這個鏈表,繼續下面的操做。.net
//將數字1插入到鏈表第5位,並打印全部數字,和元素的總數 int index = 4; System.out.println(); LinearNode<Integer> current = linearNode; LinearNode linearNode1 = new LinearNode(array[0]); for (int y= 0;y<index-1;y++) { current = current.next; } linearNode1.next = current.next; current.next = linearNode1; nHouZeYang++; result = ""; i = 0; integerLinearNode = linearNode; while (i<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("插入數字1後全部鏈表元素爲:"+result); System.out.println("插入數字1後元素個數爲:"+nHouZeYang);
2.從文件中讀入數字2, 插入到鏈表第 0 位,並打印全部數字,和元素的總數。 保留這個鏈表,並繼續下面的操做。
// 將將數字2插入到鏈表第0位,並打印全部數字,和元素的總數 LinearNode linearNode2 = new LinearNode(array[1]); System.out.println(array[1]); current = linearNode; linearNode = linearNode2; linearNode.next = current; nHouZeYang++; result = ""; i = 0; integerLinearNode = linearNode; while (i<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("插入數字2後全部鏈表元素爲:"+result); System.out.println("插入數字2後元素個數爲:"+nHouZeYang);
3.從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數
//從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數 current = linearNode ; while (current.next!=linearNode1) { current = current.next; } current.next = current.next.next; nHouZeYang--; result = ""; i = 0; integerLinearNode = linearNode; while (i<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("刪除數字1後全部鏈表元素爲:"+result); System.out.println("刪除數字1後元素個數爲:"+nHouZeYang);
實驗結果截圖:
使用選擇排序法對鏈表中元素進行排序,咱們首先看如下選擇排序法如何實現.
int min; T temp; for (int index = 0; index < data.length-1; index++) { min = index; for (int scan = index+1; scan < data.length; scan++) if (data[scan].compareTo(data[min]) < 0) min = scan; // Swap the values temp = data[min]; data[min] = data[index]; data[index] = temp; }
接下來再來實現鏈表中元素排序:
LinearNode<Integer> current = linearNode; while (current.next!=null) { LinearNode temp = current.next; int minNumber = current.number; while (temp!=null) { if(minNumber>temp.number) { minNumber = temp.number; } temp = temp.next; } LinearNode current0 = current; while (current0.number!=minNumber) { current0 = current0.next; } current0.number = current.number; current.number = minNumber; result = ""; i = 0; integerLinearNode = linearNode; while (i<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("排序中全部鏈表元素爲:"+result+" 元素個數爲:"+nHouZeYang); System.out.println();
實驗結果截圖:
上面進行的是鏈表練習,這裏將進行一些數組的練習:
(1)經過鍵盤輸入一些整數,創建一個數組;(2)實現節點插入、刪除、輸出操做;
實驗結果截圖:
數組練習,要求實現下列功能:使用插入排序法對數組中元素進行排序,在排序的每個輪次中, 打印元素的總數,和目前數組的全部元素。
for (int index = 1; index <nHouZeYang; index++) { int key = array[index]; int position = index; // Shift larger values to the right while (position > 0 && key<array[position-1]) { array[position] = array[position-1]; position--; } array[position] = key; result = ""; for (int i = 0; i < nHouZeYang; i++) { result += array[i] + " "; } System.out.println("排序中全部數組元素爲:" + result); System.out.println("排序中元素個數爲:" + nHouZeYang); }
實驗結果截圖:
問題1:首先是創建鏈表時,產生一些問題,遇到空指針錯誤。
if(linearNode==null) linearNode=tLinearNode; else { LinearNode<Integer> current = linearNode; while (current.next != null) current = current.next; current.next = tLinearNode; }
問題2:從文件讀取文本,並將其轉化爲數字類型,上學期學過,這裏沒有記住。
File file = new File(fileName); Reader reader = null; try { System.out.println("以字符爲單位讀取文件內容,一次讀一個字節:"); // 一次讀一個字符 reader = new InputStreamReader(new FileInputStream(file)); int tempchar; while ((tempchar = reader.read()) != -1) { // 對於windows下,\r\n這兩個字符在一塊兒時,表示一個換行。 // 但若是這兩個字符分開顯示時,會換兩次行。 // 所以,屏蔽掉\r,或者屏蔽\n。不然,將會多出不少空行。 if (((char) tempchar) != '\r') { System.out.print((char) tempchar); } } reader.close(); } catch (Exception e) { e.printStackTrace(); }
可是按照這樣代碼仍然會出現錯誤,讀取出來的有13這個數字,對照ASCII碼錶,發現這個數字是回車符的ASCII碼值,因而嘗試將if (((char) tempchar) != '\r'){}
改成if (((char) tempchar) != '\r'&&((char) tempchar) != '\n)
,修改以後讀取內容是正確的。
- 關於char型轉int型
char ch = '9';
int n = int(ch) - int('0');
此處ch也是‘0’至‘9’的數字字符
問題3:在數組練習中要在原數組中間插入一個數字,這裏一開始覺得很簡單,可作的過程遇到了問題,見下圖:
int index = 4; for (int y = nHouZeYang;y>=4;y--) { array[y+1] = array[y]; } array[index] = nums[0];