邏輯結(jié)構(gòu) & 物理結(jié)構(gòu)
一般從兩個角度對數(shù)據(jù)進行描述傻铣,一個是邏輯結(jié)構(gòu)章贞,一個是物理結(jié)構(gòu)
邏輯結(jié)構(gòu):描述的是數(shù)據(jù)與數(shù)據(jù)之間的邏輯關(guān)系
物理結(jié)構(gòu):描述的是數(shù)據(jù)在內(nèi)存中存儲的形式
邏輯結(jié)構(gòu)
-
線性結(jié)構(gòu)
:數(shù)據(jù)之間的關(guān)系是一對一的,所有符合一對一的都是線性結(jié)構(gòu)
數(shù)組
非洲、鏈表 是線性結(jié)構(gòu)
字符串
是 特殊線性結(jié)構(gòu)鸭限,存儲內(nèi)容只能是字符串
隊列
、棧
是特殊線性結(jié)構(gòu)两踏,區(qū)別在于讀取方式
- 隊列是先進先出败京,即FIFO
- 棧是先進后出,即FILO
集合結(jié)構(gòu)
:集合中的所有元素除了同屬于一個集合
外梦染,他們之間沒有其他關(guān)系
-
樹形結(jié)構(gòu)
:數(shù)據(jù)之間的存在一對多的層次關(guān)系
樹形結(jié)構(gòu) 圖形結(jié)構(gòu)
:數(shù)據(jù)之間存在多對多的關(guān)系
物理結(jié)構(gòu)
數(shù)據(jù)的物理結(jié)構(gòu)
就是數(shù)據(jù)存儲在磁盤中
的方式赡麦,這里的磁盤指的是計算機的內(nèi)存,主要研究的是數(shù)據(jù)結(jié)構(gòu)在計算機中的實現(xiàn)方式帕识,包括數(shù)據(jù)結(jié)構(gòu)中的元素的表示及元素間關(guān)系的表示泛粹,有以下兩種
順序存儲結(jié)構(gòu)
: 邏輯上
相鄰的數(shù)據(jù)元素,物理存儲位置
也相鄰肮疗,順序表的存儲空間需要預先分配晶姊,且存儲空間是一段的連續(xù)的內(nèi)存,順序存儲結(jié)構(gòu)如下圖所示
- 優(yōu)點
方法簡單伪货,易實現(xiàn)们衙,因為在各種高級語言中都有數(shù)組
順序存儲結(jié)構(gòu)具有隨機訪問的特點 - 缺點
順序表中做插入/刪除 操作時,需要進行大量的數(shù)據(jù)移動超歌,因此對n較大的順序表效率低
需要預先分配空間砍艾,如果空間預估過大蒂教,會導致順序表后面的大部分空間閑置巍举,浪費內(nèi)存,如果預估過小凝垛,又會造成溢出
鏈式存儲結(jié)構(gòu)
:邏輯上
相鄰的數(shù)據(jù)元素懊悯,其物理存儲位置不一定相鄰
蜓谋,它使用指針實現(xiàn)元素之間的邏輯關(guān)系,且鏈表的存儲空間是動態(tài)分布的炭分,鏈式存儲結(jié)構(gòu)如下圖所示
- 優(yōu)點:
不需要提前開辟一段連續(xù)的空間桃焕,其空間是動態(tài)分配的
插入、刪除操作方便捧毛,只需要改變指針的指向观堂,不需要移動數(shù)據(jù)元素 - 缺點
鏈表不能隨機存取元素,如果在鏈式存儲中遍歷呀忧,需要遍歷所有的元素