1. 程式人生 > >我的java學習-資料結構的學習重點類變數設計

我的java學習-資料結構的學習重點類變數設計

學資料結構的時候,有點蒙,不知道這個東西學了是幹什麼用的,翻書看了半天沒有找到重點。有天看到陣列問題了,說自己也動手搞個數組來看看,結果不知道從哪裡下手,猛然間發現,自己的資料結構是白學習了,沒有抓住學習的重點內容,簡單的陣列都不知道怎麼設計類變數來實現。 果然還是一動手就知道到底有沒有,我自己發現是什麼都沒有。 現在有點開竅了,資料結構的學習重點,個人感覺,就是類變數和初始方法的實現,這個就是資料結構最重要的體現,也是個人設計程式時的難點,把類變數和初始方法搞清楚了,資料結構就沒有白學習。 比如像順序表裡面的內容,順序表裡面是這麼定義類變數的

private int maxsize;  //順序表的最大容量
private E[] data;     //用陣列的方式來儲存順序表
private int size;    //順序表的長度

如果更換成二維陣列,這個類變數應該是怎麼考慮?考慮可以用下面的方式

private E[][] data;
private int sizem, sizen;

設計sizem,sizen作為二維陣列的兩個變數,可以傳遞陣列大小。 同樣的還有初始化方法,順序表的初始化方法可以考慮用

public SeqList(Class<E> type, int maxsize){
	this.maxsize = maxsize;
	data = (E[])Array.newInstance(type, maxsize);
	size = 0;
}

這裡面用了泛型的方法來設計,稍微複雜一點,如果改成int型陣列就比較簡單,也好理解但是以後用到泛型就還是要重新掌握

private int[] data;
data = new int[maxsize];

同樣的換成二維陣列,初始化方法可以考慮用

public Matrix(int sizem, int sizen){
       this.sizem = sizem;
       this.sizen = sizen;
       data = new int[sizem][sizen];
    }

內容到單鏈表,更復雜一點。單鏈表的java實現,設計的類變數和初始化方法,在單鏈表的類裡面,專門設計了一個內部類private static類來實現單鏈表的資料結構。這個內部類定義了一個數據變數item,一個索引變數next,索引變數next被設計成Node型別的變數。 這裡面索引變數的設計就很重要,也比較難理解。索引的作用,一般是用來指向單個節點的位置,指向在C語言裡面有比較巧妙的指標來實現,而在java語言裡面,需要通過類變數的巧妙設計來實現。這裡用了Node型別變數,裡面儲存有item資料變數同時,儲存有一個Node型別next變數。這裡的next就可以通過賦值的方式來改變指向,達到索引的目的。雖然感覺這樣的設計比較C語言裡面的指標會浪費一點空間,但是更加安全不會出現指標指向錯誤出現嚴重問題。

private Node<E> start;
int size;
private static class Node<E>{
	E item;
	Node<E> next;
	Node(E item, Node<E> next){
		this.item = item;
		this.next = next;	
	}
}