讓陣列的元素都是由倆個資料域組成,data和cur。也就是說,陣列的每個下標都都應乙個data和乙個cur。資料域data,用來存放資料元素,也就是通常我們處理的資料;而游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶,這種描述方法還有起名叫做游標實現法。
我們都陣列第乙個和最後乙個元素作為特殊元素處理,不存資料。我們通常把未被使用的陣列元素稱為備用鍊錶。而陣列第乙個元素,即下標為0的元素的cur就存放備用鍊錶的第乙個結點的下標;而陣列的最後乙個元素的cur則存放第乙個有數值的元素的下標,相當於單鏈表中的頭結點作用,當整個鍊錶為空時,則為0。如圖所示:
//儲存空間初始分配量
#define maxsize 1000
//status 是函式的型別,其值是函式結果狀態**,如ok等
//初始條件:線性表l已存在,1<=i<=listlength(l)
typedef int status;
//elemtype型別根據實際情況而定,這裡假設為int
typedef int elemtype;
typedef struct component, staticlinklist[maxsize];
//將一維陣列space中各分量鏈成一備用鍊錶
//space[0].cur為頭指標,「0」表示空指標
status initlist(staticlinklist space)
//若備用空間鍊錶非空,則返回分配的結點下標,否則返回0
int malloc_sll(staticlinklist space)
return i;
}//在l中第i個元素之前插入新的資料元素e
status listinsert(staticlinklist l, int i, elemtype e)
//獲得空閒分量的下標
j = malloc_sll(l);
if (j)
return error;
}
//刪除在l中第i個資料元素
status listdelete(staticlinklist l, int i)
j = l[k].cur;
l[k].cur = l[j].cur;
free_ssl(l, j);
return ok;
}//將下標為k的空閒結點**到備用鍊錶
void free_ssl(staticlinklist space, int k)
//操作結果:返回l中資料元素個數
int listlength(staticlinklist l)
return j;
}
優點:在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點。
缺點:沒有解決連續儲存分配帶來的表長難以確定的問題;
失去了順序儲存結構隨機訪問的特性。
資料結構線性表之鍊錶
c 關於鍊錶的操作,包括建立鍊錶 正序和倒序插入 輸出鍊錶內容 插入節點 刪除節點 銷毀等操作 單鏈表基本操作 include include define elemtype int typedef struct nodelnode,linklist linklist link linklist m...
資料結構(五) 線性表之靜態鍊錶
我們先來說說什麼是靜態鍊錶,用乙個陣列來模擬鍊錶儲存元素,陣列中的元素都是由兩個資料域組成,data 和 cur。也就是說,陣列的每個下標都對應乙個data和乙個 cur。資料域data,用來存放資料元素,也就是通常我們要處理的資料 而游標 cur 相當於單鏈表中的 next 指標,存放該元素的後繼...
資料結構 線性表 鍊錶
在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...