2 3 線性表之靜態鍊錶 及3其 C 實現

2021-09-24 15:21:18 字數 2664 閱讀 7319

靜態鍊錶,也是線性儲存結構的一種,它兼顧了順序表和煉表的優點。

靜態鍊錶,仍需要預先分配乙個較大的空間,但是在作為線性表的插入和刪除操作時不需要移動元素,僅僅需修改指標,故仍具有鏈式儲存結構的主要優點。

靜態鍊錶使用陣列來儲存資料(和順序表一樣),但是儲存位置是隨機的,資料之間「一對一的邏輯關係通過乙個「游標」來實現(和鍊錶又類似)。

所以靜態鍊錶需要2部分的資訊,

①資料域,用於儲存資料元素;

②游標:其實就是陣列的下標,來表示直接後繼元素在陣列中的位置;

c語言實現靜態鍊錶結構體定義:

#define max 100

typedef struct static_link_list[max];

但其實靜態鍊錶中,除了資料本身通過游標組成的鍊錶外,還需要一條連線各個空位置的鍊錶,稱為備用鍊錶

備用鍊錶的作用是存放目前未使用的空間,留作後用

所以其實靜態鍊錶使用陣列申請的物理空間中,存在兩個鍊錶,乙個連線資料,乙個連線空位置。

靜態鍊錶中設定備用鍊錶的好處是,可以知道我們是否還有空位置可以儲存資料。

習慣上來說,備用鍊錶的頭結點為陣列的首元素arr[0],而資料鏈表的頭結點為陣列的最後乙個元素arr[max-1]

這個記住就行,不用去想為什麼。

後面我們就把資料鏈表簡稱為鍊錶或者靜態鍊錶。

其實靜態鍊錶完全可以視為用順序表的方式實現 帶頭結點的單鏈表,程式之中有很多相似的地方,只是變數換了個名稱而已。

令最後乙個元素(煉表頭結點)的游標為0,表示指向備用鍊錶的頭結點,表示該鍊錶為空

void initlist(static_link_list l)

//煉表頭結點為空很好理解,因為游標是指向 直接後繼元素的 位置,而空鍊錶沒有元素,所以頭結點游標為0,表示直接後繼就是備用鍊錶的頭結點,表示沒有資料元素。而備用鍊錶的最後乙個結點l[max-2]為什麼游標也為0呢? 這是因為這已經是備用鍊錶的最後乙個元素了,它後面沒有後繼了!所以可以理解為單鏈表的最後乙個結點的next為null,道理是一樣的

int mallocarr(static_link_list l)

return i; //返回我們取出的i位置

}

void free_node(static_link_list l) s_link_list[max];

void initlist(s_link_list l);

int mallocarr(s_link_list l);

void free_node(s_link_list l, int k);

void createlist(s_link_list l);

int lenlist(s_link_list l);

void showlist(s_link_list l);

void listinsert(s_link_list l, int i, int x);

void deletelist(s_link_list l, int i);

#endif // !static_link_list_h_static_link_list.cpp

#include#include"static_link_list.h"

using std::cin;

using std::cout;

using std::endl;

void initlist(s_link_list l)

int mallocarr(s_link_list l)

cin.clear();

while(cin.get() != '\n')

continue;

}int lenlist(s_link_list l)

return j;

}void showlist(s_link_list l)

/*k指向頭結點*/

int k = max - 1;

int j = 0;

cout << "\n鍊錶內容為: " << endl;

while (l[k].cur)

cout << endl;

}void listinsert(s_link_list l, int i, int x)

若有錯誤 請不吝指出 謝謝

線性表(3) 靜態鍊錶

靜態鍊錶 1.利用連續的靜態儲存空間模擬實現鍊錶的操作 2.建立資料鏈表,利用游標作為指標,指向下一元素儲存位置,l max 1 cur為頭指標,指向第乙個資料元素 3.建立空閒結點鍊錶,利用游標作為指標,指向下一空閒結點位置,l 0 cur為頭指標,指向第乙個空閒結點所在位置 4.l 0 data...

線性表 3靜態鍊錶

通過上面的學習我們知道,靜態鍊錶儲存資料元素也需要自定義資料型別,至少需要包含以下 2 部分資訊 include define maxsize 7 typedef struct component 將結構體陣列中所有分量鏈結到備用鍊錶中 void reservearr component array...

線性表(一) 鍊錶之靜態鍊錶

五 靜態鍊錶的實現 定義靜態節點 template class staticlistnode template class staticlist 鍊錶是否為空 bool empty 獲取頭結點 listnode get head 插入節點 void insert const int index,co...