1. 程式人生 > 其它 >演算法與資料結構——線性表

演算法與資料結構——線性表

演算法的五個基本特性:輸入(0-多個輸入)、輸出(1-多個輸出)、有窮性(演算法程式的執行時間是有限的)、確定性(演算法中的每個程式步驟都必須有明確的定義,不允許有模稜兩可的多義性)、可行性(針對實際問題而設計的演算法,執行後能得到滿意的結果)。演算法設計的要求:可讀性(便於閱讀)、健壯性(一個演算法對不合理資料的反應能力和處理能力)、時間效率高和儲存量低。

時間複雜度O(f(n))=T(n)(語句總的執行次數)的推導:用常熟1取代執行時間中的所有加法常數、在修改後的函式f(n)(增長率與執行時間函式的增長率相同)中只保留最高階項、如果最高階項不是1則去除與這個項相乘的常數,從而得到大O階。空間複雜度S(n)=O(f(n)),n為問題規模,f(n)為語句關於n所佔儲存空間的函式。複雜度(時間複雜度)。

線性表的函式:InitList(*L):初始化操作,建立一個空的線性表L。ListEmpty(L):判斷線性表是否為空表,若線性表為空表返回ture,否則返回false。ClearList(*L):將線性表清空。GetElem(L,I,*e):將線性表L中的第i個位置元素值返回給e。LocateElem(L,e):線上性表L中查詢與給定值e相等的元素,如果查詢成功,返回該元素線上性表中的序號(線性表的序號從1開始)表示成功,否則返回0表示失敗。ListInsert(*L,i,e):線上性表的第i個位置插入元素e。ListDelete(*L,i,*e):刪除線性表第i個位置元素,並用e返回其值。ListLength(L):返回線性表L的元素個數。

順序儲存結構線性表的地址計算方法:LOC(ai)=LOC(a1)+(i-1)*C(C為元素的儲存單元即位元組),通過這個公式可以計算出線性表任意位置的地址,儲存時間效能為O(1),稱之為隨機會儲存結構。

順序儲存結構線性表的優點:可以快速的存取表中任意位置的元素、無需增加額外的儲存空間,缺點:插入和刪除操作需要移動大量的元素、當線性表長度變化過大時難以確定儲存空間的容量、容易造成儲存空間的碎片化。

鏈式儲存結構線性表:把儲存資料元素資訊的域稱為資料域,把儲存直接後繼位置的域為指標域,指標域中儲存的資訊稱為指標或鏈,由這兩部位組成的資料元素稱為儲存映像,稱為結點。單鏈表每個結點中只2包含一個指標域。頭指標是連結串列指向第一個f結點的指標,頭結點放在第一個元素的結點之前,資料域一般無意義(可用來存放連結串列長度),頭結點不一定是連結串列的必要元素。對於插入或刪除越頻繁的操作,單鏈表的效率優勢就越是明顯。

靜態連結串列:用陣列構成的連結串列,第一個元素和最後一個元素的data不存放資料。將未使用的資料元素稱為備用連結串列。陣列的第一個元素(含有完整資訊的結點)的遊標存放備用連結串列的第一個結點的下標。陣列的最後一個元素的遊標存放第一個有數值的元素的下標。對靜態連結串列的操作:改遊標。靜態連結串列的優點:在插入和刪除操作時,只需要修改遊標,不需要移動元素。缺點:沒有解決連續儲存分配(陣列)帶來的表長難以確定的問題、失去了順序儲存結構隨機存取的特性。

判斷連結串列有沒有環有2種方法:判斷步數相同法:一個指標一直下移另一個指標不斷重新從頭開始下移到相同位置判斷步數是否相同。指標快慢法:一個指標速度正常另一個速度是它的2倍,判斷位置是否相同。