鍊錶是一種資料結構還是資料型別?

時間 2021-05-12 06:22:51

1樓:新木

看其他答主說的一本正經的,其實很沒必要。

我之前也很想一本正經理清這2個概念,查了很多資料,最後得出的結論是:這2個概念本來就已經被搞混亂了,很多書上在只說乙個的時候說的頭頭是道,但一旦涉及到二者的比較與區別,就完全是自相矛盾的了。

因此我現在更願意關注通俗的使用上了。

資料結構強調演算法、非固有、非基礎。

資料型別則強調原子、固有、基礎。

因此按照通俗的使用,我們一般說鍊錶是資料結構。

而如果只看書上關於資料型別和資料結構的定義,那麼其實鍊錶既是資料結構也是資料型別。

2樓:用心閣

資料結構好理解,就是資料的組織形式和訪問方式。陣列,鍊錶(包括單向鍊錶,雙向鍊錶,迴圈鍊錶,雙向迴圈鍊錶),棧、佇列、樹。

資料型別的含義要取決於上下文。如果是程式語言的上下文,就是提供給程式設計師使用的資料的種類(變數,字面量,操作),有基本資料型別(位元組,整型,浮點數),也有復合資料型別,如陣列,字串,對映,也有自定義資料型別如結構體。在物件導向程式設計語言中,乙個類也可以作為資料型別,所以鍊錶,集合,樹都可以是一種資料型別。

3樓:蕭涵

我覺得既是資料結構,又是資料型別。

在使用的時候,關注的是鍊錶及定義在鍊錶上的操作,是抽象好的,就跟使用內建型別差不多,表現為資料型別。

在定義的時候,關注的是內部實現,具體的儲存安排等等,關注的是結構。

4樓:咸寧樂

個人認為資料型別是指資料是屬於哪一類的,其具體指的是資料。而資料結構是指由資料組成的結構,或者說儲存資料所用的結構。

所以我覺得鍊錶是儲存資料所用的一種結構,應該屬於資料結構

5樓:Demo

看題主的描述,題主所說的"資料型別"應該是特指ADT吧。

先複習一下概念:

資料結構:是相互之間存在一種或多種特定關係的資料元素的集合,包括邏輯結構和物理結構。

資料型別:是乙個值的集合和定義在這個值集上的一組操作的總稱。

抽象資料型別:是指乙個數學模型以及定義在該模型上的一組操作。

先說結論,鍊錶是資料結構。鍊錶實際上可以認為是一種資料的物理組織形式,是用指標或物件的引用組織起的一種資料的儲存方式.

至於題主的疑惑「為什麼鍊錶總是和棧,佇列...等放在一起」

@吳聰的回答裡也說了「一般將鍊錶和棧之類的放在一起講是因為早期的程式語言沒有內建鍊錶

」比如C要利用結構體和指標來實現鍊錶

struct node;

6樓:

是資料結構,結構就是它在機器裡是怎麼存的。

抽象資料型別就是人為規定的這東西可以支援哪些操作。

陣列和鍊錶這兩種型別都可以被當作序列這個型別使用。區別就是插入和查詢操作的效能。

一般實際中陣列要常用的多,因為快取友好和便於宣告和銷毀吧。

7樓:靈劍

是資料結構,不是資料型別。陣列、鍊錶、棧、佇列、樹,你說的每乙個都是資料結構,它們強調的是資料在記憶體(或外存)中如何組織、如何被演算法使用這件事。資料結構也可以有不同層次,比如說陣列、鍊錶更注重於存放方式,棧、佇列更注重於對外介面,它們可能是同乙個東西的不同層次的抽象。

樹在這裡稍微特殊一些,它有的時候指樹狀結構,這是一種資料結構;有的時候指數學上的樹,它包括了一些元素和元素之間的、有約束的關係,更接近於資料型別一些。

資料型別則指的是資料的內容,而跟組織方式無關。它要求資料的內容符合某些約束條件,比如說:

三個有序的元素

不定長的元素序列

不定大小的元素集合

也可能規定的非常詳細:

第乙個元素是32個二進位制位表示的整數,第二個元素是剛好10個字元的字串,第三個元素是乙個二進位制位的有序三元組

也可能是抽象、泛型的:

包含全部為某種型別T的元素的長度為5的序列

屬於某個資料型別的資料可能按照需要用各種各樣的方式來表示,而不影響資料的內容,比如說在記憶體中可能表示為陣列,可能表示為鍊錶,還可能表示為JSON字串、XML等等。如果資料內容符合這個約束條件,那麼它就可能用相同的一種或幾種資料結構來表示,但資料內容本身是跟資料結構無關的。

8樓:Pluto Hades

@孫明琦 回答的概念性補充

資料型別:https://

zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B

資料結構:https://

zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84

9樓:Belleve

陣列和鍊錶當然是型別,兩者側重點差得遠了

陣列更接近乙個索引到元素型別的對映

鍊錶則是側重「下一項」(單鏈表)/「前後項」(雙鏈表)data

List

:Type

->Type

where

Nil:

List a

Cons

: a ->

List a ->

List a

Array

:Type

->Type

Array a =

(n :

Nat)**(

Morphism

(Range

0 n) a)

至於具體的儲存形式那是另一回事了

有沒有一種資料結構,查詢 刪除和插入效率都比較高呢?

lemon 如果不考慮有序的話,hashtable就很好。如果考慮有序的話,我記得資料庫的索引儲存方式b tree或者skiplist都可以。也可以使用hashtable 雙向鍊錶。輪子哥說的平衡二叉樹很高效,都是lgn。當然還有最強的紅黑樹。 搜竼 跳表或者treap!是的,treap,好多人不知...

什麼是資料結構化?在網際網路產品中有哪些表現形式?

易道博識 提到結構化資料,我們先舉個小例子。哥倫布的航海日誌,複雜繁瑣,外人很難看得懂,叫非結構化資料。後續科學家把日誌經過加工 拆分篩選,變成機器可讀,人也能輕易看懂,這叫結構化資料。也就是說,結構化資料使軟體或服務系統也可以對資訊進行處理。軟體系統無法理解人類的資訊,但是可以理解結構化後的資料。...

PHP為什麼不將函式作為一種資料型別來使用呢?

三色院堇子的老公 因為PHP開發者認為call user func函式用起來挺好的,沒什麼問題,字串引數就字串引數咯,寫錯字串自己改咯。PS.PHP沒有強大完善的物件系統 哈哈哈哈哈哈哈哈哈! 你問的不是太清楚,我給你提供一些相關的方法吧。在函式內部,可以使用魔術變數 FUNCTION 來獲取函式名...