天天看點

資料結構Java實作02----線性表與順序表

【正文】

本節内容:

線性結構

線性表抽象資料類型

順序表

順序表應用

一、線性結構:

如果一個資料元素序列滿足:

(1)除第一個和最後一個資料元素外,每個資料元素隻有一個前驅資料元素和一個後繼資料元素;

(2)第一個資料元素沒有前驅資料元素;

(3)最後一個資料元素沒有後繼資料元素。

則稱這樣的資料結構為線性結構。

二、線性表抽象資料類型:

1、線性表抽象資料類型的概念:

線性表抽象資料類型主要包括兩個方面:既資料集合和該資料集合上的操作集合。

資料集合:

  可以表示為a0,a1,a2,...an-1,每個資料元素的資料類型可以是任意的類型。

操作集合包括如下:

1.求元素個數 2.插入 3.删除 4.查找 5.判斷是否為空

2、設計線性表抽象資料類型的java接口:

代碼如下:

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

然後我們讓子類去實作這個接口就行了。

三、順序表:(在實體存儲結構上連續,大小固定)

1、順序表的概念:

計算機有兩種基本的存儲結構(實體存儲結構):順序結構、離散結構。使用順序結構實作的線性表稱為順序表。如下圖所示:

資料結構Java實作02----線性表與順序表

java記憶體中,棧記憶體和堆記憶體占了很大一部分空間:棧記憶體的存儲是順序結構,堆記憶體的存儲是離散結構。

2、設計順序表類:

我們在上面第二段的list接口基礎之上,設計一個順序表:

(1)list.java:(線性表,和上面的第二段中代碼一樣)

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

(2)sequencelist.java:(核心代碼)

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

我們來看一下第54行的插入操作insert()方法:如果需要在index位置插入一個資料,那麼index後面的元素就要整體往後移動一位。這裡面需要特别注意的是:

插入操作:移動元素時,要從後往前操作,不能從前往後操作,不然元素會被覆寫的。

删除元素:移動元素時,要從前往後操作。

(3)測試類:

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

我們要注意插入的規則是什麼,不然會覺得這個順序表列印輸出的順序很奇怪。

運作效果:

資料結構Java實作02----線性表與順序表

3、順序表效率分析:

順序表插入和删除一個元素的時間複雜度為o(n)。

順序表支援随機通路,順序表讀取一個元素的時間複雜度為o(1)。因為我們是可以通過下标直接通路的,是以時間複雜度是固定的,和問題規模無關。

4、順序表的優缺點:

順序表的優點是:支援随機通路;空間使用率高(連續配置設定,不存在空間浪費)。

順序表的缺點是:大小固定(一開始就要固定順序表的最大長度);插入和删除元素需要移動大量的資料。

5、順序表的應用:

設計一個順序表,可以儲存100個學生的資料,儲存以下三個學生的資料,并列印輸出。

資料結構Java實作02----線性表與順序表

代碼實作:

(1)list.java:

  和上面的代碼保持不變

(2)sequencelist.java:

(3)students.java:學生類

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

(4)test.java:

資料結構Java實作02----線性表與順序表
資料結構Java實作02----線性表與順序表

注意第11行的注釋:第一個參數list.size代表的是:我每次都是在順序表的最後一個位置(目前線性表的長度的位置)進行插入操作;這樣的話,周遊時才是按照張三、李四、王五的順序進行輸出的。

資料結構Java實作02----線性表與順序表