數據結構的四種基本存儲結構


1、鏈表

 

 

創建鏈表和創建數組不同,不會先划出一塊連續的內存,因為鏈表中的數據並不是連續的,鏈表在存儲數據的內存中有兩塊區域,一塊區域用來記錄下一個數據保存在哪里(指向下一個數據的指針)。當有數據進入鏈表時,會根據指針找到下一個存儲數據的位置,然后把數據保存起來,然后指向下一個存儲數據的位置。雖然鏈表是線性表,但是並不會按線性的順序存儲數據。因為鏈表這種保存數據的方式,所以插入和刪除非常容易,讀取時比較麻煩。例如:一個鏈表中0->1->2->3->4這五個內存地址中都存了數據,現在需要往2中插入一個數據,只需要更改1號和2號中記錄下一個數據的位置即可,對其他數據無影響。如果想要讀取一個數據,需要從0號開始一個一個找,直到找到那條數據為止。

優點:鏈表的插入和刪除非常方便

缺點:不太適合於隨機訪問,而在連續訪問時,鏈表也具有很好的表現

2、數組

 

 

    java創建數組時,會在內存中划分出一塊連續的內存,然后當有數據進入的時候將數據按順序的存儲在這塊連續內存中。當需要讀取數組中的數據中,需要提供數組中的索引,然后數組根據索引將內存中的數據取出來,返回給讀取程序。只有相同類型的數據才可以一起存儲在數組中。

     所有數據結構都支持幾個基本操作:讀取、插入、刪除

     因為數組在存儲數據時是按順序存儲的,因為存儲內存是連續的,所以尋址讀取數據比較容易,插入和刪除比較困難。讀取數據時,只需要告訴數組從哪個索引讀取即可,數組會直接把需要位置的數據取出來。插入和刪除比較困難。插入位置后面所有內存中的數據都要往后移一個位置。非常耗時。

 

優點:較高的存儲效率和快速的隨機存取

缺點:數組不能動態的增長,並且在插入和刪除時,平均會移動n/2的數據,不適用於隨機位置插入和刪除很頻繁的操作

3、棧

  棧是一種先進后出的數據結構,數組和鏈表都可以生成棧,當數據進入棧時會按照規則壓入到棧底部,再次進入的數據會壓到第一次的數據上面。在取出棧中數據的時候會先取出最上面的數據,先進后出。

 

    隊列(queue)和棧是一種操作受限的線性表。棧的操作受限表現在插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操作遵循后入先出(LIFO)原則。隊列中的操作原則與棧的相反。刪除的元素是最早插入到隊列中的,就像排隊一樣,排在最前面的人將最先從隊伍中出列。這樣的操作原則常常稱作先入先出。所以對於棧和隊列的頻繁隨機插入刪除不合適

4、隊列

 

   隊列是一種先進先出的數據結構,數組和鏈表也可以生成隊列。

   隊列(queue)和棧是一種操作受限的線性表。棧的操作受限表現在插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操作遵循后入先出(LIFO)原則。隊列中的操作原則與棧的相反。刪除的元素是最早插入到隊列中的,就像排隊一樣,排在最前面的人將最先從隊伍中出列。這樣的操作原則常常稱作先入先出。所以對於棧和隊列的頻繁隨機插入刪除不合適

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM