一文帶你秒懂數據結構與算法的三大要素、五大特徵!

我叫《數據結構與算法》,是計算機世界的四大基石之一。

想來我應該是惹人憐愛的吧(認真臉),因爲我彷彿聽到了無數個初入計算機世界的同學的吶喊聲(😏)。

我作爲一門簡單學科,看到有很多的在半途棄我而去,我很是痛心疾首。於是,委託這位靚仔將我蘊藏的知識傳播出去,讓更多的人享受學習數據結構與算法的快樂。

咳咳~言歸正傳……

基本概念

首先我來自我拆解一下。請跟我讀:數據、結構、算法

沒錯,正是這三部分構成了我。這可能和你的認知不同,以爲我是由數據結構和算法夠成的吧?

別急,請聽我細細道來。

  1. 何爲數據?

數據,是構成我的基石,沒有數據,我就沒有用武之地。 更誇張的說,沒有數據,整個計算機世界可能都沒了用武之地。

因爲,數據是信息的載體。人類能夠識別的數據,放到計算機世界中,不經過輸入設備的轉換,是無法被識別的。這種能被計算機識別的信息就叫做數據

比如,在Mysql數據庫中,存儲着這樣一張數據表。

姓名 年齡 性別
23
李四 22

在我這裏,諸如“姓名、年齡、性別”這樣的表頭屬性被稱作是數據項,而這些數據項構成了數據元素;最重要的是,數據元素是構成數據的基本單位

這裏還有一個數據對象的概念,什麼是數據對象?數據對象就是具有相同性質的數據元素的集合,且是數據的一個子集。那麼在上述表格中就表示爲“法外狂徒張三、23、男”和“李四、22、女”這樣的集合。

當然,這些內容可以由更爲簡明的集合表示:

FdjiwJ

  1. 何爲數據結構?

數據結構是數據相互之間存在的一種或者多種特定關係的數據元素的集合。

這麼說你可能不是很明白,打個比方:

  • 一對戀人,他們就是一種一對一的關係,這是一種從邏輯上講的關係,當然,排除海王這樣的……
  • 教師與學生,明顯是多對一的關係,一個老師可以教很多學生

上述的這兩種情況,都是從邏輯上講的,你肯定知道,還有其他種類的數據結構。

事實上,總共有三種數據結構,被我們稱作是數據結構的三要素

  • 邏輯結構
  • 存儲結構
  • 數據運算

數據結構三要素

  1. 數據的邏輯結構

    數據的邏輯結構,按照字面意思理解就是數據元素之間的邏輯結構。你可以這樣想,邏輯結構就是一種表面上的結構,表示着表面上人與人的邏輯關係。比如說一對戀人,男對女,這就是一種邏輯結構。

    vcror6

邏輯結構分爲兩種關係:

  • 線性關係
  • 非線性關係

所謂線性關係,就是諸如一對情侶這種一對一的關係,在數據結構中,線性表、棧和隊列、串、數組、廣義表都屬於這種一對一的線性關係。

非線性關係是如一對多、多對一、多對多等的這種關係。比如前面舉的例子教師與學生,典型的一對多關係。滿足這種關係的數據結構有:集合、樹、圖。你可能會說,明明集合既不是一對一,也不是一對多。

是的,集合比較特殊。我們認爲,集合中的數據元素,除了同屬於一個集合外就沒有其他的任何關係了,所以這也是一種非線性關係。

aRBVlx

  1. 數據的存儲結構

看到存儲你會想到什麼?硬盤、內存等存儲介質,對吧?

實際上,存儲結構說白了就是數據在計算機中的表示,即物理地址

包括數據元素的表示數據關係的表示

數據元素的表示,就是指數據在計算機中的地址;而數據關係的表示,就是表示數據之間有何種關係。

人們爲了合理利用計算機的存儲空間,研究出了四種存儲方式:

  • 順序存儲
  • 鏈式存儲
  • 索引存儲
  • 散列存儲

順序存儲是最簡單的一種存儲方式,你只需要瞭解:**數據元素的邏輯關係就是其存儲關係。**最簡單的例子是順序表,順序表是連續空間上的一組元素。也就是說,邏輯上相鄰的兩個數,在存儲地址上也相鄰。這種存儲方式,優點和缺點都很明顯:

  • 優點:能夠實現隨機存取,也就是說,存取可以任意指定位置,不必遍歷
  • 缺點:只能使用相鄰的一片存儲空間,也就是說存儲空間可能成爲限制,也許會產生大量的數據碎片

鏈式存儲最爲典型的代表就是單鏈表吧,從邏輯上看,單鏈表就像是一個由表頭拉着的長鎖鏈,但是其數據元素的具體位置是隨機的,全部由指針指示存儲位置。

1gqA5O

  • 優點:不會出現碎片,能夠充分利用所有存儲單元
  • 缺點:每個元素因爲存儲指針而佔用額外的存儲空間,且只能實現順序存取,即遍歷

索引存儲可能是最快的存儲結構。我們可以把索引想象成PDF電子書的目錄,有了目錄,我們找相關內容肯定是十分簡單的。索引存儲是在存儲數據元素的時候,同時建立數據元素的目錄,這樣就能快速檢索了。

  • 優點:檢索速度快
  • 缺點:附加索引表額外佔用空間,增刪數據時要修改索引表,花費更多時間

散列存儲又稱爲哈希存儲(HASH)。這種存儲結構比較討巧,是通過公式來計算數據真正的存儲位置。比如說,我要存儲數據1,公式是y=x+5,y表示存儲地址,那麼1就會被存放到位置6。當然,實際應用中計算公式肯定不會這麼草率。

  • 優點:檢索、增刪結點的操作都很快
  • 缺點:若散列函數不好,則出現元素存儲單元衝突(兩個數據元素計算的地址一樣),解決衝突會額外佔用時間與空間
  1. 數據運算

數據運算包含兩部分內容,即數據運算的定義和實現。

數據運算的定義是針對邏輯結構來講的,指出了運算的功能。

數據運算的實現是針對存儲結構來講的,指出了運算的具體實現步驟。

數據運算這個時候是在是沒啥可細說的,留待日後。

算法的五大特徵

在說算法的五大特徵之前,我們需要弄明白算法的定義:所謂算法,就是對特定問題的求解步驟的描述。

也就是說,算法是用來解決問題的,一個算法的執行,必然能夠有結果,且這個結果符合我們預期的要求。

算法有五大特徵,分別爲:

  • 有窮性
    • 必須在執行有窮步驟後結束,且每一步都在有窮時間內完成。所以說,無限執行的算法是錯誤的,是不能被稱作算法的。所以,寫遞歸函數的時候千萬當心。
  • 確定性
    • 每條指令必須有確切的含義,相同的輸入只能得出相同的輸出。即算法中不能出現含糊不清的表述,也不能出現兩次相同輸入,執行同一算法出現不同的結果的情況。
  • 可行性
    • 算法描述的操作都可以通過已經實現的基本運算執行有限次數實現。不能實現的算法要他何用?
  • 輸入
    • 有零個或多個輸入,注意,算法是可以沒有輸入的,但是必須有輸出。
  • 輸出
    • 有一個或多個輸出,不能沒有輸出,沒有輸出的算法是錯誤的。

感謝各位閱讀!以上就是這篇文章的全部內容啦!

寫在最後

關注微信公衆號:最高權限比特流。

1587813927260355

回覆1001,獲取《數據結構的三大要素、五大特徵》的思維導圖,據說思維導圖很Diao哦!

eG0VF9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章