之前我們說過如果頻繁增刪資料元素,我們應該選擇單鏈表就可以,但是如果資料元素的最大個數固定,那麼就需要靜態單鏈表,而且動態單鏈表如果長時間使用單鏈表物件頻繁增加和刪除資料元素,堆空間產生大量的記憶體碎片,導致系統執行緩慢,所謂單鏈表就是「順序表 + 單鏈表 =靜態單鏈表」
設計思路
在"單鏈表"的內部增加一片預留的空間,所有的node物件都在這片空間中動態建立和動態銷毀,所以我們得過載create()和destory()改變記憶體的分配和歸還方式,過載operator new,用於在指定記憶體上建立物件,我就僅需要將staticlinklist繼承於linklist即可,
#ifndef staticlinklist_h
#define staticlinklist_h
#include
"linklist.h"
namespace cgslib};
unsigned
char m_space[
sizeof
(node)
*n];
int m_used[n]
; node*
create()
}return ret;
}void
destory
(node* pn)}}
public
:staticlinklist()
}int
capacity()
};};
#endif
// staticlinklist_h
linklist中封裝create和destroy函式的意義為靜態單鏈表(staticlinklist)的實現做準備,staticlinklist與linklist的不同僅在於鍊錶結點記憶體分配上的不同,因此,將僅有的不同封裝於父類和子類的虛函式中, 資料結構 靜態單鏈表
問乙個問題,如果需要頻繁且長時間的增刪資料元素應該選擇哪種線性表?首先看到大量增刪肯定會想到單鏈表,因為它不需要移動結點,效率會高不少,但是單鏈表真的是理想的選擇嗎?如果需要的資料最大個數是固定的呢?這就是需要實現靜態單鏈表的原因之一。當我們使用單鏈表長時間並且頻繁的增刪資料元素會發生什麼?可能的結...
13 靜態單鏈表的實現
觸發條件 長時間使用單鏈表物件頻繁增加和刪除資料元素 可能的結果 堆空間產生大量的記憶體碎片,導致系統執行緩慢 在 單鏈表 的內部增加一片預留的空間,所有的node物件都在這篇空間中動態建立和動態銷毀。通過模板定義靜態單鏈錶類 staticlinklist 在類中定義固定大小的空間 unsigned...
C 實現靜態單鏈表的例項
c 實現靜態單鏈表的例項 利用陣列實現的靜態單鏈表,與嚴蔚敏書實現略有不同,不另設 空間。有任何bug或錯誤,希望各位朋友多多反饋 感激不盡 author moyiii mail lc09 vip.qq.com 靜態鍊錶實現,僅作學習之用,當然如果 你想拿去用,隨你好啦。include using ...