本書旨在幫助讀者筑牢數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ),提升職場(chǎng)競(jìng)爭(zhēng)力。本書代碼采用Java語(yǔ)言編寫,分為上、下兩篇,共15章。其中,第1~9章為上篇,講解數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ),為讀者全面梳理基本知識(shí),內(nèi)容涵蓋線性結(jié)構(gòu)、樹結(jié)構(gòu)、圖結(jié)構(gòu)、排序與查找、窮舉法、遞歸算法、貪心算法、動(dòng)態(tài)規(guī)劃、回溯法;第10~15章為下篇,收集了50多道經(jīng)典且有趣的大廠面試真題,針對(duì)每道題都給出了詳細(xì)的分析和解答,幫助讀者全面提升解決實(shí)際問題的能力,同時(shí)為讀者準(zhǔn)備筆試、面試提供幫助。
本書堅(jiān)持夯實(shí)基礎(chǔ)、注重實(shí)踐、舉一反三的理念,內(nèi)容豐富翔實(shí)、妙趣橫生,講解深入淺出、清晰到位。希望能夠陪伴讀者在輕松愉快的氛圍中學(xué)習(xí)。
本書既可作為計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生以及算法愛好者學(xué)習(xí)用書,也可作為應(yīng)屆畢業(yè)生及社招人員筆試、面試的求職參考書,還可作為培訓(xùn)機(jī)構(gòu)的教材。
全面系統(tǒng)的算法與數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識(shí)講解
豐富有趣的大廠面試題剖析及解題技巧總結(jié)
所有題目標(biāo)注星級(jí),方便讀者自我考量
講解細(xì)致,手把手教學(xué),小白也能輕松掌握
超多圖解,求解過程一目了然
提供完整代碼及測(cè)試程序,方便練習(xí)
在信息科技迅猛發(fā)展的今天,互聯(lián)網(wǎng)、5G、人工智能等已成為炙手可熱的行業(yè),這些行業(yè)憑借其光明的發(fā)展前景和令人羨慕的薪資水平,吸引著一屆又一屆的年輕人,而進(jìn)入這些行業(yè)的門檻也隨之水漲船高。記得在我畢業(yè)找工作時(shí),面試題目比今天容易很多,考查的內(nèi)容基本就是Java或C 的語(yǔ)法知識(shí)和基礎(chǔ)的編程題,最多有一兩道算法題壓軸,用以區(qū)分面試者的水平。但是現(xiàn)在大廠的面試題更側(cè)重于數(shù)據(jù)結(jié)構(gòu)和算法,認(rèn)為這樣更能考查面試者的綜合水平,包括基本的編程能力、計(jì)算機(jī)邏輯思維、數(shù)學(xué)功底,以及對(duì)數(shù)據(jù)結(jié)構(gòu)和算法本身的理解。所以,學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法是通往大廠、獲取高薪的必由之路,大家應(yīng)該認(rèn)真對(duì)待。
如何才能學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法呢?我認(rèn)為大道至簡(jiǎn):只要做到夯實(shí)基礎(chǔ)、注重實(shí)踐、舉一反三,就一定能學(xué)通弄懂。因此在寫作本書的過程中,我力求將這三點(diǎn)貫穿始終,努力為廣大讀者呈現(xiàn)一本適合自學(xué)和自我提高的算法書。
夯實(shí)基礎(chǔ)是指要對(duì)數(shù)據(jù)結(jié)構(gòu)和算法最基礎(chǔ)的知識(shí)點(diǎn)有非常深刻的理解和認(rèn)識(shí)。這就像蓋大樓,地基必須夯實(shí)筑牢,否則蓋出的大樓不會(huì)穩(wěn)固。這似乎不言自明,但是往往容易被大家忽視,F(xiàn)在人們生活節(jié)奏加快,速成、抄近道的想法普遍存在,很多人希望通過背幾個(gè)模板、學(xué)幾個(gè)套路就把數(shù)據(jù)結(jié)構(gòu)和算法搞懂,這其實(shí)是不太可能的。任何知識(shí)體系的構(gòu)建都有其客觀規(guī)律,只有扎扎實(shí)實(shí)地把這些基礎(chǔ)的知識(shí)點(diǎn)學(xué)通透、弄明白,才能穩(wěn)扎穩(wěn)打、步步為營(yíng)。因此我在本書的上篇中用了相當(dāng)大的篇幅為讀者梳理和總結(jié)數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識(shí),目的就是希望讀者在刷題之前能夠溫習(xí)和鞏固這些最基礎(chǔ)、最重要的內(nèi)容。只有這樣,我們構(gòu)建的知識(shí)體系大廈才能穩(wěn)固堅(jiān)硬,不但有利于應(yīng)聘職位,對(duì)于大家今后從事開發(fā)和研究工作也有很多好處。
除了夯實(shí)基礎(chǔ),注重實(shí)踐也是學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法的必要條件。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的最終目標(biāo)是解決實(shí)際問題,所以必須進(jìn)行大量的實(shí)踐和練習(xí),不斷加深理解,進(jìn)而提高水平。我在本書中為讀者整理和分析了大量的題目,旨在幫助讀者通過實(shí)踐和練習(xí)提高自身的水平。
大家在刷題的同時(shí),還應(yīng)該清楚地認(rèn)識(shí)到:題目是無窮無盡的,試圖窮舉出每一個(gè)題目是不可能的。我們?nèi)绾卧谟邢薜臅r(shí)間內(nèi)高效刷題,覆蓋盡可能多的知識(shí)點(diǎn)呢?答案就是舉一反三。對(duì)于一個(gè)問題,我們不應(yīng)當(dāng)只局限于一個(gè)思路、一種解法,而是應(yīng)當(dāng)盡可能多地用不同的方法求解。本書中的題目分析就充分體現(xiàn)出舉一反三的特點(diǎn),很多題目并不拘泥于單一解法,而是采取由易到難、由低級(jí)到高級(jí)的方式給出多種解法,這樣讀者就可以通過一個(gè)問題復(fù)習(xí)多個(gè)知識(shí)點(diǎn),學(xué)習(xí)效率也會(huì)顯著提高。
以上是我的經(jīng)驗(yàn)總結(jié),也是創(chuàng)作本書的核心理念。除此之外,與同類圖書相比,本書還有以下亮點(diǎn)。
結(jié)構(gòu)清晰,內(nèi)容全面
本書分為上、下兩篇。上篇主要介紹數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)知識(shí),為讀者梳理數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí)以及常用的算法思想,方便讀者復(fù)習(xí)和鞏固已有知識(shí)、夯實(shí)理論基礎(chǔ),為后續(xù)刷題打下基礎(chǔ)。下篇主要介紹經(jīng)典的大廠面試題,通過妙趣橫生的數(shù)據(jù)結(jié)構(gòu)和算法題目幫助讀者鞏固基礎(chǔ)、開闊思路,提高職場(chǎng)競(jìng)爭(zhēng)力。
實(shí)例豐富,講解到位
注重實(shí)踐是本書的創(chuàng)作理念和主要特色,書中包含大量編程實(shí)例,從上篇的案例分析到下篇的大廠面試題,每個(gè)題目都經(jīng)過精挑細(xì)選,很值得讀者學(xué)習(xí)研究。同時(shí)每個(gè)題目都使用星號(hào)(★)標(biāo)注其難度,從難度最小的一星(★)到難度最大的四星(★★★★),一目了然。除此之外,講解到位是本書的另一大特點(diǎn),不采用貼代碼式的講解,而是將每個(gè)題目的思考過程清晰地展示給讀者,力求深入淺出、把問題講清講透,使讀者在看懂題目的同時(shí)學(xué)到思考問題的正確方法,從而在遇到類似問題時(shí)能夠舉一反三、觸類旁通。
題目經(jīng)典,妙趣橫生
本書中選取的題目多為經(jīng)典的數(shù)據(jù)結(jié)構(gòu)和算法題目,不但具有明確的針對(duì)性,也經(jīng)常被拿來當(dāng)作大廠的筆試或面試題目,因此具有很高的學(xué)習(xí)價(jià)值和實(shí)用價(jià)值。除此之外,本書中的題目還兼具趣味性,力求讓讀者對(duì)數(shù)據(jù)結(jié)構(gòu)和算法產(chǎn)生興趣,進(jìn)而不再畏懼難題,愿意思考和解決它們。
讀者可以關(guān)注我的微信公眾號(hào)算法匠人并在匠人作品中下載全書源代碼資源。讓我們共同切磋,一起提高。
由于本人水平有限,書中難免存在不足和紕漏之處,歡迎廣大讀者批評(píng)指正。
楊峰
目 錄
上篇 數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)
第 1 章 線性結(jié)構(gòu) ........................................................................................................... 2
1.1 數(shù)組 ........................................................................................................................ 2
1.1.1 數(shù)組的基本概念 ......................................................................................... 2
1.1.2 數(shù)組的定義 ................................................................................................. 3
1.1.3 數(shù)組的基本操作 ......................................................................................... 5
1.1.4 數(shù)組的性能分析 ....................................................................................... 11
1.1.5 案例分析 ................................................................................................... 12
1.2 鏈表 ...................................................................................................................... 19
1.2.1 鏈表的基本概念 ....................................................................................... 19
1.2.2 鏈表的定義 ............................................................................................... 20
1.2.3 鏈表的基本操作 ....................................................................................... 21
1.2.4 鏈表的性能分析 ....................................................................................... 27
1.2.5 不同形態(tài)的鏈表結(jié)構(gòu) ............................................................................... 28
1.2.6 案例分析 ................................................................................................... 29
1.3 棧 .......................................................................................................................... 38
1.3.1 棧的基本概念 ........................................................................................... 38
1.3.2 棧的定義 ................................................................................................... 38
1.3.3 棧的基本操作 ........................................................................................... 40
1.3.4 案例分析 ................................................................................................... 44
1.4 隊(duì)列 ...................................................................................................................... 50
1.4.1 隊(duì)列的基本概念 ....................................................................................... 50
1.4.2 隊(duì)列的定義 ............................................................................................... 50VI ?O
1.4.3 隊(duì)列的基本操作 ....................................................................................... 52
1.4.4 雙端隊(duì)列 ................................................................................................... 56
1.4.5 實(shí)戰(zhàn)分析 ................................................................................................... 56
第 2 章 樹結(jié)構(gòu) ............................................................................................................. 64
2.1 樹的基本概念 ...................................................................................................... 64
2.2 二叉樹 .................................................................................................................. 65
2.3 二叉樹的遍歷 ...................................................................................................... 68
2.4 創(chuàng)建二叉樹 .......................................................................................................... 71
2.5 二叉排序樹與 AVL 樹 ......................................................................................... 76
2.6 案例分析 .............................................................................................................. 81
第 3 章 圖結(jié)構(gòu) ............................................................................................................. 89
3.1 圖的基本概念 ...................................................................................................... 89
3.2 圖的存儲(chǔ)形式 ...................................................................................................... 92
3.3 鄰接表的實(shí)現(xiàn) ...................................................................................................... 94
3.4 圖的遍歷 .............................................................................................................. 97
3.5 案例分析 ............................................................................................................ 103
第 4 章 排序與查找 .................................................................................................... 109
4.1 直接插入排序 .................................................................................................... 109
4.2 冒泡排序 ............................................................................................................ 112
4.3 簡(jiǎn)單選擇排序 .................................................................................................... 114
4.4 快速排序 ............................................................................................................ 117
4.5 希爾排序 ............................................................................................................ 120
4.6 堆排序 ................................................................................................................ 122
4.7 各種排序算法的比較 ........................................................................................ 129
4.8 折半查找算法 .................................................................................................... 130
4.9 案例分析 ............................................................................................................ 132
第 5 章 窮舉法 ........................................................................................................... 139
5.1 窮舉法的基本思想 ............................................................................................ 139
5.2 案例分析 ............................................................................................................ 142
第 6 章 遞歸算法 ....................................................................................................... 149
6.1 遞歸算法的基本思想 ........................................................................................ 149
6.2 案例分析 ............................................................................................................ 150
第 7 章 貪心算法 ....................................................................................................... 159
7.1 貪心算法的基本思想 ........................................................................................ 159
7.2 案例分析 ............................................................................................................ 160
第 8 章 動(dòng)態(tài)規(guī)劃 ....................................................................................................... 168
8.1 動(dòng)態(tài)規(guī)劃算法的基本思想 ................................................................................ 168
8.2 案例分析 ............................................................................................................ 173
第 9 章 回溯法 ........................................................................................................... 185
9.1 回溯法的基本思想 ............................................................................................ 185
9.2 案例分析 ............................................................................................................ 188 <