靜態鍊錶的總結

2021-06-23 06:33:54 字數 2862 閱讀 2395

1.靜態鍊錶的定義:用陣列描述的鍊錶就叫做靜態鍊錶

2.為什麼有靜態鍊錶:因為有些高階語言沒有向c語言的指標,有人想出來用陣列來代替指標,來描述單鏈表。

3.怎樣定義靜態鍊錶:

typedef struct 

componet,staticlinklist[maxsize];

靜態鍊錶最基本的兩部分就是:

第一部分:資料(data),存放資料

第二部分:游標(cursor),存放該元素的後繼在陣列中的下標,相當於單鏈表中的next指標。

對於靜態鍊錶:下面的內容非常的重要:

靜態鍊錶的第乙個元素和最後乙個元素要作為特殊的元素處理,這兩個元素是不存資料的。

我們首先知道乙個概念:

備用鍊錶:我們把未被使用的陣列元素稱為備用鍊錶。

1)靜態鍊錶中第乙個元素的游標cursor(下標為0):存放備用鍊錶的第乙個結點的下標。

2)靜態鍊錶中最後乙個元素的游標cursor:存放第乙個有數值的元素的下標。

例如:如圖

其中黑色(1,2,3,4)即是data,紅色(用綠色圈的)即是cursor。最下面的為下標

從圖中我們可以得知:備用鍊錶的第乙個下標應該是4,則第乙個元素的cursor=4,第乙個有數值的下標1,則最後乙個元素的cursor=1,有數值的元素的cursor則為它後繼元素的下標。所以值為2的元素的cursor=2,值為3的元素的cursor=3,因為數值為4的元素為最後乙個元素,所以它的cursor=0,不指向其他元素。

靜態鍊錶的一些基本操作

1)定義乙個靜態鍊錶結構:

typedef struct 

componet,staticlinklist[maxsize];

1)初始化靜態鍊錶

/*

初始化靜態鍊錶

*/bool initlinklist(staticlinklist space)

我們知道,對於靜態鍊錶,我們要著重關注第乙個元素和最後乙個元素,第乙個元素的cursor是備用鍊錶的第乙個元素的下標,最後乙個元素的cursor是第乙個存放數值元素的下標,在malloc_ll中

int i = space[0].cur,i指的就是備用鍊錶第乙個元素的下標,在第乙個圖中i=4,當插入乙個元素時,這是第乙個元素的cursor就需要改變,即第乙個元素的cursor等於這個元素的cursor,即space[0].cur = space[i].cur,在第乙個圖中如果只插入值1,解釋上面的**

int i = space[0].cur=1

if(true)

return 1;

下面是插入的**:

/*

插入靜態鍊錶

*/bool insertlinklist(staticlinklist space,int pos,int val)

return false;

}

解釋上面的**

第10行:j=malloc_ll(space);分配乙個空間,用來存放將要插入的值,返回的就是備用鍊錶的第乙個元素下標

第13行:space[j].data = val,把下標為j的元素賦值為val

for(l=1;l<=2;l++)

for(l=2;l<=2;l++)

此時l=3時,會跳出迴圈,此時k=2,即pos=3的上乙個元素的下標。

第16-17行:如**釋

上圖的22就是要插入的資料,插入的位置pos=3,所以我們只需做如下兩步即可

第一步:將pos上乙個元素k=2的cursor=3賦值給值為22,下標為4的cursor,即space[j].cur=space[k].cur,space[4].cur=space[2].cur=3

3)顯示靜態鍊錶的資料

/*

顯示靜態鍊錶中所有的資料

*/void showlinklist(staticlinklist space)

printf("\n");

}

對**的解釋:

我們知道,對於靜態鍊錶,我們要著重關注第乙個元素和最後乙個元素,第乙個元素的cursor存放的是備用鍊錶的第乙個元素的下標,最後乙個元素存放的是第乙個有數值元素的下標,所以我們要遍歷元素,需要找到第乙個存放元素的下標,即從最後乙個元素的cursor中可以獲取。當space[k].cur不等於0時,說明還有存放數值的元素。k=space[k].cur迴圈存放值得下標

4)獲取靜態鍊錶的長度

int listlength(staticlinklist space)

return j;

}

5)靜態鍊錶的刪除

刪除時我們要釋放被刪除的元素,

free_ll函式

/*

刪除指定的結點

*/bool deletelinklist(staticlinklist space,int pos)

/* 釋放刪除的結點

靜態鍊錶(陣列 鍊錶和靜態鍊錶的操作)

因為是線性表,不能只講鍊錶,所以今天提一下靜態鍊錶以及陣列 鍊錶 靜態鍊錶之間的對比。陣列基本結構沒得說,插入和刪除的操作也是有的 雖然看著不比較詭異 一般是動態分配乙個足夠長的,記錄有多少個元素後對這個個數進行加減,而不是每插入乙個就動態分配 其實這樣也行,要是不怕麻煩的話 另外在插入刪除操作之後...

鍊錶學習 靜態鍊錶

struct linknode 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...

靜態鍊錶的應用

include include typedef struct list typedef struct link void init link l int assign link l void freenode link l,int pos void insert link l,int i,int e...