資料結構FAQ (轉)
1.何謂資料結構?
資料結構是在整個科學與技術領域上廣泛被使用的術語。它用來反映一個資料的內部構成,即一個資料由那些成分資料構成,以什麼方式構成,呈什麼結構。資料結構有邏輯上的資料結構和物理上的資料結構之分。邏輯上的資料結構反映成分資料之間的邏輯關係,而物理上的資料結構反映成分資料在計算機內部的安排。資料結構是資料存在的形式。
資料結構是資訊的一種組織方式,其目的是為了提高演算法的,它通常與一組演算法的集合相對應,透過這組演算法集合可以對資料結構中的資料進行某種操作。
2.資料結構主要研究什麼?
資料結構作為一門學科主要研究資料的各種邏輯結構和儲存結構,以及對資料的各種操作。因此,主要有三個方面的內容:資料的邏輯結構;資料的物理儲存結構;對資料的操作(或演算法)。通常,演算法的設計取決於資料的邏輯結構,演算法的實現取決於資料的物理儲存結構。
3.什麼是資料?什麼是結構?什麼是邏輯結構和物理結構?
資料是指由有限的符號(比如,"0"和"1",具有其自己的結構、操作、和相應的語義)組成的元素的集合。結構是元素之間的關係的集合。通常來說,一個資料結構DS 可以表示為一個二元組:
DS=(D,S), //i.e., data-structure=(data-part,logic-structure-part)
這裡D是資料元素的集合(或者是“結點”,可能還含有“資料項”或“資料域”),S是定義在D(或其他集合)上的關係的集合,S = { R | R : D×D×...},稱之為元素的邏輯結構。
邏輯結構有四種基本型別:集合結構、線性結構、樹狀結構和結構。表和樹是最常用的兩種高效資料結構,許多高效的演算法可以用這兩種資料結構來設計實現。表是線性結構的(全序關係),樹(偏序或層次關係)和圖(區域性有序(weak/local orders))是非線性結構。
資料結構的物理結構是指邏輯結構的儲存映象(image)。資料結構 DS 的物理結構 P 對應於從 DS 的資料元素到儲存區M(維護著邏輯結構S)的一個對映:
P:(D,S) --> M
儲存器模型:一個儲存器 M 是一系列固定大小的儲存單元,每個單元 U 有一個唯一的地址 A(U),該地址被連續地編碼。每個單元 U 有一個唯一的後繼單元 U'=succ(U)。
P 的四種基本對映模型:順序(sequential)、連結(linked)、(indexed)和雜湊(hashing)對映。
因此,我們至少可以得到4×4種可能的物理資料結構:
sequential (sets)
linked lists
indexed trees
hash graphs
(並不是所有的可能組合都合理)
4.資料結構(DS)上的操作:
所有的定義在DS上的操作在改變資料元素(節點)或節點的域時必須保持DS的邏輯和物理結構。
5. DS上的基本操作:
任何其他對DS的高階操作都可以用這些基本操作來實現。最好將DS和他的所有基本操作看作一個整體——稱之為模組。我們可以進一步將該模組抽象為資料型別(其中DS的儲存結構被表示為私有成員,基本操作被表示為公共方法),稱之為ADT。作為ADT,堆疊和佇列都是一種特殊的表,他們擁有表的操作的子集。
對於DATs的高階操作可以被設計為(不封裝的)演算法,利用基本操作對DS進行處理。
6.好的和壞的DS:
如果一個DS可以透過某種“線性規則”被轉化為線性的DS(例如線性表),則稱它為好的DS。好的DS通常對應於好的(高效的)演算法。這是由計算機的計算能力決定的,因為計算機本質上只能存取邏輯連續的單元,因此如果沒有線性化的結構邏輯上是不可計算的。比如對一個圖進行操作,要訪問圖的所有結點,則必須按照某種順序來依次訪問所有節點(要形成一個偏序),必須透過某種方式將圖固有的非線性結構轉化為線性結構才能對圖進行操作。
樹是好的DS——它有非常簡單而高效的線性化規則,因此可以利用樹設計出許多非常高效的演算法。樹的實現和使用都很簡單,但可以解決大量特殊的複雜問題,因此樹是實際中最重要和最有用的一種資料結構。樹的結構本質上有遞迴的性質——每一個葉節點可以被一棵子樹所替代,反之亦然。實際上,每一種遞迴的結構都可以被轉化為(或等價於)樹形結構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004676/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++資料結構和pb資料結構的轉換C++資料結構
- 資料庫結構操作 (轉)資料庫
- SMTH Java FAQ (2) 資料轉換(菜鳥必看) (轉)Java
- Linux核心資料結構(轉)Linux資料結構
- ICMP 頭部資料結構 (轉)資料結構
- mysql資料目錄結構(轉)MySql
- 結構化資料、半結構化資料和非結構化資料
- 玩轉資料結構之陣列資料結構陣列
- Java中的資料結構(轉載)Java資料結構
- JavaScript 資料由駝峰結構轉下劃線結構JavaScript
- 【資料結構篇】認識資料結構資料結構
- 資料結構學習(C++)——圖(總結) (轉)資料結構C++
- 資料結構學習(C++)——樹(總結) (轉)資料結構C++
- 資料結構小白系列之資料結構概述資料結構
- 轉載] magento 產品資料表結構
- linux核心資料結構之kfifo【轉】Linux資料結構
- 資料結構–進位制(任意)轉換資料結構
- 資料結構 中綴表示式轉化資料結構
- TS基本概念和資料結構(轉資料結構
- 資料結構學習(C++)——序言 (轉)資料結構C++
- 資料結構學習筆記(一) (轉)資料結構筆記
- 資料結構?資料結構
- 資料結構資料結構
- C#資料結構篇(一連結串列類) (轉)C#資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- Oracle資料庫網路與安全之FAQ彙集(轉)Oracle資料庫
- 資料結構與演算法-反轉排序資料結構演算法排序
- ERP中的製造資料結構(轉)資料結構
- 資料結構與演算法總論 (轉)資料結構演算法
- C#資料結構篇(二 堆疊) (轉)C#資料結構
- Linux Data Structures(Linux資料結構)(轉)LinuxStruct資料結構
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- QuickBI助你成為分析師——資料來源FAQ小結UI
- 資料結構學習(C++)——迴圈連結串列 (轉)資料結構C++
- 資料結構學習(C++)——雙向連結串列 (轉)資料結構C++
- 資料結構-棧資料結構
- 資料結構-堆資料結構
- 資料結構-集合資料結構