演算法的時間複雜度,即演算法的時間量度t(n),一般來說,依賴於問題的規模n。通常演算法中基本操作被重複執行的次數是問題規模n的某個函式f(n),演算法的時間複雜度主要分析t(n)的數量級,而演算法中基本運算的頻度f(n)和t(n)是同數量級的,演算法的時間量度記作:t(n)=o(f(n)),其中』o』的含義是t(n)的數量級。
按數量級遞增排列,常見的時間複雜度有:常數階o(1),對數階o(log2(n)),線性階o(n),線性對數階o(nlog2(n)),平方階o(n2),立方階o(n3),k次方階o(nk),指數階o(2n)。
隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。
順序表和和鍊錶都是儲存結構
順序表的特點是表中元素的邏輯順序和物理順序相同,因而具有隨機訪問的特性,其優點是可以隨機訪問表中任一元素,隨機訪問任一元素,因而也鑄成了它的缺點,在插入或刪除的時候,需要移動大量的元素,需要預先分配足夠大的空間;
鍊錶是通過指標來表示元素間的邏輯關係,它的優點是解決了順序表需要大量連續儲存空間的缺點,動態儲存分配不會造成溢位,操作靈活,但它的缺點正是,需要比順序表多出一倍的儲存空間來存放指標域,儲存密度不夠大,同時並不支援隨機訪問。
插入操作:假設在單鏈表中的兩個資料元素a,b之間插入乙個元素x,首先要生成乙個資料域為x的結點,令其指標域為指向結點b,左後要修改結點a的指標域指向該新結點x,從而形成新的結點邏輯關係。一般在單鏈表的第i個位置插入元素,首先要找到其前驅結點即第i-1個結點,然後按上面演算法修改元素之間邏輯關係即可。
刪除操作:單鏈表中刪除元素只要將欲刪除結點的前驅結點的指標域修改為該結點的後繼結點,再將其刪除即可。
逆置操作:用指標p開始指向第乙個結點,先將頭結點l的next域設定為null形成新的空鍊錶,然後用*p掃瞄原單鏈表,從第乙個結點開始,依次前插到新錶中頭結點後面,直到最後乙個結點為止,該演算法的輔助空間為o(1)。
判斷鍊錶是否有環:定義兩個指標p、q,同時指向頭結點,p移動一步,q移動兩步,經過n次後,如果p、q指向同乙個結點,則說明有環。
頭插法:將新節點插到煉表表頭,即頭結點之後
尾插法:將新節點插入到煉表表尾上,增加乙個尾指標,尾指標指向每次插入後的結點。
merge:假設兩個有序單鏈表a,b遞增有序,設定兩個指標p,q分別用來遍歷這兩個鍊錶,同時遍歷a,b並比較這兩個結點,如果*p<=*q,則將鍊錶a中的結點插入到c中,同時指標向後移動,否則,將b中q指向的結點插入到c中,指標q向後移動,重複上面的操作,直到這兩個鍊錶全部遍歷完為止。
資料結構 學習總結一
1.概念 最簡單,最常用的線性結構。2.線性表的順序儲存結構 實現隨機儲存 3.線性表的鏈式結構 節點 資料元素 指標 資料元素 存放資料 4.頭插法 void createlistf liklist l,elemtype a,int n 思路 生成乙個空鍊錶,不斷的將新節點插入煉表表頭,鍊錶的節點...
資料結構學習總結
了解資料,資料項,資料元素,資料物件的關係。資料元素 組成資料的,具有一定意義的基本單位,在計算機中做整體處理,也稱為記錄。乙個資料元素可以由多個資料項組成。資料物件 資料相同的資料元素的集合,是資料的子集。有的書上也成為資料物件和例項,結合的理解。資料結構可以分為 物理結構和邏輯結構 邏輯結構 集...
資料結構學習總結
隨著2015年的結束,資料結構這門課程也即將結束,這乙個學期跟著賀老師一起通過翻轉課堂的方式學習既新鮮也很慶幸。對這一學期資料結構的學習我想說一說我的感受。這學期資料結構 學了線性結構 樹 圖等等 線性結構包括線性表 棧 佇列 串 陣列 廣義表等 遞迴是程式設計中很重要的一種工具 也是我需要掌握的乙...