1. 程式人生 > >資料結構複習(1)

資料結構複習(1)

1.***程式=演算法+資料結構
2.演算法的五個特性:有窮性,確定性,可行性,輸入,輸出
衡量一個演算法要從‘正確性’,‘可讀性’,‘健壯性’,‘效率與低儲存量需求’來考慮
3.時間複雜度與空間複雜度直觀的反映了優劣,不同的演算法可以實現相同的功能我們可以用時間複雜度來衡量一個演算法的好壞,常見的1(輸入輸出),n(迴圈),log以2為底的n次方(最小二乘法)。。
4.線性表與線性連結串列,這其實反映了兩種最常見的儲存方式,順序儲存與鏈式儲存,這兩種方法各有好壞,順序儲存更直觀一個挨著一個儲存密度大,儲存空間利用率高,便於隨機儲存,但是在常用的增刪卻非常無力(經計算每次增刪都要移動表中一半元素,若表很大,損耗的時間和佔用的cup都很浪費資源),鏈式儲存為元素增加了指標域,我們可以通過修改指標來修改資料,很像有邊角的積木將兩個積木拆開將第三塊放在中間就變成了新的積木,但這樣做有每個資料都分出自己的空間給指標域,資料增多問題就會凸顯出來,俗話說三百六十行行行出狀元,沒有好不好嗎,只有你會不會用
5.迴圈連結串列與雙向連結串列,由於使用了指標我們可以不用考慮資料的物理位置,頭尾指標的靈活運用可以產生變種的連結串列,應用與靈活的地方
6.棧:棧1是一種十分重要的資料結構,最基本的特性先進後出,它應用與各個程式中,函式呼叫就遵守先呼叫後返回的原則,正在執行的函式必須在資料區的棧頂
7.佇列:佇列與棧相反有著先進先出的原則,在生活中也很常見佇列中,允許插入的是隊尾,允許刪除的是對頭,用連結串列表示的佇列是鏈佇列。需要注意的是佇列的在佇列的順序儲存中會出現對頭指標隨著資料增刪發生改變的情況,導致對頭指標上升(佇列中有很大空間確無法儲存元素),我們將佇列臆想成一個噬身蛇形狀(環)佇列就自然呈現出空的形狀,
8.串:串是十分常見的資料物件,在多數非數值處理中串也以變數的形式出現,串內有三種機制:定長順序儲存(如同順序儲存,以一組地址連續的儲存單元存放串字元數列,獨特的事先給定長度,多餘的部分會被擷取掉)。堆分配(仍是以一組地址連續的儲存單元存放串字元數列,但使用了堆(自由儲存區)來進行管理,這也是基於字串的複製進行的,優點是對串長沒有限制)。串的塊鏈儲存,這裡涉及到了串的儲存密度=串值所佔儲存位/實際分配儲存位這個公式,串的節點大小不同儲存的資料量也不同,一個節點一個也可以儲存多個也可能只儲存一個
9!!!字串的匹配演算法(查詢):基本思想:從主串S的第pos個字元起和模式的第一個字元比較,若相等則逐個比較後面字元否則從主串下一個字元再重新和模式的字元比較,若模式t的每個字元一次與主串S的連續字元序列相等稱之匹配成功(只是一種效率低下的基本思想)。
KMP演算法:思想,每次匹配不成功的時候不進行指標的回溯,而是利用已經得到的部分匹配結果將模式儘量向後‘滑動‘儘可能遠的位置,來避免無用的操作浪費提高效率,求next值:前兩位是01這是固定的,從第三位開始找前一位,前兩位,等等與前面相同的部分的長度+1為自己的next值