鏈式儲存結構.靜態鍊錶
一、靜態鍊錶1.靜態鍊錶儲存結構單鏈表是通過指標實現的,但是我們也可以通過陣列來代替指標描述單鏈表,即靜態鍊錶。如何實現靜態鍊錶?構造陣列的元素由兩個資料域組成:data和cur,即陣列的每個下標都對應乙個data和乙個cur。
資料域data:用來存放資料元素,即要處理的資料;
游標cur:存放該元素的後繼在陣列中的下標,相當於單鏈表中的next指標;
為了方便插入資料,我們通常會把陣列建立得大一些,以便有一些空閒空間而不致於出現溢位情況。
線性表的靜態鍊錶儲存結構:
#define maxsize 1000 //假設鍊錶的長度為1000(個元素)
typedef struct
component,staticlinklist(maxsize);2.備用鍊錶由於陣列的第乙個和最後乙個元素作為特殊元素處理,不存資料,因此我們把未使用的陣列元素稱為備用鍊錶。
因此,我們規定:
(1)陣列第乙個元素(即下標為0的元素)的游標cur存放第乙個空閒空間元素的下標(備用鍊錶的第乙個元素);
(2)陣列最後乙個元素的游標cur存放第乙個有數值的元素的下標(相當於單鏈表中的頭結點作用)。當整個鍊錶為空時則最後乙個元素的游標cur為0。
(3)鍊錶的最後乙個有值元素的cur為0
昇華筆記:如何將一維陣列list中各分量鏈成乙個備用鍊錶?
typedef int status
status initlist(staticlinklist list)
return i;//返回被使用的下標
}//注釋:假如先前list[0].cur=7(陣列下標值),當下標為7的分量(陣列元素)準備被使用了,就得有接替者,所以把分量7(list[i].cur,其中i=7)的cur值=8,賦值給頭元素(list[0].cur),之後就可以繼續分配新的空閒分量。//
/*2.在l中第i個元素之前插入新的資料元素e*/
typedef int status
typedef int elemtype
status listinsert(staticlinklist l,int i,elemtype e)
/*2.刪除在l中第i個資料元素e*/
typedef int status
status listdelete(staticlinklist l,int i)
/*3.初始條件:靜態鍊錶l已經存在。操作結果:返回l中資料元素個數*/
int listlength(staticlinklist l)
return j;
}三、靜態鍊錶的優缺點1.優點在插入和刪除操作時只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點;2.缺點(1)沒有解決連續儲存分配帶來的表長度難以確定的問題;
(2)失去了順序儲存結構隨機訪問的特性;
05 線性表 四 鏈式儲存結構 靜態鍊錶
鏈式儲存結構.靜態鍊錶 嵌入式 小j的天空 一 靜態鍊錶 1.靜態鍊錶儲存結構 單鏈表是通過指標實現的,但是我們也可以 通過陣列來代替指標描述單鏈表 即靜態鍊錶 如何實現靜態鍊錶?構造陣列的元素由兩個資料域組成 data和cur,即陣列的每個下標都對應乙個data和乙個cur。資料域data 用來存...
4 線性表 鏈式儲存 靜態鍊錶
一開始對照書上的總覺得 不對!傻吊搗鼓了兩小時,總算弄出來了 自己用電腦打的感覺。果然跟光看書不一樣,還是不能懶。靜態鍊錶說明 1 0號節點為備用空間鍊錶的頭結點,maxsize 1號節點為實際鍊錶空間首結點。2 需要使用者自己實現malloc和free函式。3 辨明陣列中哪些分量未被使用的解決辦法...
線性表 鏈式儲存結構 雙向鍊錶
雙向鍊錶結點結構 既然單鏈表可以有迴圈鍊錶,那麼雙向鍊錶當然也可以有。由於這是雙向鍊錶,那麼對於鍊錶中的某乙個結點p,它的後繼結點的前驅結點是它本身。實現 s next p s prior p prior p prior next s p prior s 關鍵在於交換的過程中不要出現矛盾,例如第四步...