面試Java中的數據結構

  1. 數組(Array):是由同類元素的集合所組成的數據結構,分配一塊連續的內存來存儲。]但是它具有一定的侷限:若改變數據的大小就需要創建一個新的數組並從原來的數組中拷貝所有元素到新數組中;數組數據在內存中依次連續存儲,意味着向數組插入一項要移動的數組中的其他數據。
  2. 鏈表(Linked list):是一種線性表,但是並不會按線性的的順序存儲數據,而是在每個節點裏存到下一個節點的指針。優缺點:鏈表可以充分利用計算機的內存空間,實現靈活的內存動態管理。失去了數組隨機讀取的優點,同時增加了節點的指針域,空間開銷較大。插入元素時可以達到O(1)的複雜度。查找則需要O(n)。
  3. 棧(stack):線性數據結構,只能訪問它的一端(棧頂)來存儲或讀取數據,被稱爲後進先出結構,除頭尾節點之外,每個元素有一個前驅,一個後繼,通常在數據的存儲和讀取的順序相反的情況下堆棧是十分有用的,深度優先搜索遍歷。
  4. 堆(heap):任意節點小於(或大於)它的所有後裔,最小元(或最大元)在堆的根上。堆總是一顆完全樹,即除了最底層,其他層的節點都被元素填滿,且最底層儘可能地從左到右填入。
    (ps:heap和stack的區別是棧由系統自動分配使用一級緩存向低地址擴展的數據結構是一塊連續的內存區域,不會產生內存碎片,堆需要程序員自己申請並指明大小使用二級緩存是向高地址擴展的數據結構,是不連續的內存區域,容易產生內存碎片;棧的優勢是存取速度比堆要快,缺點是棧內存存放的變量(局部變量)生命週期一旦結束就會回收,棧中的數據大小和生存期必須是確定的缺乏靈活性;堆的優點是可以動態地分配內存大小,堆內存放的實體java的垃圾收集器會自動收走這些不再使用的數據缺點是存取速度慢。之所以寫這個問題是在面試國防科技大學的計算機學院忘了heap是堆。。。。羞恥啊
  5. 隊列(queue):是先進先出的線性表,隊列只允許在隊尾(rear)進行添加新元素,在另外一端(隊頭front)進行用於刪除操作。(優先級隊列:可以用兩種鏈表描述,在一個鏈表中都是按照順序進入的,另一個根據優先級順序將新元素插入到正確的位置。)應用於計算機資源管理、廣度優先搜索遍歷。
  6. 樹:二叉樹,平衡二叉樹,紅黑樹,B樹,B+樹等(有空再寫)。

參考書:《數據結構與算法(Java語言版)》 Adam Drozdek著 機械工業出版社 2003.7

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