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