初學資料結構,怎麼理解書上的這句話?

時間 2021-06-03 17:34:53

1樓:Judd

我的觀點是計算機類書籍一定不能看中文翻譯版。比如截圖裡集合的 complement 翻譯為取餘,不知道譯者是上哪學的高中。

可以看看抽象代數,把 ADT 理解成乙個代數系統,也可以看看 Haskell 的 type class。

2樓:Cyandev

面向介面(協議)程式設計,ADT 是對於集合型別的抽象,拿 List 舉例,ArrayList 和 LinkedList 都可以盛放一組資料,雖然他們內部實現原理不同,但是都可以通過相同一組 API 去對他們進行操作。

3樓:

鑑於題主新學資料結構,我就囉嗦點。

抽象資料型別是乙個為了脫離計算機儲存和演算法這些具體的描述而定義的乙個概念,它由兩個部分組成:資料物件集和操作集。

資料物件集表明你要操作的資料是什麼:比如點、向量或者矩陣。

操作集表明你想要對這些資料做什麼操作,比如對向量的點積、叉積。

資料物件集不能只存在腦子裡,它必須讓計算機來表達,具體表達方法就是資料結構。比如線性表是乙個抽象資料型別,具體表達的時候可以用陣列也可以用鍊錶這兩種資料結構來描述。

操作集也不能你說從線性表裡查詢乙個數,這個數就自動出來了。其需要讓計算機來找,具體找的方法就是演算法,比如順序查詢、二分查詢等。

回到題目,集合是一種抽象資料型別。

資料物件集:一組型別相同且無序的資料。

操作集:並、交、補、差、查詢等等。

而你給的這句話描述的抽象資料型別叫並查集,它和集合相同點很多,不同點在於它只提供並和查詢這兩種操作。它是新的抽象資料型別麼?就像輪子哥給的繼承例子,它們雖然相似但畢竟不同。

4樓:

就以Set為例,它本身有求交集,求並集等方法。如果想要有查詢方法,就需要實現Hashtable,然後就是hashset,這就是一種新的資料結構。

5樓:

書上明確定義了ADT的含義,一些操作的集合。這裡強調的是一組操作,描述中說明了那是兩組不同的操作的集合所以是兩種不同的ADT

6樓:亞特蘭蒂斯基

你要不要考慮轉行?

要想理解資料結構,你需要先了解計算機結構和資料的訪問,以及一些數學上的概念。很抽象,很難找到一種通俗的說法……

建議你不要較真,ADT之類的就是乙個抽象的概念,你去找定義,也就是一堆更加抽象的概念的組合……

這個你可以先保留,了解說法,整本書看完應該就理解了

7樓:

大概意思是你可以定義一種基礎資料型別叫集合,然後這種叫集合的資料型別允許那一大堆操作;然而你也可以只宣告兩種操作,然後你需要用到其他操作的時候再加進來擴充套件成一種新的集合!

比如定義樹只有簡單的操作,然後通過擴充套件屬性和操作你可以有二叉樹,二叉平衡樹,什麼線段樹,什麼order-statistic tree 什麼interval tree等等等等,說到底還是樹,不過擁有更多屬性和操作!你也可以一開始在基本的樹上定義這些屬性和操作,不過那樣太複雜了!

8樓:

ADT 是資料元素,關係和操作的集合。

例: 即使它們的物理結構和邏輯結構相同,

二叉樹和二叉排序樹是兩種不同的資料結構。

就好像有些回答, 把別人說過的話加兩句不一定正確的廢話, 就是乙個新的回答了.

當然, 最好是像 @vczh 那樣, 繼承一下.

這樣只需要新增或者過載某些操作.

方便復用和維護.

9樓:

這是一種一般化模型的思想。

1、就象代數中的1、2、3等數字,是對1、2、3個蘋果,1、2、3個梨子等這樣的抽象。

2、在現實中,存在各種各樣的資料組織形式。不僅僅只有數字、字元,還有各種千變萬化的更複雜的由基本資料型別所形成的組合形式。而且,這些組合,也有相應的各種運算方式。

3、那麼,就有乙個問題,怎麼更一般地描述現實中的各種資料形式及其運算,或者說建立乙個通用模型?這個問題類似於物理等其它學科一樣。

4、於是,拋掉現實中的資料的具體特徵,只保留資料組織及其操作這兩個特徵,就可以得到所想要的一般化模型。

也就是說,任何現實中的資料,必然有某種資料組織,無論是什麼樣的資料,當然,在這種一般化中,並不關心究竟是什麼樣的資料組織,或者說,資料組織這個特徵,連是什麼組織形式都不包含,只有最一般的資料組織。打個比方說,我只用知道雞是乙個動物就可以了,連是什麼動物,什麼是動物等都不關心。

同樣地,任何現實中的資料,必然有某種運算方式,無論是什麼樣的資料,當然,在這種一般化中,也不關心究竟是什麼樣的運算方式,同理類推。

5、這樣,就得到了資料結構中的抽象資料型別。

6、抽象資料型別的一般化目的和好處,類似於數學、物理等其它學科的一般化,特別是得到了乙個通用模型。

7、之後,對於具體的現實問題,可以再將這個模型具體化。

8、掌握這個一般化的思想、以及通過資料結構課程的模型具體化方式的能力訓練後,就能夠自如地處理現實中的各種各樣的具體資料。

9、這種一般化模型的思想,普遍運用到各個學科、各門課程。尤其是符號化的一般化模型,基本上是近現代的基本手段。所以智商測驗多用圖畫代表一種符號。

10、能夠早一點認識到符號的存在,能夠早一點認識到模型一般化的存在,對於智力的發展是有無比重要的好處。

10樓:Ted Yu

個人的理解是,抽象資料型別 ADT 是由操作定義的,改變了操作的集合就是定義另外乙個 ADT 了,即使乙個 ADT 的操作是另乙個的操作的子集。

11樓:

看了一些例子啊自己就懂了。

我們之前一開始學的時候是複數這個抽象資料型別。那Complex操作就加減乘數這些。

可以看到乙個抽象資料型別是由許多操作組成。

「對於集合ADT,我們可以有諸如並(union)、交(intersection)、測定大小(size)以及取餘(complement)等操作。或者,我們也可以只要兩種操作:並和查詢(find),這兩種操作又在該集合上定義了一種不同的ADT。

」題主說的這句話,就是不同的資料結構有不同操作,但是並查這兩種操作啊,就像輪子哥說的父類,它們是爸爸啊

怎麼學好資料結構?

Tiam 首先要明白資料結構的框架 接下來一點一點往這個框架中填充內容 適合於將很多元素都為0的陣列轉換為規模較小的陣列表示例如 將以上陣列用稀疏陣列表示即為 第一行記錄原陣列一共有幾行幾列,有多少非零數字 隨後每一行記錄乙個有效數字的位置資訊以及數值 digolds 你可以參考以下教程,我列舉了幾...

資料結構到底該怎麼學

digolds 資料結構是比較基礎的知識點,而且是許多軟體從業人員必須掌握的。要想學好資料結構,你需要將常見的資料結構列舉出來,正如下面的文章所示 資料結構 當然,如果你配備一定的演算法,那麼也會幫助你提高對資料結構的認識 演算法https digolds.cn article 0016 08391...

《資料結構與演算法分析C語言描述》真的適合初學者嗎

看前言 本書適合作為高階資料結構 CS7 課程或是研究生第一年演算法分析課程的教材。學生應該具有中等程度的程式設計知識,包括像指標和遞迴這樣一些內容,還要具有離散數學的某些知識。 法布 初學者看這個會覺得很吃力,注意看一下這本書前言中的介紹 本書適合作為高階資料結構 CS7 課程或者研究生第一年演算...