动态链表与静态链表
一.??靜態(tài)鏈表
在某些語(yǔ)言中指針是不被支持的,只能使用數(shù)組來(lái)模擬線性鏈表的結(jié)構(gòu).在數(shù)組中每個(gè)元素不但保存了當(dāng)前元素的值,還保存了一個(gè)”偽指針域”,一般是int類型,用于指向下一個(gè)元素的內(nèi)存地址.
[cpp]?view plain?copy
這種鏈表在初始時(shí)必須分配足夠的空間, 也就是空間大小是靜態(tài)的, 在進(jìn)行插入和刪除時(shí)則不需要移動(dòng)元素, 修改指針域即可,所以仍然具有鏈表的主要優(yōu)點(diǎn)(快速插入和刪除).
二.動(dòng)態(tài)鏈表
??
如果程序支持指針,則可按照我們的一般形式實(shí)現(xiàn)鏈表, 需要時(shí)分配,不需要時(shí)回收即可.
----------------------------------------------------------------------------------------------------------------------------------------------
有些高級(jí)語(yǔ)言中沒(méi)有“指針”數(shù)據(jù)類型,只能用數(shù)組來(lái)模擬線性鏈表的結(jié)構(gòu),
數(shù)組元素中的指針“域”存放的不是元素在內(nèi)存中的真實(shí)地址,而是在數(shù)組中的位置。這樣的鏈表
稱為靜態(tài)鏈表。
靜態(tài)鏈表:把線性表的元素存放在數(shù)組的單元中(不一定按邏輯順序連續(xù)存放),每個(gè)單元不僅存放元素本身 ,而且還要存放其后繼元素所在的數(shù)組單元的下標(biāo)(游標(biāo))。
線性表的靜態(tài)單鏈表存儲(chǔ)結(jié)構(gòu)?:
#define MAXSIZE 100;
typedef struct{
??ElemType data;
??int cur;
}component,SLinkList[MAXSIZE];
分析?:
這種描述方法便于在不設(shè)?”?指針?”?類型的高級(jí)程序設(shè)計(jì)語(yǔ)言中?,?使用的鏈表結(jié)構(gòu)?.?數(shù)組的零分量可看成頭節(jié)點(diǎn)?.?這種結(jié)構(gòu)仍然需要預(yù)先分配一個(gè)較大的空間?.?但在插入和刪除的時(shí)候?,?不需要移動(dòng)元素?.?僅需要修改指針?.?所以仍然具有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的主要優(yōu)點(diǎn)?.
鏈表結(jié)構(gòu)可以是動(dòng)態(tài)地分配存儲(chǔ)的,即在需要時(shí)才開辟結(jié)點(diǎn)的存儲(chǔ)空間,實(shí)現(xiàn)動(dòng)態(tài)鏈接。怎樣開辟存貯空間呢?C語(yǔ)言的庫(kù)函數(shù)提供了以下幾個(gè)函數(shù)。
1.malloc 函數(shù)
該函數(shù)如果成功調(diào)用,可以在內(nèi)存中開辟size指定大小的連續(xù)空間。返回值類型為void,請(qǐng)注意這不是表示沒(méi)有返回值,而是表示返回值可以指向任何類型。該函數(shù)是一個(gè)返回指針值的函數(shù),如果成功調(diào)用,返回所開辟空間的首地址,如果失敗返回NULL。該函數(shù)的參數(shù)可以用unsigned int size定義空間大小,也可以用變量類型名作參數(shù)來(lái)定義空間大小。
如:malloc(sizeof(int));開辟2個(gè)字節(jié)的存儲(chǔ)空間,molloc(sizeof(struct student));開辟10個(gè)(4+4+2)字節(jié)。該函數(shù)返回值是void類型,因此調(diào)用時(shí)需要強(qiáng)制轉(zhuǎn)換成需要的類型。
如:(int *)malloc(sizeof(int));
(struct people *)malloc(sizeof(struct student));
2. free 函數(shù)
其作用是釋放由p指向的內(nèi)存區(qū),即將這部分內(nèi)存還給系統(tǒng)。我們要注意動(dòng)態(tài)開辟的內(nèi)存在不用之后應(yīng)及時(shí)還給系統(tǒng),以免造成內(nèi)存“遺漏”。free函數(shù)無(wú)返回值。
這里要說(shuō)明的是,這種能動(dòng)態(tài)開辟存貯空間的區(qū)域是內(nèi)存的堆棧區(qū)。
實(shí)際上只有建立動(dòng)態(tài)鏈表才是有意義的。
總結(jié)
- 上一篇: 程序员入门之路
- 下一篇: 伍德里奇 第6版 计量经济学导论_伍德里