(1)線性表的定義:
即:由n(n>=0)個數據元素的有序序列;(如果n=0,則爲空表;當n>0,(a1,a2,…,an))
特點:1> 順序性(第一個元素無前驅,最後一個元素無後繼,其他的元素有且只有一個前驅和後繼);
2> 有限性;
3> 節點的數據類型都是相同的;
如下圖:
(2)線性表的存儲結構
第一種:順序存儲結構(使用一段連續的地址存儲),稱爲線性表;
順序結構下的三個重要的屬性:①數組 data ② 數組的長度 maxSize ③線性表的長度 length
注:1,數組的長度應該大於等於線性表的長度(reason:線性表要進行插入和刪除的操作);
2,順序存儲結構需要預分配存儲空間;
如下圖:
(1)對線性表的操作
①插入操作
插入操作時間複雜度:
假設現在有n個元素,
最好的情況:元素插入的位置是最後一個,那麼此時其他的元素位置是不變的,時間複雜度爲O(1);
最壞的情況:元素插入的位置是第一個,那麼此時其他的元素要一次依次往後移動,時間複雜度爲O(n);
②刪除操作
刪除操作時間複雜度:
假設現在有n個元素,
最好的情況:刪除元素的位置是最後一個,那麼此時其他的元素位置是不變的,時間複雜度爲O(1);
最壞的情況:刪除元素的位置是第一個,那麼此時其他的元素要依次往前移動,時間複雜度爲O(n);
(2)線性結構的特點:
適用:快速的存取表中的元素;不需要額外的空間來存儲表中元素的關係;
缺點:對於插入和刪除操作比較麻煩;造成存儲空間的碎片問題;難以確定存儲空間的容量大小問題;
第二種:鏈式存儲結構(數據域+指針域)
鏈式存儲結構又包含 單鏈表,靜態鏈表,循環鏈表,雙向鏈表;
注:不需要分配存儲空間
(1)單鏈表結構如下圖:
操作:查找,從第一個元素開始,順序往下找,最好的情況時間複雜度爲O(1),最壞的情況是O(n);
插入:先遍歷,再插入
插入時間複雜度:查找操作O(n);插入操作O(1);
刪除:先遍歷,再刪除
刪除時間複雜度:查找操作O(n);刪除操作O(1);
(2)循環鏈表:將單鏈表的最後的null指針指向頭結點
結構如下圖:
(3)雙向鏈表:在單鏈表的每個節點中,設置一個指向其前驅節點的指針域。
結構如圖所示: