數(shù)據(jù)結(jié)構(gòu)都是相通的么?
網(wǎng)友解答: 回答是肯定的。數(shù)據(jù)結(jié)構(gòu)重點(diǎn)關(guān)注兩個(gè)方面:一個(gè)是數(shù)據(jù)的組織形式(按照ADT來(lái)理解)和功能接口設(shè)計(jì),另一個(gè)就是數(shù)據(jù)的物理存取。數(shù)據(jù)結(jié)構(gòu)必然需要通過(guò)一門(mén)語(yǔ)言作為表達(dá)工具。對(duì)于不同的
回答是肯定的。
數(shù)據(jù)結(jié)構(gòu)重點(diǎn)關(guān)注兩個(gè)方面:一個(gè)是數(shù)據(jù)的組織形式(按照ADT來(lái)理解)和功能接口設(shè)計(jì),另一個(gè)就是數(shù)據(jù)的物理存取。
數(shù)據(jù)結(jié)構(gòu)必然需要通過(guò)一門(mén)語(yǔ)言作為表達(dá)工具。對(duì)于不同的語(yǔ)言,在基本類型的特點(diǎn)和操作方面會(huì)有差異,比如你在用C指針的時(shí)候,到Java就會(huì)相應(yīng)地使用引用;比如你用C可以malloc動(dòng)態(tài)分配內(nèi)存,而到Java這部分你就需要靠Java提供數(shù)組(由Jvm來(lái)分配內(nèi)存)。掌握了數(shù)據(jù)結(jié)構(gòu)的核心思想,在不同語(yǔ)言之間切換是無(wú)壓力的。
對(duì)于數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ),首先不要在腦海中將它固化為內(nèi)存存儲(chǔ)(書(shū)本上知識(shí)為方便講述數(shù)據(jù)結(jié)構(gòu)本身的知識(shí)而直接使用語(yǔ)言提供的各種內(nèi)實(shí)現(xiàn))。一般說(shuō)來(lái),內(nèi)存不是瓶頸的時(shí)候,我們可以為了性能盡量使用內(nèi)存,大多數(shù)語(yǔ)言在基礎(chǔ)類庫(kù)方面都有常用數(shù)據(jù)結(jié)構(gòu)(如棧、隊(duì)列)基于內(nèi)存存儲(chǔ)的實(shí)現(xiàn)。而在需要持久化的時(shí)候選擇合適的策略來(lái)保障數(shù)據(jù)安全性。
一般在處理業(yè)務(wù)級(jí)別時(shí),載入內(nèi)存的是部分已經(jīng)篩選過(guò)的數(shù)據(jù)(比如數(shù)據(jù)庫(kù)分頁(yè)查詢),這部分?jǐn)?shù)據(jù)基本都不會(huì)涉及大量的內(nèi)存使用。但是一旦你要面對(duì)大量數(shù)據(jù)處理或者高并發(fā)且需要考慮內(nèi)存限制時(shí),就需要配合大容量的磁盤(pán)和內(nèi)存一起來(lái)做數(shù)據(jù)結(jié)構(gòu)的存取設(shè)計(jì)。這一點(diǎn),你只要聯(lián)系數(shù)據(jù)庫(kù)的索引的設(shè)計(jì)就能明白。
總結(jié)數(shù)據(jù)結(jié)構(gòu)的核心還是數(shù)據(jù)結(jié)構(gòu)的思想,到了具體使用的時(shí)候,會(huì)根據(jù)實(shí)際情況在結(jié)構(gòu)(比如是數(shù)據(jù)內(nèi)嵌到結(jié)構(gòu)中,還是結(jié)構(gòu)內(nèi)嵌到數(shù)據(jù)中)和存儲(chǔ)方面(同時(shí)影響接口的具體實(shí)現(xiàn))做調(diào)整。所以,如果你發(fā)現(xiàn)換門(mén)語(yǔ)言就有點(diǎn)困難就說(shuō)明掌握還不夠,掌握數(shù)據(jù)結(jié)構(gòu)的重點(diǎn)在于多用多思考多總結(jié)。
網(wǎng)友解答:我學(xué)數(shù)據(jù)結(jié)構(gòu)也是學(xué)的c語(yǔ)言版。java,Python,c++我都會(huì)。在做過(guò)一些項(xiàng)目時(shí)都實(shí)踐過(guò)。我感覺(jué),數(shù)據(jù)結(jié)構(gòu)就是講數(shù)據(jù)高效組織的,說(shuō)白了就是對(duì)內(nèi)存的理解。學(xué),還是為了用??!如果你用不好,還是沒(méi)學(xué)到位。