對於線性鍊錶可用一維陣列來進行描述,這種描述方法便於在沒有指標型別的高階程式語言中使用鍊錶結構,即使用陣列描述的鍊錶稱為靜態鍊錶。由於全域性陣列是儲存在靜態區也叫做靜態鍊錶。
c語言具有指標能力使其非常容易地操作記憶體中的位址和資料,對於物件導向的語言雖然不使用指標,但因為啟用了物件引用機制,從某種角度也間接實現了指標的某些作用。但對於早期的程式語言,由於沒有指標,鍊錶結構等也就無法實現了,怎麼辦呢?於是,就有了使用陣列來代替指標來描述單鏈表。使用陣列描述的鍊錶叫做靜態鍊錶(static list),又稱為游標實現法。
靜態鍊錶和動態鍊錶是線性表鏈式儲存的兩種不同的表示方式。
乙個陣列的邏輯分為兩部分:空閒鍊錶部分和非空閒鍊錶部分,它們通過指標來連線,空閒鍊錶由空閒頭節點連線起來,非空閒鍊錶由非空閒頭節點連線起來。空閒鍊錶本質上是作為需要管理的記憶體,當插入節點時,向管理的記憶體部分申請空間。當刪除節點時,向管理的記憶體部分釋放記憶體。
空閒鍊錶
首先,讓陣列的元素由兩個資料域組成,data和cursor。即陣列的每個下標都對應乙個data和乙個cursor。資料域data用來存放資料元素,游標cursor相當於單鏈表中的next指標,存放元素後繼在陣列中的下標。
/*線性表的靜態鍊錶儲存結構*/
#define maxsize 1000
typedef struct
component, staticlinklist[maxsize];
staticlinklist space;
結構體陣列中,space[0]作為備用鍊錶的頭指標,space[1]作為鍊錶的頭指標。
結構體陣列
游標實現法
線性表的靜態鍊錶
/**
* 將一維陣列space中各分量鏈成一備用鍊錶
* space[0].cursor 為頭指標,0表示空指標。
*/status initlist(staticlinklist space)
return i;
}
在靜態鍊錶某個元素之前插入新元素
status insertsll(staticlinklist l, int i, elemtype e)
//獲得空閒分量的下標
int j = mallocssl(l);
if(j)
//將第i個元素之前的游標值賦值給新元素的游標
l[j].cursor = l[k].cursor;
//將新元素的下標賦值給地i個元素之前的元素的游標
l[k].cursor = j;
return ok;}}
資料結構鍊錶 靜態鍊錶
1 在這裡我們首先要複習一下鍊錶c語言的定義 這看起來很簡單,但實際上至關重要!data域 存放結點值的資料域。next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 也就是說next域儲存的是乙個位址,這個位址是下一節點的位址。注意 鍊錶通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈結在一...
資料結構 靜態鍊錶
首先我們讓陣列的元素都是由兩個資料域組成,data和cur。也就是說,陣列的每乙個下標都對應乙個data和乙個cur。資料域data用來存放資料元素,也就是通常我們要處理的資料 而游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標。我們把這種用陣列描述的鍊錶叫做靜態鍊錶。陣列的第...
資料結構 靜態鍊錶
include using namespace std struct node typedef node linklist define maxsize 20 void init linklist list int getlength linklist list int malloc linklis...