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