『數(shù)據(jù)』是計(jì)算機(jī)化的信息。它是對(duì)現(xiàn)實(shí)世界的事物采用計(jì)算機(jī)能夠識(shí)別、存儲(chǔ)和處理方式進(jìn)行的描述。例如:整數(shù)、字符、聲音、圖像等都是『數(shù)據(jù)』。
『數(shù)據(jù)元素』是數(shù)據(jù)的基本單位,即數(shù)據(jù)集合中的個(gè)體。有些情況下也把『數(shù)據(jù)元素』稱做結(jié)點(diǎn)或記錄等。
『數(shù)據(jù)項(xiàng)』,一個(gè)數(shù)據(jù)元素可由一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)組成,『數(shù)據(jù)項(xiàng)』是有獨(dú)立含義的數(shù)據(jù)最小可使單位。有時(shí)也把『數(shù)據(jù)項(xiàng)』稱做域、字段等。例如:學(xué)生管理系統(tǒng)中,可以把一個(gè)與學(xué)生有關(guān)的信息作為一個(gè)『數(shù)據(jù)元素』,它由學(xué)號(hào)、姓名、年齡等『數(shù)據(jù)項(xiàng)』,組成。
『數(shù)據(jù)結(jié)構(gòu)』是相互之間存在一種或多種特定關(guān)系的『數(shù)據(jù)元素』的集合。數(shù)據(jù)元素之間的相互關(guān)系稱為結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)包括:邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。
數(shù)據(jù)的邏輯結(jié)構(gòu)只抽象地描述數(shù)據(jù)元素間的邏輯關(guān)系,而不管其在計(jì)算機(jī)中的存儲(chǔ)表示方式。
數(shù)據(jù)的物理結(jié)構(gòu)是數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)器里的實(shí)現(xiàn)。數(shù)據(jù)的物理結(jié)構(gòu)也稱為存儲(chǔ)結(jié)構(gòu)。
數(shù)據(jù)的邏輯結(jié)構(gòu)分為:線性結(jié)構(gòu)和非線性結(jié)構(gòu)。
線性結(jié)構(gòu),各數(shù)據(jù)元素之間的邏輯關(guān)系可以用一個(gè)線性序列簡(jiǎn)單地表示出來,否則稱為非線性結(jié)構(gòu)。
線性結(jié)構(gòu)有線性表、棧和隊(duì)等。
非線性結(jié)構(gòu)有樹、圖等。
『數(shù)據(jù)類型』是一個(gè)值的集合和定義在該值集上的運(yùn)算集合的總稱。這個(gè)概念最早出現(xiàn)在程序語言中,每個(gè)程序語言都提供若干數(shù)據(jù)類型,用于定義變量、常量或表達(dá)式可以取值的范圍,以及可以施于它們的運(yùn)算。
程序語言中的數(shù)據(jù)類型可以分為兩類:
一類是原子類型,其值是不可分解的。例如C語言中的整型、實(shí)型、字符型等。
另一類是結(jié)構(gòu)類型,其值是由若干萬分按某種結(jié)構(gòu)組成的,因此是可以分解的,并且它的萬分還可以是結(jié)構(gòu)的。例如:數(shù)組的值由若干分量組成。
數(shù)據(jù)結(jié)構(gòu)與程序語言中的數(shù)據(jù)類型有關(guān),但兩者并非互相對(duì)應(yīng)的。
一些最基本的數(shù)據(jù)結(jié)構(gòu),例如:記錄、數(shù)組、字符串等在很多情況下程序語言自身已經(jīng)提供相應(yīng)的數(shù)據(jù)類型實(shí)現(xiàn),即指程序語言本身提供了對(duì)這些結(jié)構(gòu)的描述手段和對(duì)它們的操作。
但還有許多數(shù)據(jù)結(jié)構(gòu),在很多程序語言中并沒有相應(yīng)的數(shù)據(jù)類型,需要采用程序語言中提供的基本數(shù)據(jù)類型和供程序員構(gòu)造結(jié)構(gòu)化數(shù)據(jù)類型方法作為工具實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
抽象數(shù)據(jù)類型是指一個(gè)數(shù)學(xué)模型及定義在該模型上的一組操作。
算法是解決某一特定類型問題的有限運(yùn)算序列。
一個(gè)算法應(yīng)該具有下列特性:
(1)有究性。一個(gè)算法必須是在執(zhí)行有限步之后結(jié)束。
(2)確定性。算法的每一步必須是確切地定義的,無二義性。
(3)可行性。算法應(yīng)該是可行的,這意味著算法中描述的運(yùn)算都是相當(dāng)基本的,它們都是可以通過已經(jīng)實(shí)現(xiàn)的基本運(yùn)算執(zhí)行有限次來實(shí)現(xiàn)的。
(4)輸入。一個(gè)算法有0個(gè)或多個(gè)輸入。
(5)輸出。一個(gè)算法有一個(gè)或多個(gè)輸出。
算法的設(shè)計(jì)可以避開具體的計(jì)算機(jī)程序語言,但算法的實(shí)現(xiàn)必須借助程序語言中提供的數(shù)據(jù)類型及其運(yùn)算。
數(shù)據(jù)結(jié)構(gòu)與算法是相輔相成的,它們是利用計(jì)算機(jī)解決實(shí)際問題時(shí)不可缺少的兩個(gè)方面。
數(shù)據(jù)的運(yùn)算是定義在數(shù)據(jù)的邏輯結(jié)構(gòu)上的,但運(yùn)算的具體實(shí)現(xiàn)要在存儲(chǔ)結(jié)構(gòu)上進(jìn)行。
常用的運(yùn)算有查找、插入、刪除、更新和排序等。
一種數(shù)據(jù)結(jié)構(gòu)的優(yōu)劣是由實(shí)現(xiàn)其各種運(yùn)算的算法體現(xiàn)的。
對(duì)數(shù)據(jù)結(jié)構(gòu)的分析實(shí)質(zhì)上也就是對(duì)實(shí)現(xiàn)其各種運(yùn)算的算法的分析。
在算法正確的前提下,算法的執(zhí)行時(shí)間和存儲(chǔ)量需求是分析和評(píng)價(jià)一個(gè)算法的兩個(gè)主要方面。
——復(fù)習(xí)《數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)——譚洗強(qiáng)》第一章
這本書是我02年開始學(xué)的,當(dāng)時(shí)學(xué)的還算認(rèn)真,但學(xué)的也比較糊涂,現(xiàn)在重新復(fù)習(xí)一下。鞏固一下自己的數(shù)據(jù)結(jié)構(gòu)與算法的知識(shí)。
接下來,將會(huì)找一些比較經(jīng)典的數(shù)據(jù)結(jié)構(gòu),算法來研究分析。