单链表查找/插入/删除算法时间效率分析


单链表查找时间效率分析:

代码:

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)。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM