靜態鍊錶,也是線性儲存結構的一種,它兼顧了順序表和煉表的優點。
靜態鍊錶,仍需要預先分配乙個較大的空間,但是在作為線性表的插入和刪除操作時不需要移動元素,僅僅需修改指標,故仍具有鏈式儲存結構的主要優點。
靜態鍊錶使用陣列來儲存資料(和順序表一樣),但是儲存位置是隨機的,資料之間「一對一的邏輯關係通過乙個「游標」來實現(和鍊錶又類似)。
所以靜態鍊錶需要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...