單鏈表查找時間效率分析:
代碼:
Lnode *LocateElem_L(LinkList L, ElemType e){ //在線性表L中查找值為 e 的數據元素 //找到,則返回 L 中值為 e 的數據元素的地址 //查找失敗返回NULL p=L->next; while(p!=NULL && p->data!=e){ p=p->next; } return p; }
上述代碼中,循環體里的 p=p->next 執行多少次?或者說循環執行多少次,和我們要查找的元素 e 所在位置有關系
如果單鏈表中第一個元素,或者說首元結點就是 e ,那么僅執行一次即可。
如果不是,則順着指針鏈,依次向后查找。
因線性鏈表只能順序存取,即在查找時要從頭指針找起,查找的時間福再度為 O(n)。
插入和刪除:
因線性鏈表在插入或刪除時,不需要移動元素,只要修改指針,一般情況下時間復雜度為O(1)。
但是,如果要在單鏈表中進行前插或刪除操作,由於要從頭查找前驅結點,所耗時間復雜度為O(n)。
進行插入和刪除的操作是常數即便,但是尋找前驅才要O(n)。