數據結構

關於數據結構,能夠大體分爲如下兩類:程序員

  • 邏輯結構:抽象出來的數據模型。每一種邏輯結構均可以基於不一樣的物理結構進行存儲。
  • 物理結構:數據在內存中的真實存儲方式。

基本數據結構(邏輯結構)

  • 集合:元素之間沒有關係,各自獨立
  • 線性結構:元素之間是一對一的關係,除首尾元素外每一個元素都有一個前驅和一個後繼
  • 樹:元素之間是一對多的關係,每一個父元素能夠有多個子元素,但子元素只能有一個父元素
  • 圖:元素之間是多對多的關係,每一個元素均可以跟另外的一個或多個元素關聯

在上面這四種結構的基礎上,再進行組合排列,就能夠表示整個宇宙了。
在這裏插入圖片描述web

數據的存儲結構(物理結構)

任何類型的數據,最終都須要存儲在內存中。根據內存中存儲的數據是否連續,能夠分爲兩種存儲方式:算法

  • 順序存儲:每一個邏輯上相鄰的元素,在物理內存上也相鄰。靜態操做快,動態操做慢。
  • 鏈式存儲:邏輯上相鄰的元素,在物理內存上離散,經過指針相互關聯。靜態操做慢,動態操做快。

靜態操做:查找和修改元素。操做完成後數據總體大小不變。
動態操做:增刪元素。操做完成後數據總體大小發生變化。編程

最多見的順序存儲的數據類型就是數組。數組中的多個元素在邏輯上和物理上都是相鄰的,直接經過下標訪問。數組

最基本的鏈式存儲的數據類型是鏈表。鏈表中的每一個元素,除了保存數據外,還保存指向下一個元素的指針。要訪問某個位置的元素,必須從首元素開始順着指針一個個找下去。數據結構

程序本質

程序的本質 = 算法 + 數據結構編程語言

做爲野生程序員,學過幾種編程語言,可是每次想深刻研究 Linux 和 MySQL 以及 Redis 等經常使用工具,都會有種無力感。業務代碼能夠敲的很溜,可是若是搞不懂底層原理,那始終只是一個碼農,最可能是熟手碼農而已。svg

任何牛逼的項目,本質上都是對內存中數據的操縱。數據組織結構良好,才能方便基於各類算法對其進行操縱。而算法有不少,選擇最佳方案能夠成倍的提升效率。工具

相關文章
相關標籤/搜索