學習了資料結構後,最初認識的是順序表和單鏈表,那麼什麼是靜態鍊錶呢?機智的避開了順序表和單鏈表的缺點,靜態鍊錶就此誕生了。用順序表來模擬單鏈表,它在插入,刪除資料時不用移動資料,而且可以用一維陣列來進行描述,這就有效的遮蔽了單鏈表儲存記憶體分片的問題。
如上圖所示為靜態鍊錶的示意圖,其中靜態鍊錶包括有效鏈(資料域中儲存的有有效資料)和空閒鏈(位址內沒有有效資料)兩個帶頭結點的鍊錶。0下標是有效鏈的頭結點,1下標是空閒鏈的頭結點。
所以在定義結點時需按如下格式寫:
typedef struct snode
snode,*slist;
下面就來展現單鏈表所具有的獨特魅力,插入資料。首先需要將空閒鏈中除了頭結點外的第乙個結點剔除,給其賦值後插入頭插到有效鏈中。如此便可實現時間複雜度為o(1)的大作。
bool insert_begin(slist plist,int val)
int p=plist[1].next;//找到空閒結點
plist[1].next=plist[p].next;//將結點從空閒鏈中剔除
plist[p].data=val;//將資料放到p中
//將p插入到有效鏈中
plist[p].next=plist[0].next;
plist[0].next=p;
return true;
}
鍊錶學習 靜態鍊錶
struct linknode 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...
靜態鍊錶(陣列 鍊錶和靜態鍊錶的操作)
因為是線性表,不能只講鍊錶,所以今天提一下靜態鍊錶以及陣列 鍊錶 靜態鍊錶之間的對比。陣列基本結構沒得說,插入和刪除的操作也是有的 雖然看著不比較詭異 一般是動態分配乙個足夠長的,記錄有多少個元素後對這個個數進行加減,而不是每插入乙個就動態分配 其實這樣也行,要是不怕麻煩的話 另外在插入刪除操作之後...
靜態鍊錶和迴圈鍊錶
所謂靜態鍊錶,與指標型描述的鍊錶 動態鍊錶 的區別在於靜態鍊錶借用一維陣列來描述鍊錶.這種儲存型別需要預先分配乙個較大的空間.其結構如下圖 與動態鍊錶操作時最大的區別在於 靜態鍊錶需由使用者自己實現malloc和free函式.為了辨明陣列中哪些分量未被使用,解決的辦法是 將所有未被使用過的以及被刪除...