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