今天開始學習C語言的資料結構,每天會在這個平臺記錄自己的學習,相當於學習筆記吧!一是可以作為督促自己每天堅持學習,二是可以見證自己成長的歷程,當然,最大的願望就是希望這些筆記對你們也有用,可以給你們一些幫助!!!
一、為什麼要學資料結構?
程式設計=資料結構+演演算法
因為資料結構可以讓程式設計能力有質的飛躍,不僅僅侷限於編寫一些簡單的問題,不用絞盡腦汁呼叫現成的東西,然而還不懂到底是什麼意思!資料結構很難,我相信我可以堅持學下去嘿嘿!
二、關於資料結構的一些基本概念
資料:所有能輸入到計算機中並被計算機程式處理的符號的總稱。
資料元素:是資料的基本單位,在計算機程式中通常作為一個整體進行考慮和處理。
資料物件:性質相同的資料元素的集合,是資料的一個子集。
資料結構:相互之間存在一種或多種特定關係的資料元素的集合。
三、資料結構的形式定義:
資料結構是一個二元組:Data_Structure = (D,S)
D表示資料元素(有限集),S表示資料元素之間的關係。
四、資料結構包含邏輯結構和物理結構
邏輯結構:
邏輯結構主要有4中:分別是集合結構、線性結構、樹形結構和圖狀結構(也稱網狀結構)。
集合結構:各元素之間除了同屬一個集合外沒有其他的關係。
線性結構:結構的資料元素之間存在一對一的關係。
樹形結構:結構的資料元素之間存在一對多的關係。(如家譜或族譜通常是樹形結構)
網狀結構:結構的資料元素之間存在多對多的關係。(如各個城市之間的交通路線關係)
物理結構:
物理結構(又稱儲存結構)主要有2中,分別是順序儲存結構和鏈式儲存結構。
順序儲存結構:如a1到an按照一定的順序儲存,a1到an一次排放。這種儲存方式的特點就是藉助元素在記憶體中的相對位置來表示資料元素之間的邏輯關係,假設地址相鄰的兩個元素相差兩個位元組,若a1的儲存位置已知,則an的儲存位置為:
an=a1+2(n-1)
鏈式儲存結構:
它的特點就是藉助指示元素儲存地址的指標表示資料元素之間的邏輯關係。
這種儲存方式每一個元素有資料域和指標域,指標域的作用是指向下一個資料的資料域。就像我們在醫院排號時,我們所拿的號就相當於指標域,當醫生叫到你手上的號的前一個號時,你就會高度緊張,這種方式你不用一直站在那裡排隊,可以自由的活動,只要注意醫生喊號即可,從這裡可以看出,鏈式儲存結構比順序儲存結構更靈活。
五、演演算法
演演算法的5個重要特性:
(1)有窮性。一個演演算法必須在執行有限步後結束,且每一步都能在又窮的時間內完成。
(2)正確性。每一條演演算法不能產生二義性,對於相同的輸入必須有相同的輸出。
(3)可行性。演演算法中描述的操作都能通過已經實現的基本運算執行有限次來實現。
(4)輸入和輸出。一個演演算法可以有0個或多個輸入,一個演演算法必須有一個或多個輸出。
演演算法設計的要求:
(1)正確性。正確性包括4個方面。演演算法程式沒有語法錯誤;演演算法程式對於合法輸入都能產生滿足要求的輸出;演演算法程式對非法輸入能產生滿足規格的說明,來提醒使用者他輸入錯了;演演算法程式對於故意刁難的測試輸入都有滿足要求的輸出結果。
(2)可讀性。演演算法方面人們閱讀和交流。
(3)健壯性。對非法輸入演演算法也能做出反應或進行處理,不會產生莫名其妙的輸出結果。
(4)高效率和低儲存需求。演演算法的執行時間儘量短,儲存需求儘量小,執行時間短的演演算法效率高。
六、演演算法效率的度量
有事前分析估演演算法(在計算機程式編寫前,依照統計方法對演演算法進行估算)和事後統計方法(在程式編寫完成後,對演演算法的效率進行估算)
顯然。用事後統計方法更好!
關於演演算法效率的評價有時間複雜度和空間複雜度兩個衡量標準。由於現在計算機的效能都比較好,所以一般考慮時間複雜度。關於這時間複雜度和空間複雜度的計算方法,比較複雜。明天針對這兩個問題專門出一片部落格。今天到此為止吧!晚安!