本篇文章主要來介紹什麼是數據結構。算法
首先讓咱們來看一張圖片:數據結構
數據結構ide
數據存儲於計算機的內存中。內存如上圖所示,形似排成 1 列的箱子,1 個箱子裏存儲 1 個數據。線程
數據存儲於內存時,決定了數據順序和位置關係的即是數據結構。3d
其實在咱們生活中用到不少數據結構的知識,那麼舉一個咱們生活中的栗子:blog
首先舉一個從上往下順序添加舉個簡單的例子。假設咱們有1個電話簿——雖然說如今不少人都把電話號碼存在手機裏,可是這裏咱們考慮使用紙質電話簿的狀況——每當咱們獲得了新的電話號碼,就按從上往下的順序把它們記在電話簿上。排序
假設此時咱們想給張飛打電話,可是由於數據都是按獲取順序排列的,因此咱們並不知道張飛的號碼具體在哪裏,只能從頭一個個往下找(雖然說也能夠從後往前找或者隨機查找,可是效率並不會比從上往下找高)。若是電話簿上號碼很少的話很快就能找到,但若是存了500個號碼,找起來就不那麼容易了。圖片
再好比咱們能夠按姓名的拼音順序對電話簿進行排列,接下來,試試以聯繫人姓名的拼音順序排列吧。由於數據都是以字典順序排列的,因此它們是有結構的。內存
使用這種方式給聯繫人排序的話,想要找到目標人物就輕鬆多了。經過姓名的拼音首字母就能推測出該數據的大體位置。it
那麼,如何往這個按拼音順序排列的電話簿裏添加數據呢?假設咱們認識了新朋友柯南並拿到了他的電話號碼,打算把號碼記到電話簿中。因爲數據按姓名的拼音順序排列,因此柯南必須寫在韓宏宇和李希之間,可是上面的這張表裏已經沒有空位可供填寫,因此須要把李希及其如下的數據往下移1行。
此時咱們須要從下往上執行將本行的內容寫進下一行,而後清除本行內容的操做。若是一共有500個數據,一次操做須要10秒,那麼1個小時也完成不了這項工做。
總的來講,數據按獲取順序排列的話,雖然添加數據很是簡單,只須要把數據加在最後就能夠了,可是在查詢時較爲麻煩;以拼音順序來排列的話,雖然在查詢上較爲簡單,可是添加數據時又會比較麻煩。
雖然說這兩種方法各有各的優缺點,但具體選擇哪一種仍是要取決於這個電話簿的用法。若是電話簿作好以後就再也不添加新號碼,那麼選擇後者更爲合適;若是須要常常添加新號碼,但不怎麼須要再查詢,就應該選擇前者。
咱們還能夠考慮一種新的排列方法,將兩者的優勢結合起來。那就是分別使用不一樣的表存儲不一樣的拼音首字母,好比表L、表M、表N等,而後將同一張表中的數據按獲取順序進行排列。
表L
表M
表N
這樣一來,在添加新數據時,直接將數據加入到相應表中的末尾就能夠了,而查詢數據時,也只須要到其對應的表中去查找便可。
由於各個表中存儲的數據依舊是沒有規律的,因此查詢時仍需從表頭開始找起,但比查詢整個電話簿來講仍是要輕鬆多了。
數據結構方面的思路也和製做電話簿時的同樣。將數據存儲於內存時,根據使用目的選擇合適的數據結構,能夠提升內存的利用率。
到這裏,我相信你對數據結構有了必定的瞭解,下一篇咱們將對數據結構中最經常使用的-鏈表進行講解。
參考
《個人第一本算法書》
完
●實現線程的方式到底有幾種?
●你真的瞭解 volatile 關鍵字嗎?
●ZooKeeper 入門看這篇就夠了
武培軒有幫助?在看,轉發走一波稀罕做者