數據結構與算法概論

數據結構與算法概論

一、基本概念

數據:描述客觀事物的數、字符以及能輸入計算機中並被計算機處理的符號集合

數據元素:是數據的基本單位。有時一個數據元素可由若干個數據項(也稱為字段、域、屬性)組成。

數據對象:是具有相同性質的數據元素的集合,是數據的一個子集。

數據項:是具有獨立含義的最小標識單位

數據結構:帶有結構的數據元素的集合。結構指的是數據元素之間的相互關係,即數據的組織形式,結構中的數據元素稱為結點。

二、邏輯結構和物理結構

傳統上,我們把數據結構分為邏輯結構和物理結構

邏輯結構:數據對象中數據元素之間的邏輯(或抽象)關係。

①集合結構:數據元素除了同屬於一個集合外,他們之間沒有其他不三不四的關係。

數據結構與算法概論

集合結構.png

②線性結構:數據元素之間是一對一的關係。

數據結構與算法概論

線性結構.png

③樹形結構:數據元素之間存在一種一對多的層次關係。

數據結構與算法概論

樹形結構.png

④圖形結構:數據元素時多對多的關係。

數據結構與算法概論

圖形結構.png

物理結構(存儲結構):數據元素及其關係在計算機內的存儲方式。

①順序存儲:是把數據元素存放在地址連續的存儲單元裡,其數據間的邏輯關係和物理關係是一致的。例如我們編程語言的數組結構。

數據結構與算法概論

順序存儲.png

②鏈式存儲:是把數據元素存放在任意的存儲單元裡,這組存儲單元可以是連續的,也可以是不連續的。

數據結構與算法概論

鏈式存儲.png

很顯然,這樣說的話鏈式存儲結構的數據元素存儲關係並不能反映其邏輯關係,因此需要用一個指針存放數據元素的地址,這樣子通過地址就可以找到相關聯數據元素的位置。

③索引存儲:通常是在存儲信息的同時,還建立附加的索引表。表中的索引項一般形式是:(關鍵字,地址)。關鍵字是能唯一標識一個元素的一個數據項或多個數據項的組合。

④散列存儲:基本思想是根據元素的關鍵字直接計算出該元素的存儲地址。

三、算法

實現:1+2+…+99+100

方式一:

int i, sum = 0, n = 100;

for(i=1; i <= n; i++)

{

sum = sum + i;

}

printf(“%d”, sum);

方式二:

int i, sum = 0, n = 100;

sum = (1+n)*n/2;

printf(“%d”, sum);

1.什麼是算法

算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或多個操作。

2.算法的五個基本特性

①輸入:算法具有零個或多個輸入。

②輸出:算法至少有一個或多個輸出。輸出的形式可以是打印形式輸出,也可以是返回一個值或多個值等。

③有窮性:指算法在執行有限的步驟之後,自動結束而不會出現無限循環,並且每一個步驟在可接受的時間內完成。

④確定性:

  • 算法的每一個步驟都具有確定的含義,不會出現二義性。
  • 算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。
  • 算法的每個步驟都應該被精確定義而無歧義。

⑤可行性:算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

3.算法設計的要求

①正確性:算法的正確性是指算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。

②可讀性:算法設計另一目的是為了便於閱讀、理解和交流。

③健壯性:當輸入數據不合法時,算法也能做出相關處理,而不是產生異常、崩潰或莫名其妙的結果。

④時間效率高和存儲量低:好算法應該具備時間效率高和存儲量低的特點。所以在設計算法的時候我們應該儘量思考這兩方面的問題!

對Java微服務、分佈式、高併發、高可用、大型互聯網架構技術、面試經驗交流感興趣的。可以關注我的頭條號,我會在微頭條不定期的發放免費的資料鏈接,這些資料都是從各個技術網站蒐集、整理出來的,如果你有好的學習資料可以私聊發我,我會註明出處之後分享給大家。歡迎分享,歡迎評論,歡迎轉發!


分享到:


相關文章: