一、數(shù)據(jù)結(jié)構(gòu)是什么
數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)可以理解為:數(shù)據(jù) + 結(jié)構(gòu)。數(shù)據(jù)是描述客觀事物的符號,為程序操控,存儲在計算機上,結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)。在很多書籍以及博客中,對數(shù)據(jù)結(jié)構(gòu)的解釋為數(shù)據(jù)在計算機的存儲方式。
數(shù)據(jù)的邏輯結(jié)構(gòu)
數(shù)據(jù)元素間抽象化的相互關(guān)系,與數(shù)據(jù)的存儲無關(guān),獨立于計算機,但邏輯結(jié)構(gòu)決定元素的輸入、存儲、發(fā)送、處理和信息傳遞的基本操作功能。邏輯結(jié)構(gòu)有四種基本類型:集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖形結(jié)構(gòu)。表和樹是最常用的兩種高效數(shù)據(jù)結(jié)構(gòu),許多高效的算法能夠用這兩種數(shù)據(jù)結(jié)構(gòu)來設(shè)計實現(xiàn)
1.集合結(jié)構(gòu)
由若干元素集合在一起形成的團聚體(或稱集合體)相互堆積起來的一種結(jié)構(gòu)類型,數(shù)據(jù)元素之間無其他的關(guān)系,僅僅屬于同一集合體而已。
2.線性結(jié)構(gòu)
數(shù)據(jù)元素之間存在一一對應(yīng)的關(guān)系,其開始節(jié)點和終端節(jié)點具有少數(shù)性,除了開始開始節(jié)點和終端節(jié)點,其他的元素有且僅有一個前驅(qū)節(jié)點和后繼節(jié)點,線性表就是一個典型。
3.樹形結(jié)構(gòu)
數(shù)據(jù)元素之間存在著一一對應(yīng)的關(guān)系,每一個數(shù)據(jù)元素只有一個前驅(qū)節(jié)點,但是卻又很多后繼節(jié)點 終端節(jié)點可以有多個。二叉樹就是一個典型。
4.圖形結(jié)構(gòu)
又稱為非線性結(jié)構(gòu),數(shù)據(jù)元素之間存在著多對多的關(guān)系,其前驅(qū)節(jié)點和后繼節(jié)點的個數(shù)可以是任意多個
注:四種邏輯結(jié)構(gòu)存在著關(guān)系:樹形結(jié)構(gòu)是圖形結(jié)構(gòu)的特殊形式,而線性結(jié)構(gòu)又是樹形結(jié)構(gòu)的特殊形式。
延伸閱讀:
二、順序存儲結(jié)構(gòu)是什么
把邏輯上相鄰的數(shù)據(jù)存儲在物理位置上相鄰的存儲單位里,用物理位置上的相鄰來體現(xiàn)邏輯上的相鄰,此種存儲結(jié)構(gòu)的又在于節(jié)省了存儲空間,因為分配給數(shù)據(jù)的存儲單元完全用于了數(shù)據(jù)的存儲,數(shù)據(jù)之間的邏輯關(guān)系沒有占用存儲空間,可以實現(xiàn)對數(shù)據(jù)的隨機存取,每個節(jié)點對應(yīng)一個序號,由這個序號可以計算出數(shù)據(jù)的存儲地址,缺點在于不變于數(shù)據(jù)的修改,對數(shù)據(jù)的插入和刪除可能要移動一系列的數(shù)據(jù)。