一、鏈表java
建立鏈表和建立數組不一樣,不會先劃出一塊連續的內存,由於鏈表中的數據並非連續的,鏈表在存儲數據的內存中有兩塊區域,一塊區域用來記錄下一個數據保存在哪裏(指向下一個數據的指針)。當有數據進入鏈表時,會根據指針找到下一個存儲數據的位置,而後把數據保存起來,而後指向下一個存儲數據的位置。雖然鏈表是線性表,可是並不會按線性的順序存儲數據。由於鏈表這種保存數據的方式,,因此插入和刪除很是容易,讀取時比較麻煩。例如:一個鏈表中0->1->2->3->4這五個內存地址中都存了數據,如今須要往2中插入一個數據,只須要更改1號和2號中記錄下一個數據的位置便可,對其餘數據無影響。若是想要讀取一個數據,須要從0號開始一個一個找,直到找到那條數據爲止。數組
優勢:鏈表的插入和刪除很是方便數據結構
缺點:不太適合於隨機訪問,而在連續訪問時,鏈表也具備很好的表現3d
二、數組指針
java建立數組時,會在內存中劃分出一塊連續的內存,而後當有數據進入的時候將數據按順序的存儲在這塊連續內存中。當須要讀取數組中的數據中,須要提供數組中的索引,而後數組根據索引將內存中的數據取出來,返回給讀取程序。只有相同類型的數據才能夠一塊兒存儲在數組中。blog
全部數據結構都支持幾個基本操做:讀取、插入、刪除索引
由於數組在存儲數據時是按順序存儲的,由於存儲內存是連續的,因此尋址讀取數據比較容易,插入和刪除比較困難。讀取數據時,只須要告訴數組從哪一個索引讀取便可,數組會直接把須要位置的數據取出來。插入和刪除比較困難。插入位置後面全部內存中的數據都要日後移一個位置。很是耗時。隊列
優勢:較高的存儲效率和快速的隨機存取內存
缺點:數組不能動態的增加,而且在插入和刪除時,平均會移動n/2的數據,不適用於隨機位置插入和刪除很頻繁的操做效率
三、棧
棧是一種先進後出的數據結構,數組和鏈表均可以生成棧,當數據進入棧時會按照規則壓入到棧底部,再次進入的數據會壓到第一次的數據上面。在取出棧中數據的時候會先取出最上面的數據,先進後出。
隊列(queue)和棧是一種操做受限的線性表。棧的操做受限表如今插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操做遵循後入先出(LIFO)原則。隊列中的操做原則與棧的相反。刪除的元素是最先插入到隊列中的,就像排隊同樣,排在最前面的人將最早從隊伍中出列。這樣的操做原則經常稱做先入先出。因此對於棧和隊列的頻繁隨機插入刪除不合適
四、隊列
隊列是一種先進先出的數據結構,數組和鏈表也能夠生成隊列。
隊列(queue)和棧是一種操做受限的線性表。棧的操做受限表如今插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操做遵循後入先出(LIFO)原則。隊列中的操做原則與棧的相反。刪除的元素是最先插入到隊列中的,就像排隊同樣,排在最前面的人將最早從隊伍中出列。這樣的操做原則經常稱做先入先出。因此對於棧和隊列的頻繁隨機插入刪除不合適