程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法
數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)是一門研究組織數(shù)據(jù)方式的學科, 學好數(shù)據(jù)結(jié)構(gòu)可以編寫出更漂亮、更有效率的代碼
- 數(shù)據(jù)結(jié)構(gòu)是算法的基礎(chǔ), 要想學好算法, 先學好數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)包括線性結(jié)構(gòu)和非線性結(jié)構(gòu)
- 線性數(shù)據(jù)結(jié)構(gòu)
1.數(shù)據(jù)元素之間存在一對一的線性關(guān)系
2.線性結(jié)構(gòu)有兩種不同的存儲結(jié)構(gòu), 順序存儲結(jié)構(gòu)(數(shù)組、隊列和棧)和鏈式存儲結(jié)構(gòu)(鏈表) - 非線性數(shù)據(jù)結(jié)構(gòu)
比如多維數(shù)組、廣義表、樹結(jié)構(gòu)和圖結(jié)構(gòu)
算法
- 算法是程序的靈魂, 優(yōu)秀的程序可以在海量數(shù)據(jù)計算時, 依然保持高速計算
- 現(xiàn)在面試門檻越來越高, 高級程序員必面
看幾個經(jīng)典的算法面試題
- 字符串匹配問題
有一個字符串s1 = "看幾個經(jīng)典的算法面試題"和一個子串s2 = "算法",現(xiàn)在判斷s1是否包含s2, 包含就返回第一次出現(xiàn)的位置, 不包含就返回-1, 請使用最快的速度完成查找。
大部分人首先想到的是暴力匹配,逐個去對比,這種方式雖然簡單,但是效率極低。
哪有沒有什么好的算法呢? (提示: KMP算法) -
漢諾塔游戲
將A塔的所有圓盤移動到C盤,要求小盤不能放到大盤上,一次只能移動一個盤子。
漢諾塔游戲 -
八皇后問題
八皇后問題是一個古老而著名的問題,是回溯算法的經(jīng)典案例。這個問題是由國際西洋棋棋手馬克斯*貝瑟兒于1848年提出,在8乘8的國際象棋盤上擺放八個皇后,使其不能相互攻擊(就是任意兩個皇后不能在同一行、同一列或同一斜線上),問有多少種擺法? (提示: 分治算法)
8皇后游戲 -
馬踏棋盤
將馬放在國際象棋8*8棋盤中的某個方格內(nèi),馬走日進行移動,要求每個方格只能進一次,走遍棋盤64個方格。(提示: 會使用到圖的深度優(yōu)先遍歷算法DFS + 貪心算法)
馬踏棋盤
上面的問題你都會了嗎? 沒的話就繼續(xù)往下學習吧。


