前言
關(guān)于個人這段日子,一些碎片化時間的利用,算是積累也是分享,如有不足還請指教。
也有三個多月,86%以上都已完結(jié),今后會繼續(xù)更新,填充,畢竟學習是無盡的。
Gitee倉庫地址
https://gitee.com/TK_LIMR/DatastructureAndAlgorithm.git
友情地址
23種設(shè)計模式:http://www.itdecent.cn/p/63df8cd03619
目錄
一、數(shù)據(jù)結(jié)構(gòu):
1.1、稀疏數(shù)組
1.2、隊列
2.1、鏈表{單向,雙向}
2.2、Josephu(約瑟夫)問題---單向環(huán)形(也稱丟手絹問題)
------------------------------------------加餐??---------------------------------------
2.3、跳表【跳躍鏈表】
2.4、Lru【雙向鏈表+HashMap】
------------------------------------------加餐??---------------------------------------
3、棧及波蘭表達式{前,中,后綴【以及轉(zhuǎn)換】} ----> 棧,波蘭表達式兩套計算器實現(xiàn)
3.1、棧
3.2、波蘭表達式
4、遞歸及回溯算法 ----> 八皇后問題
4.1、遞歸
4.2、回溯算法
4.3、八皇后問題
5、排序算法(插入【直插,希爾】,選擇【簡單,堆】,交換【冒泡,快速】,并歸,基數(shù))
5.0、算法的時間復雜度
5.1、插入算法
5.2、選擇算法
5.3、交換算法
5.4、歸并算法
5.5、基數(shù)算法
------------------------------------------加餐??---------------------------------------
5.6、TimSort算法【插入+歸并】
------------------------------------------加餐??---------------------------------------
6、查找算法(線性,二分,插值,斐波那契{也稱黃金分割})
6.1、線性查找算法
6.2、二分查找算【遞歸】
6.3、插值查找算法
6.4、斐波那契查找(黃金分割)算法
7、哈希表(散列):增刪改查
7.1、哈希表(散列)
8、基礎(chǔ)樹結(jié)構(gòu)(二叉樹,順序存儲二叉樹,線索化二叉樹),注:標題不刪除
8.0、數(shù)組-鏈表-樹區(qū)別
8.1、二叉樹
8.2、順序存儲二叉樹
8.3、線索化二叉樹
9、樹結(jié)構(gòu)場景(堆排序,赫夫曼樹,赫夫曼編碼,二叉排序樹,平衡二叉樹(AVL樹))
9.1、堆排序
9.2、赫夫曼樹
9.3、赫夫曼編碼
9.4、二叉排序樹
9.5、平衡二叉樹(AVL樹)
9.5、紅黑樹(AVL樹)
10、多路查找樹(二叉樹與B樹,2-3樹,B樹、B+樹和B*樹)
10.0、二叉樹與B樹,2-3樹,B樹、B+樹和B*樹【★】
10.1、二叉樹與B樹 【↑】
10.2、2-3樹 【↑↑】
10.3、B樹 【↑↑↑】
10.4、B+樹和B*樹 【↑↑↑↑】
11、圖(深度優(yōu)先搜索和廣度優(yōu)先搜索)
11.1、圖(DFS and BFS )
二、十大常用算法
1、二分查找【非遞歸】
2、分治算法【漢諾塔傳說】
3、動態(tài)規(guī)劃【背包問題】
4、KMP【暴力匹配? no no no】
5、貪心算法【我只要最好!】
6、普里姆算法【修路問題--最小生成樹】
7、克魯斯卡爾算法【公交車問題--最小生成樹】
8、迪杰斯特拉算法【最短路徑算法 --- 某一個頂點到其他頂點的最短路徑】
9、弗洛伊德算法【最短路徑算法 --- 各個頂點之間的最短路徑】
10、馬踏棋盤算法【騎士周游問題 --- DFS(回溯)+貪心算法】
------------------------------------------加餐??---------------------------------------
11、雪花算法【傳說,是UUID的 前輩(千倍)】
------------------------------------------加餐??---------------------------------------
算法和數(shù)據(jù)結(jié)構(gòu)分類
1、我們寫的程序他和數(shù)據(jù)結(jié)構(gòu)還有算法什么關(guān)系呢?其實 程序=數(shù)據(jù)結(jié)構(gòu)+算法
2、首先算法的分類其實很多,每個領(lǐng)域的算法懂不同,人工智能的話(數(shù)據(jù)挖掘,機器學習,圖像識別)
java的話(基本算法,數(shù)據(jù)結(jié)構(gòu)算法,最短路徑動態(tài)規(guī)劃等等),
但是我覺得學java作為應用型人才,主要的還是基本算法,分為排序和搜索
3、數(shù)據(jù)結(jié)構(gòu)的分類:線性結(jié)構(gòu)和非線性結(jié)構(gòu)。
線性:數(shù)組,隊列,鏈表,棧
非線性:二維數(shù)組,多維數(shù)組,廣義表,樹結(jié)構(gòu),圖結(jié)構(gòu)
知識點補充:數(shù)據(jù)的邏輯結(jié)構(gòu)
1.集合:數(shù)據(jù)結(jié)構(gòu)中的元素之間除了“同屬一個集合” 的相互關(guān)系外,別無其他關(guān)系
2.線性結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對一的相互關(guān)系;
3.樹形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對多的相互關(guān)系;
4.圖形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在多對多的相互關(guān)系。
百度百科中數(shù)據(jù)結(jié)構(gòu)補充:
image.png
image.png

