天天看點

資料結構與算法(Python)[一看就會] 01-2 線性表-順序表的結構與實作

順序表的結構

資料結構與算法(Python)[一看就會] 01-2 線性表-順序表的結構與實作

一個順序表的完整資訊包括兩部分,一部分是表中的元素集合,另一部分是為實作正确操作而需記錄的資訊,即有關表的整體情況的資訊,這部分資訊主要包括元素存儲區的容量和目前表中已有的元素個數兩項。順序表的兩種基本實作方式

資料結構與算法(Python)[一看就會] 01-2 線性表-順序表的結構與實作

圖a為一體式結構,存儲表資訊的單元與元素存儲區以連續的方式安排在一塊存儲區裡,兩部分資料的整體形成一個完整的順序表對象。

一體式結構整體性強,易于管理。但是由于資料元素存儲區域是表對象的一部分,順序表建立後,元素存儲區就固定了。

圖b為分離式結構,表對象裡隻儲存與整個表有關的資訊(即容量和元素個數),實際資料元素存放在另一個獨立的元素存儲區裡,通過連結與基本表對象關聯。

元素存儲區替換

一體式結構由于順序表資訊區與資料區連續存儲在一起,是以若想更換資料區,則隻能整體搬遷,即整個順序表對象(指存儲順序表的結構資訊的區域)改變了。

分離式結構若想更換資料區,隻需将表資訊區中的資料區連結位址更新即可,而該順序表對象不變。

元素存儲區擴充

采用分離式結構的順序表,若将資料區更換為存儲空間更大的區域,則可以在不改變表對象的前提下對其資料存儲區進行了擴充,所有使用這個表的地方都不必修改。隻要程式的運作環境(計算機系統)還有空閑存儲,這種表結構就不會因為滿了而導緻操作無法進行。人們把采用這種技術實作的順序表稱為動态順序表,因為其容量可以在使用中動态變化。

擴充的兩種政策

  • 每次擴充增加強定數目的存儲位置,如每次擴充增加10個元素位置,這種政策可稱為線性增長。
  • 每次擴充容量加倍,如每次擴充增加一倍存儲空間。