Java數(shù)據(jù)結(jié)構(gòu)與算法

剛學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法時(shí)冯丙,就被告知?“程序=算法+數(shù)據(jù)結(jié)構(gòu)”既绩,而這段話來自于對(duì)點(diǎn)計(jì)算機(jī)科學(xué)家Niklaus Wirth在1976年出版的一本書的書名怠褐,后來這句話也成為計(jì)算機(jī)工作者之間流傳的一句名言昌腰,小編也用慘痛的經(jīng)歷告訴大家這也是一個(gè)很重要的知識(shí)點(diǎn)褂删。


那么到底什么是數(shù)據(jù)結(jié)構(gòu)和算法飞醉,數(shù)據(jù)結(jié)構(gòu)算法又有什么用呢?

首先來說說什么是數(shù)據(jù)結(jié)構(gòu)屯阀,直接上圖


從圖中我們可以很直觀的看出數(shù)據(jù)結(jié)構(gòu)涵蓋的內(nèi)容缅帘。

算法的介紹就相對(duì)抽象了,百度百科給出的解釋是

算法是對(duì)特定問題求解步驟的一種描述蹲盘,它是指令的有限序列股毫,其中每一條指令表示一個(gè)或者多個(gè)操作。

但是我們從他的特性來理解就會(huì)簡(jiǎn)單多了召衔。

算法主要有五個(gè)特性

· 有窮性:指令序列是有限的

· 確定性:每條語句的含義明確铃诬,無二義性

· 可行性:每條語句都應(yīng)在有限的時(shí)間內(nèi)完成

· 輸入:零個(gè)或者多個(gè)輸入

· 輸出:一個(gè)或者多個(gè)輸出?


說到數(shù)據(jù)結(jié)構(gòu)算法的用處,當(dāng)你用著java容器類很爽的時(shí)候苍凛,你有沒有想過趣席,怎么ArrayList像一個(gè)無限擴(kuò)充的數(shù)組,也好像一個(gè)鏈表醇蝴。好用嗎宣肚?當(dāng)然好用這就是數(shù)據(jù)結(jié)構(gòu)的用處,只不過你在不知不覺中使用了悠栓。

用于現(xiàn)實(shí)世界的存儲(chǔ)霉涨,我們使用的工具和建模。每種數(shù)據(jù)結(jié)構(gòu)有自己的優(yōu)點(diǎn)和缺點(diǎn)惭适,想想如果Google的數(shù)據(jù)用的是數(shù)組的存儲(chǔ)笙瑟,我們還能方便地查詢到所需要的數(shù)據(jù)嗎。

而算法癞志,在這么多的數(shù)據(jù)中如何做到最快的插入往枷,查找,刪除,也是在追求更快错洁。

說了這么多

算法和程序到底有什么區(qū)別呢秉宿?

程序是軟件開發(fā)人員根據(jù)用戶需求開發(fā)的、用程序設(shè)計(jì)語言描述的適合計(jì)算機(jī)執(zhí)行的指令(語句)序列屯碴。除此描睦,程序還包括四個(gè)要素,數(shù)據(jù)結(jié)構(gòu)窿锉、算法酌摇、程序設(shè)計(jì)方法、編程語言嗡载。

程序與算法又不同窑多。程序是算法用某種程序設(shè)計(jì)語言的具體實(shí)現(xiàn)。程序可以不滿足算法的有窮性洼滚,比如操作系統(tǒng)也是一種程序埂息,如果你愿意,你的電腦可以一直開著遥巴,保持操作系統(tǒng)的運(yùn)行千康。

程序、算法铲掐、軟件之間又存在著一定的關(guān)系:

程序:算法的計(jì)算機(jī)實(shí)現(xiàn)拾弃。用某種編程語言實(shí)現(xiàn)。

算法:表示問題的解摆霉。

軟件:程序+文檔?


算了豪椿,還是用圖片來表達(dá)他們相互之間的關(guān)系更加容易理解?


干貨太多就顯得太死板,下面來說說和技術(shù)無關(guān)的携栋。

大學(xué)里那本嚴(yán)蔚敏的數(shù)據(jù)結(jié)構(gòu)搭盾,大家都不陌生吧。 雖然不厚婉支,但是相信仍然會(huì)在多年后支配大家的恐懼鸯隅。?


這本書中的內(nèi)容也算豐富,但是對(duì)于復(fù)雜問題的講解就很少了向挖。

后來在知乎看到濤吳的回答蝌以,覺得很有意思,這里引用一下他的回答:?

如果說 Java 是自動(dòng)檔轎車何之,C 就是手動(dòng)檔吉普跟畅。數(shù)據(jù)結(jié)構(gòu)呢?是變速箱的工作原理帝美。你完全可以不知道變速箱怎樣工作,就把自動(dòng)檔的車子從 A 開到 B,而且未必就比懂得的人慢悼潭。

寫程序這件事庇忌,和開車一樣,經(jīng)驗(yàn)可以起到很大作用舰褪,但如果你不知道底層是怎么工作的皆疹,就永遠(yuǎn)只能開車,既不會(huì)修車占拍,也不能造車略就。如果你對(duì)這兩件事都不感興趣也就罷了,數(shù)據(jù)結(jié)構(gòu)懂得用就好晃酒。但若你此生在編程領(lǐng)域還有點(diǎn)更高的追求表牢,數(shù)據(jù)結(jié)構(gòu)是繞不開的課題。?


Java 替你做了太多事情贝次,那么多動(dòng)不動(dòng)還支持范型的容器類崔兴,加上垃圾收集,會(huì)讓你覺得編程很容易蛔翅。但你有沒有想過敲茄,那些容器類是怎么來的,以及它存在的意義是什么山析?最粗淺的堰燎,比如 ArrayList 這個(gè)類,你想過它的存在是多么大的福利嗎——一個(gè)可以隨機(jī)訪問笋轨、自動(dòng)增加容量的數(shù)組秆剪,這種東西 C 是沒有的,要自己實(shí)現(xiàn)翩腐。

但是鸟款,具體怎么實(shí)現(xiàn)呢?如果你對(duì)這種問題感興趣茂卦,那數(shù)據(jù)結(jié)構(gòu)是一定要看的何什。甚至,面向?qū)ο缶幊谭妒奖旧淼攘褪莻€(gè)數(shù)據(jù)結(jié)構(gòu)問題:怎么才能把數(shù)據(jù)和操作數(shù)據(jù)的方法封裝到一起处渣,來造出 class / prototype 這種東西?

此外蛛砰,很重要的一點(diǎn)是罐栈,數(shù)據(jù)結(jié)構(gòu)也是通向各種實(shí)用算法的基石,所以學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)都是提升內(nèi)力的事情泥畅。?


反正我有醍醐灌頂?shù)母杏X荠诬,能把復(fù)雜的東西這么通俗的講解出來,大牛的視角果然與常人不同。

其實(shí)當(dāng)你生活中的編程問題需要解決的時(shí)候柑贞,你會(huì)發(fā)現(xiàn)到處都是數(shù)據(jù)結(jié)構(gòu)的使用方椎,像基金買入買出不是隊(duì)列嗎,先進(jìn)先出钧嘶;像簡(jiǎn)單的一個(gè)班級(jí)學(xué)生的數(shù)據(jù)保存棠众,用個(gè)數(shù)組不就可以解決了嗎;再復(fù)雜的游戲路線問題有决,這不是圖的問題嗎闸拿;Java里面有Tree這字的,其實(shí)不也是用到樹的原理嗎书幕??

種種下來新荤,你會(huì)發(fā)現(xiàn),原來現(xiàn)實(shí)問題和語言里面的封裝按咒,都是和這些有聯(lián)系的迟隅,每當(dāng)你學(xué)會(huì)一種,就會(huì)恍然大悟励七,這不就是當(dāng)年西湖河畔的夏雨荷智袭,就是這種感覺。

好了掠抬,關(guān)于數(shù)據(jù)結(jié)構(gòu)今天就聊這么多吼野。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市两波,隨后出現(xiàn)的幾起案子瞳步,更是在濱河造成了極大的恐慌,老刑警劉巖腰奋,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单起,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劣坊,警方通過查閱死者的電腦和手機(jī)嘀倒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來局冰,“玉大人测蘑,你說我怎么就攤上這事】刀” “怎么了碳胳?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沫勿。 經(jīng)常有香客問我挨约,道長(zhǎng)味混,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任诫惭,我火速辦了婚禮惜傲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贝攒。我一直安慰自己,他們只是感情好时甚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布隘弊。 她就那樣靜靜地躺著,像睡著了一般荒适。 火紅的嫁衣襯著肌膚如雪梨熙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天刀诬,我揣著相機(jī)與錄音咽扇,去河邊找鬼。 笑死陕壹,一個(gè)胖子當(dāng)著我的面吹牛质欲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糠馆,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嘶伟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了又碌?” 一聲冷哼從身側(cè)響起九昧,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毕匀,沒想到半個(gè)月后铸鹰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皂岔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蹋笼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凤薛。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姓建,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缤苫,到底是詐尸還是另有隱情速兔,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布活玲,位于F島的核電站涣狗,受9級(jí)特大地震影響谍婉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镀钓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一穗熬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丁溅,春花似錦唤蔗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涯穷,卻和暖如春棍掐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拷况。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工作煌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赚瘦。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓粟誓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親起意。 傳聞我的和親對(duì)象是個(gè)殘疾皇子努酸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容