資料結構(五) 線性表之靜態鍊錶

2021-09-13 15:02:06 字數 2337 閱讀 6456

我們先來說說什麼是靜態鍊錶,用乙個陣列來模擬鍊錶儲存元素,陣列中的元素都是由兩個資料域組成,data 和 cur。也就是說,陣列的每個下標都對應乙個data和乙個 cur。 資料域data,用來存放資料元素,也就是通常我們要處理的資料;而游標 cur 相當於單鏈表中的 next 指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶,這種描述方法還有起名叫做游標實現法

另外我們對陣列第乙個和最後乙個元素作為特殊元素處理,不存資料。我們通常把未被使用的陣列元素稱為備用鍊錶。而陣列第乙個元素,即下標為 0 的元素的 cur 就存放備用鍊錶的第乙個結點的下標;而陣列的最後乙個元素的 cur 則存放第乙個有數值的元素的下標,相當於單鏈表中的頭結點作用。如圖所示:

我們來看乙個具體的操作圖示;

假設我們已經將資料存入靜態鍊錶,比如分別存放著"甲"、 「乙」、 「丙"、"丁』等資料,則它們將處於如圖所示這種狀態。

此時「甲」這裡就存有下一元素"乙」 的游標2,"乙"則存有下一元素"丁』的下標3。而"丁"是最後乙個有值元素,所以它的 cur 設定為 0。而最後乙個元素的cur則因"甲』是第一有值元素而存有它的下標為1。而第乙個元素則因空閒空間的第乙個元素下標為 5 ,所以它的 cur 存有 5。

這樣看起來是不是就很好理解了呢,接下來我們看看如何用**來操作

public class staticlink 

public staticlink(int size)

current = 0;

head = 0;

length = 0;

maxsize = size;

system.out.println("初始化靜態鍊錶...");

} public void add(int data) else

} public void delete() else

} public void insert(int data, int index) else if (index == length - 1) else

length++; // 大小自增1

system.out.println("成功在 " + index + " 插入資料: " + data);

} else

} public void delete(int index) else if (index == (length - 1))

} else

length--; // 大小自減1

system.out.println("成功在 " + index + " 刪除資料: " + link[current].data);

} else

} public int gettrulyindex(int index)

if (i == index)

}return -1;

} public int get(int index)

return -1;

} public static void main(string args)

sl.delete();

sl.insert(20, 2);

sl.delete(1);

system.out.print("\n操作前的鍊錶內容: ");

for (int i = 0; i < original.length; i++)

system.out.print("\n操作後的鍊錶內容: ");

for (int j = 0; j < sl.length; j++)

}}

最後輸出的結果為:

優點:在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插人和刪除操作需要移動大量元素的缺點

缺點:沒有解決連續儲存分配帶來的表長難以確定的問題;失去了順序儲存結構隨機訪問的特性

靜態鍊錶中要解決的是:如何用靜態模擬動態鍊錶結構的儲存空間的分配,需要時申請,無用時釋放。

其實靜態鍊錶我們用得不多,而且現在大多數程式語言都支援動態鍊錶,這裡只是讓大家了解下。

資料結構之線性表(三) 靜態鍊錶

讓陣列的元素都是由倆個資料域組成,data和cur。也就是說,陣列的每個下標都都應乙個data和乙個cur。資料域data,用來存放資料元素,也就是通常我們處理的資料 而游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶,這種描述方法還有起...

資料結構線性表之鍊錶

c 關於鍊錶的操作,包括建立鍊錶 正序和倒序插入 輸出鍊錶內容 插入節點 刪除節點 銷毀等操作 單鏈表基本操作 include include define elemtype int typedef struct nodelnode,linklist linklist link linklist m...

資料結構 線性表 鍊錶

在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...