数据结构和算法:(3)3.2.2单链表的整表删除
我們不使用這個單鏈表時,我們需要把他在內存中釋放掉,以便于流出空間給其他程序和軟件使用。
單鏈表整表刪除的算法思路如下:
- 聲明結點p和q;
- 將第一個結點賦值給p,下一個結點(也就是第一個結點的下一個結點)賦值給q;
- 循環執行釋放p和(釋放完p之后)將q賦值給p的操作。(也就是說循環從這個單鏈表的頭部開始每一個都釋放調,往上接龍釋放)
ClearList.c代碼如下:
Status ClearList(LinkList *L)
{LinkList p,q;//聲明了兩個結點一個是p一個是qp=(*L)->next;//將p指向了我們L單鏈表的next也就是第一個結點while(p)//只要p不為NULL也就是不為假的情況下,也就是有數據的情況下有數據就為真(編程規定為0就是假,非0就是真){q=p->next;//指向第二個free(p);//把第一個給釋放掉p=q;//第二個就繼承了第一個的位置}(*L)->next=NULL;//最后的化這個單鏈表記得指向NULL,變成一個空表。空表就是Head指向NULL嘛,整個釋放完之后return OK;
}
把后邊代碼改一下呢?讓q沒有存在的必要呢??
free(p);
p=p->next;
上述這種寫法?因為p是一個結點,他除了有數據域還有指針域,當我們做free(p)的時候,其實是對他整個結點進行刪除和內存釋放的工作,而我們整表刪除是需要一個個結點刪除的,所以我們就需要q來記載p的下一個結點。
---------總結
從存儲分配方式、時間性能、空間性能三個方面來比較單鏈表結構與順序存儲結構優缺點:
(1)存儲分配方式:
順序存儲結構用一段連續的存儲單元依次存儲線性表的數據元素。
單鏈表采用鏈式存儲結構,用一組任意的存儲單元存放線性表的元素。(他的數據可以在內存上的任何地方,可以將邊角落的空間給串連起來,節約空間)
(2)時間性能:
查找方面:
順序存儲結構時間復雜度是O(1);(只要有下標我們就可以找到他)
單鏈表是O(n);(單鏈表沒有下標的,只有他的前驅結點才知道他的后繼結點的地址,所以要從第一個開始一個一個的往下追尋查找)
插入和刪除方面:
順序存儲結構需要平均移動表長一半的元素,時間為O(n)。
單鏈表在計算出某位置的指針后,插入和刪除時間僅為O(1)。
(3)空間性能:
順序存儲結構需要預分配存儲空間,分大了容易造成空間浪費,分小了容易發生溢出(數組的溢出)。
單鏈表不需要分配存儲空間,只要有就可以分配,元素個數也不受限制。
綜上述得出的結論:
若線性表需要頻繁查找,很少進行插入和刪除操作時 ,宜采用順序存儲結構。
若需要頻繁插入和刪除時,宜采用單鏈表結構。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的数据结构和算法:(3)3.2.2单链表的整表删除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构和算法:(3)3.2.1单链表的
- 下一篇: 文章3:车载LIDAR点云数据中杆状地物