日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

順序表和鏈表的區(qū)別

順序表和鏈表的區(qū)別

順序表和鏈表的區(qū)別


1、存儲(chǔ)分配方式不同:順序存儲(chǔ)結(jié)構(gòu)是用一段連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表的數(shù)據(jù)元素,單項(xiàng)鏈表是采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),用一組任意的存儲(chǔ)單元存放線性表的元素 。
2、空間利用率不同:順序表的空間利用率顯然要比鏈表高 。因鏈表在存儲(chǔ)數(shù)據(jù)時(shí) , 每次只申請(qǐng)一個(gè)節(jié)點(diǎn)的空間,且空間的位置是隨機(jī)的,這種申請(qǐng)存儲(chǔ)空間的方式會(huì)產(chǎn)生很多空間碎片,一定程序上造成了空間浪費(fèi) 。不僅如此,由于鏈表中每個(gè)數(shù)據(jù)元素都必須攜帶至少一個(gè)指針,因此鏈表對(duì)所申請(qǐng)空間的利用率也沒有順序表高 。
【順序表和鏈表的區(qū)別】3、開辟空間的方式不同:順序表存儲(chǔ)數(shù)據(jù)實(shí)行的是 “一次開辟,永久使用”,即存儲(chǔ)數(shù)據(jù)之前先開辟好足夠的存儲(chǔ)空間,空間一旦開辟后期無(wú)法改變大?。ㄊ褂枚櫚那榭齔猓?。而鏈表則不同,鏈表存儲(chǔ)數(shù)據(jù)時(shí)一次只開辟存儲(chǔ)一個(gè)節(jié)點(diǎn)的物理空間,如果后期需要還可以再申請(qǐng) 。因此,若只從開辟空間方式的角度去考慮,當(dāng)存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)無(wú)法提前確定,又或是物理空間使用緊張以致無(wú)法一次性申請(qǐng)到足夠大小的空間時(shí),使用鏈表更有助于問題的解決 。
數(shù)據(jù)結(jié)構(gòu)三順序表和鏈表的優(yōu)缺點(diǎn)區(qū)別,特點(diǎn)是什么順序表和鏈表由于存儲(chǔ)結(jié)構(gòu)上的差異,導(dǎo)致它們具有不同的特點(diǎn),適用于不同的場(chǎng)景 。通過系統(tǒng)地學(xué)習(xí)順序表和鏈表我們知道,雖然它們同屬于線性表,但數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)有本質(zhì)的不同:
因此,若只從開辟空間方式的角度去考慮,當(dāng)存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)無(wú)法提前確定 , 又或是物理空間使用緊張以致無(wú)法一次性申請(qǐng)到足夠大小的空間時(shí),使用鏈表更有助于問題的解決 。
從空間利用率的角度上看 , 順序表的空間利用率顯然要比鏈表高 。
這是因?yàn)?,鏈表在存?chǔ)數(shù)據(jù)時(shí),每次只申請(qǐng)一個(gè)節(jié)點(diǎn)的空間,且空間的位置是隨機(jī)的,如圖 2 所示:
這種申請(qǐng)存儲(chǔ)空間的方式會(huì)產(chǎn)生很多空間碎片,一定程序上造成了空間浪費(fèi) 。不僅如此,由于鏈表中每個(gè)數(shù)據(jù)元素都必須攜帶至少一個(gè)指針 , 因此,鏈表對(duì)所申請(qǐng)空間的利用率也沒有順序表高
根據(jù)順序表和鏈表在存儲(chǔ)結(jié)構(gòu)上的差異 , 問題類型主要分為以下 2 類:
第 1 類問題適合使用順序表 。這是因?yàn)椋樞虮碇写鎯?chǔ)的元素可以使用數(shù)組下標(biāo)直接訪問,無(wú)需遍歷整個(gè)表,因此使用順序表訪問元素的時(shí)間復(fù)雜度為 O(1);而在鏈表中訪問數(shù)據(jù)元素,需要從表頭依次遍歷,直到找到指定節(jié)點(diǎn),花費(fèi)的時(shí)間復(fù)雜度為 O(n);
第 2 類問題則適合使用鏈表 。鏈表中數(shù)據(jù)元素之間的邏輯關(guān)系靠的是節(jié)點(diǎn)之間的指針,當(dāng)需要在鏈表中某處插入或刪除節(jié)點(diǎn)時(shí),只需改變相應(yīng)節(jié)點(diǎn)的指針指向即可 , 無(wú)需大量移動(dòng)元素,因此鏈表中插入、刪除或移動(dòng)數(shù)據(jù)所耗費(fèi)的時(shí)間復(fù)雜度為 O(1);而順序表中,插入、刪除和移動(dòng)數(shù)據(jù)可能會(huì)牽涉到大量元素的整體移動(dòng),因此時(shí)間復(fù)雜度至少為 O(n);
綜上所述,不同類型的場(chǎng)景 , 選擇合適的存儲(chǔ)結(jié)構(gòu)會(huì)使解決問題效率成倍數(shù)地提高
簡(jiǎn)述順序表和鏈表的概念及特點(diǎn)順序表:空間位置連續(xù),以空間位置表示邏輯關(guān)系,訪問效率高 , 插入刪除效率低,有可能有空間溢出的問題
鏈表:以附加數(shù)據(jù)域表示邏輯關(guān)系,只能順序訪問,但插入刪除不需要移動(dòng)元素 , 適應(yīng)于元素變化較多的場(chǎng)合
順序表和鏈表有什么不同之處順序表是用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表的數(shù)據(jù)元素;鏈表是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素 。順序存儲(chǔ)的主要優(yōu)點(diǎn)是節(jié)省存儲(chǔ)空間,因?yàn)榉峙浣o數(shù)據(jù)的存儲(chǔ)單元全用于存放結(jié)點(diǎn)數(shù)據(jù),數(shù)據(jù)之間的邏輯關(guān)系沒有占用存儲(chǔ)空間,而是以空間上的相鄰關(guān)系表示;而鏈?zhǔn)酱鎯?chǔ)的優(yōu)點(diǎn)在于便于修改 , 進(jìn)行刪除和插入時(shí),不必移動(dòng)結(jié)點(diǎn),只需修改相應(yīng)結(jié)點(diǎn)的指針域,但存儲(chǔ)空間利用率較低 。在操作過程中不需要移動(dòng)大量數(shù)據(jù)時(shí),用順序表較好 。
靜態(tài)鏈表和單鏈表的區(qū)別順序表和靜態(tài)鏈表的物理結(jié)構(gòu)(即存儲(chǔ)結(jié)構(gòu))是相同的,在計(jì)算機(jī)內(nèi)存中以數(shù)組的形式保存的線性表,是用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),但兩者的數(shù)據(jù)結(jié)構(gòu)(邏輯結(jié)構(gòu))是不同的:
順序表:著眼于整個(gè)數(shù)組,采用動(dòng)態(tài)分配的一維數(shù)組,仍然借助了指針進(jìn)行數(shù)據(jù)操作,具體描述如下:
typedef struct
{
ElemType *elem;
int length;
int listsize;
}Sqlist;
在線性表的插入和刪除操作時(shí),需要借助指針來移動(dòng)元素 。
靜態(tài)表:不設(shè)指針而使用鏈表結(jié)構(gòu) , 數(shù)組元素的一個(gè)分量用于存放數(shù)據(jù),另一個(gè)用來作為“游標(biāo)”指示下一結(jié)點(diǎn)在數(shù)組中的相對(duì)位置,數(shù)據(jù)的存儲(chǔ)盡管是采用一維數(shù)組的形式存儲(chǔ)在計(jì)算機(jī)中 , 但仍然是繼承了鏈表指向不一定總是指向緊挨著其的結(jié)點(diǎn),描述如下:
typedef struct
{
Elemtype data;
int cur;
}component,SLinkList[MAXSIZE];
這種存儲(chǔ)結(jié)構(gòu),仍需要預(yù)先分配一個(gè)較大的空間,但在作為線性表的插入和刪除操作時(shí)不需移動(dòng)元素,僅需修改指針(游標(biāo)),故仍具有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的主要優(yōu)點(diǎn) 。
鑒于兩者的數(shù)據(jù)結(jié)構(gòu)不同,對(duì)用的數(shù)據(jù)操作也就不同 。

    推薦閱讀