更新時(shí)間:2021-06-22 12:37:37 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1348次
在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)結(jié)構(gòu)(Data Structure)是計(jì)算機(jī)中存儲(chǔ)、組織數(shù)據(jù)的方式。為什么數(shù)據(jù)結(jié)構(gòu)和算法經(jīng)常放在一起討論?算法用來設(shè)計(jì)一種使用計(jì)算機(jī)來解決問題的方法。設(shè)計(jì)高效的算法又是怎么來實(shí)現(xiàn)的?在我們學(xué)習(xí)了計(jì)算機(jī)編程后,也要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法這些基礎(chǔ)內(nèi)容。
我們經(jīng)常會(huì)聽到有人說起:程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法,當(dāng)我們遇到一個(gè)問題,或有一個(gè)需求時(shí),在設(shè)計(jì)程序來解決問題時(shí),其中重要一步就是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)在問題解決中主要用來:
存放要處理的數(shù)據(jù)
實(shí)現(xiàn)算法策略
數(shù)據(jù)結(jié)構(gòu)可以用一個(gè)四元組來表示:
DataStructure = (D, L, S, O)
它包括數(shù)據(jù)元素(D)、數(shù)據(jù)元素之間的邏輯關(guān)系(L)、邏輯關(guān)系在計(jì)算機(jī)中的存儲(chǔ)結(jié)構(gòu)(S)和所規(guī)定的操作(O)這四部分。

計(jì)算機(jī)中數(shù)據(jù)的相關(guān)術(shù)語(yǔ):
數(shù)據(jù)(Data):所有能夠被計(jì)算機(jī)識(shí)別的符號(hào)集合。
數(shù)據(jù)元素(Data Element):數(shù)據(jù)集合中的一個(gè)“個(gè)體”,是數(shù)據(jù)結(jié)構(gòu)中討論的基本單位。
數(shù)據(jù)項(xiàng)(Data Item):是數(shù)據(jù)結(jié)構(gòu)中討論的最小單位,數(shù)據(jù)元素是數(shù)據(jù)項(xiàng)的集合。
數(shù)據(jù)對(duì)象(Data Object):具有相同性質(zhì)的數(shù)據(jù)元素的集合。
(1)邏輯結(jié)構(gòu)
邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間客觀存在的關(guān)系,和數(shù)據(jù)在計(jì)算機(jī)中怎么存儲(chǔ)無關(guān),主要用于人們理解和交流以及指導(dǎo)算法的設(shè)計(jì)。邏輯結(jié)構(gòu)分為四類:
線性結(jié)構(gòu):數(shù)據(jù)元素之間存在一對(duì)一的關(guān)系
樹形結(jié)構(gòu):數(shù)據(jù)元素之間存在一對(duì)多的關(guān)系
圖形結(jié)構(gòu):數(shù)據(jù)元素之間存在多對(duì)多的關(guān)系
集合結(jié)構(gòu):數(shù)據(jù)元素屬于同一個(gè)集合

學(xué)習(xí)研究了這四種邏輯關(guān)系是如何存儲(chǔ)與操作后,以后我們要解決任何問題,只要分析出我們要解決問題的數(shù)據(jù)關(guān)系,都可以通過這四種邏輯關(guān)系來思考,如果關(guān)系比較復(fù)雜,也是由這四種關(guān)系組成的,只要一層一層地分析就可以了。
(2)存儲(chǔ)結(jié)構(gòu)
邏輯結(jié)構(gòu)主要用于算法設(shè)計(jì),而存儲(chǔ)結(jié)構(gòu)用于指導(dǎo)算法編程實(shí)現(xiàn)。存儲(chǔ)結(jié)構(gòu)有基本的兩種結(jié)構(gòu):
順序存儲(chǔ):邏輯上相鄰的元素存儲(chǔ)在物理位置相鄰的存儲(chǔ)單元中
鏈?zhǔn)酱鎯?chǔ):在數(shù)據(jù)元素中添加一些地址域或輔助結(jié)構(gòu),用于存放數(shù)據(jù)元素之間的關(guān)系

順序存儲(chǔ)結(jié)構(gòu)在內(nèi)存中的地址是連續(xù)的,所以存取速度很快,但是在插入或刪除操作效率低。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)在內(nèi)存中地址可以是不連續(xù)的,插入和刪除操作效率高,但查找和遍歷效率低。同樣的邏輯結(jié)構(gòu)(線性、樹形、圖形、集合)既可以采用順序存儲(chǔ)結(jié)構(gòu)也可以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)和關(guān)系。存儲(chǔ)結(jié)構(gòu)的選擇主要考慮算法的效率,算法的時(shí)間和空間哪個(gè)更好,具體選擇哪種和需求有關(guān),基本存儲(chǔ)結(jié)構(gòu)既可以單獨(dú)使用,也可以組合使用。

(3)運(yùn)算操作
數(shù)據(jù)結(jié)構(gòu)中的操作主要是指數(shù)據(jù)元素的查找、插入、刪除、遍歷和排序等等。
算法用來設(shè)計(jì)并實(shí)現(xiàn)一種用計(jì)算機(jī)來解決問題的方法。它滿足下列性質(zhì):
輸入:有零個(gè)或多個(gè)輸入量
輸出:產(chǎn)生至少一個(gè)輸出量
確定性:算法的指令清晰、無歧義
有限性:算法的指令執(zhí)行次數(shù)有限,執(zhí)行時(shí)間有限

我們?cè)谑褂糜?jì)算機(jī)解決產(chǎn)問題的過程可以分為下面五個(gè)步驟:
問題的理解:搞清楚問題的輸入、要求和輸出。
數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):設(shè)計(jì)能處理問題中數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),還要設(shè)計(jì)能支持算法策略的數(shù)據(jù)結(jié)構(gòu)。
算法設(shè)計(jì):選擇算法策略,用適當(dāng)?shù)姆绞矫枋龊椭鸩郊?xì)化算法步驟。
算法分析:發(fā)現(xiàn)有優(yōu)化的地方,返回第二步,重新設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法
程序?qū)崿F(xiàn):用計(jì)算機(jī)編程,定義數(shù)據(jù)結(jié)構(gòu),編寫代碼實(shí)現(xiàn),并高度和運(yùn)行。

一個(gè)需求問題有多種解決方案,我們經(jīng)常需要通過不斷嘗試和積累經(jīng)驗(yàn)才能找到最好的方案,如果我們熟練掌握了基本的數(shù)據(jù)結(jié)構(gòu)和算法,對(duì)于在設(shè)計(jì)高效算法中是有很大幫助的,能更高效地解決需求問題。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"數(shù)據(jù)結(jié)構(gòu)算法是什么",希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)