单链表查找时间效率分析:
代码:
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)。