1. 程式人生 > >【資料結構】基礎知識點整理(1)

【資料結構】基礎知識點整理(1)

1.線性是線性,順序是順序,線性是邏輯結構,順序是儲存結構,兩者不是一一個概念,線性是指一一個元素後繼只有唯一的一一個元素或節點,非線性是一一個元素後面可以有多個後繼或前繼節點,順序是指儲存結構連續,例如陣列是順序的,連結串列不是順序的,但他們都是線性的。當然順序也可以是非線性的,例如順序結構儲存非線性結構的二叉樹! 

2.深度遍歷用棧,廣度遍歷用佇列.

3.中綴表示式轉換為字尾表示式的規則:從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分。若是符號則判斷其與堆疊中符號的優先順序,若是小於棧頂上的符號的優先順序,則將該符號壓入棧中,否則將棧中的符號輸出成為字尾表示式的一部分。

4.關聯陣列不是線性表:

      ①佇列(Queue) 是隻允許在一 端進行插入,而在另一端進行刪除的運算受限的線性表;

      ②棧(stack)在電腦科學中是限定僅在棧頂進行插,入或刪除操作的線性表;

      ③“關聯陣列”是一-種具有特殊索引方式的陣列。不僅可以通過整數來索引它,還可以使用字串或者其他型別的值(除了NULL)來索引它。關聯陣列和陣列類似,由以名稱作為鍵的欄位和方法組成。  它包含標量資料,可用 索引值來單獨選擇這些資料, 和陣列不同的是,關聯陣列的索引值不是非負的整數而是任意的標量。這些標量稱為Keys ,可以在以後用於檢索陣列中的數值。  關聯陣列的元素沒有特定的順序,你可以把它們想象為一組卡片。每張卡片,上半部分是索引而下半部分是數值;       ④連結串列(Linked list)是一一種常見的基礎資料結構,是一種線性表,是一種物理儲存單元_上非連續、非順序的儲存結構。

5.棧有記憶功能(原因:棧是限定在一端進行插入 與刪除的線性表允許插入與刪除的一端稱為棧頂, 不允許插入與刪除的另一端稱為棧底。棧按照“先進後出”(FILO)或“後進先出”(LIFO)組織資料,棧具有記憶作用)

6.後序線索樹的遍歷需要的支援(原因:前序遍歷(中左右)、中序遍歷(左中右)的最後訪問的節點都是左或右葉節點,葉節點是沒有子樹的,所以兩個指標域空出來了,可以存放線索指標用於回溯。但是後續遍歷(左右中) , 最後訪問的是子樹的根節點,子樹根節點的兩個指標域都指向子樹了,所以不能空出來存放線索資訊,只能藉助棧儲存)

7.堆記憶體和棧記憶體的理解:堆記憶體實際上指的就是(滿足堆記憶體性質的)優先佇列的一-種資料結構;棧記憶體實際上就是滿足先進後出的性質的數學或資料結構。

8.陣列比連結串列速度更快的是:原地逆序、返回中間節點、選擇隨機節點。

9.ArrayList 和LinkedList

         ①ArrayList是實現了基於動態陣列的資料結構,Linkedlist基於連結串列的資料結構。,這裡的所謂動態陣列並不是那個有多少元素就申請多少空間”的意思,這個動態陣列是這樣實現的:如果沒指定陣列大小,則申請預設大小為10的陣列,當元素個數增加,陣列無法儲存時,系統會另個申請一一個長度為當前長度1.5倍的陣列,然後,把之前的資料拷貝到新建的陣列。

         ②對於隨機訪問get和set , ArrayList優於LinkedL ist,linkedList要移動指標;ArrayList是陣列,所以,直接定位到相應位置取元素, LinkedLIst是連結串列,所以需要從前往後遍歷。

        ③對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。ArrayList的新增和刪除就是陣列的新增和刪除,LinkedList與連結串列一致。

         ④ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間。ArrayList空間的增長率為1.5倍,所以,最後很可能留下一部分空間是沒有用到的,因此,會造成浪費的情況。對於LInkedList的話,由於每個節點都需要額外的指標,所以它的每一個元素都需要消耗相當的空間。

10.雙端佇列:是一種同時具有佇列和棧的性質的一種資料結構,在佇列的兩頭都可以進行插入和刪除的操作;輸入受限的雙端佇列是指只能從佇列一端輸入,可以從兩端輸出的雙端佇列;同理,輸出受限的雙端佇列是指只能從佇列一端輸出,可以從兩端輸入的雙端佇列;如果雙端佇列允許從一端輸入,從一端輸出,則是普通的佇列,如果雙端佇列只允許從一端輸入和輸出則是棧。因此說雙端佇列同時具有佇列和棧兩種資料結構的性質。