标题:懒惰删除

来源:互联网 发布:linux home目录不见了 编辑:程序博客网 时间:2024/06/08 14:38

摘要:(1)某些情况下删除是一种昂贵的操作,这个时候我们可以采用懒惰删除的办法。
(2)简单的标记要删除的节点是为已删除。然后在查找等例程里面都人为的忽视标记过的节点.
(3)如果标记删除的节点大于总数一半,就进行一次遍历,删除所有标记节点.

void Lazy_Delete(List L,int X){    List temp;    List P = L->Next;    while(P!=NULL&&P->Element!= X)        P = P->Next;    if (P == NULL||P->mark == deleted){        puts("cannot delete a nonexistent element");        return;    }    P->mark = deleted;    L->size_of_deleted ++;    L->size_of_undeleted --;    if(L->size_of_deleted < L->size_of_undeleted)    //不满足就返回    return;    //满足真正删除节点    P = L->Next;    while(P!=NULL)    {        if(P->mark == deleted)        {            temp = FindPrevious(L,P);;            temp->Next = P->Next;            free(P);                P = temp->Next;         }        else            P = P->Next;    }    L->size_of_deleted = 0;}
1 0
原创粉丝点击