• 练习3.17


    题目要求:不同于我们已经给出的删除方法,另一种是使用懒惰删除(lazy deletion)的方法。为了删除一个元素,我们标记上该元素被删除(使用一个

    附加的域)。表中被删除和非被删除作为数据结构的一部分被保留。如果删除元素和非删除元素一样多,我们遍历整个表,对所有标记点执行标准的删除

    算法。

    (1)懒惰标记的优点和缺点:

    优点:避免了删除次数较多却比整个表的所有元素个数的一半少的时侯多次删除造成的时间浪费。

    缺点:占用较多内存空间。

    (2)实现代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    struct Node{
        int x,bj,Delete_size,yes_size;
        struct Node* next;
    }; 
    typedef struct Node* List;
    typedef List Position;
    
    List Init(List L)
    {
        L=(List)malloc(sizeof(struct Node));
        L->next=NULL;
    }
    
    void Insert(int x,List L,Position p)
    {
        L->yes_size++;
        Position tp=(List)malloc(sizeof(struct Node));
        tp->x=x;
        tp->bj=1;
        tp->next=p->next;
        p->next=tp;
    }
    
    void Delete_Lazy(int x,List L)
    {
        Position p=L->next,tp;
        while(p->x!=x&&p!=NULL)
        {
            p=p->next;
        }
        p->bj=-1;
        L->Delete_size++;
        L->yes_size--;
        if(L->Delete_size>=L->yes_size)
        {
            p=L;
            while(p!=NULL)
            {
                if(p->next->bj==-1)
                {
                    tp=p->next;
                    p->next=tp->next;
                    free(tp);
                }
            }
        }
    }
    
    void Print(List L)
    {
        Position p=L->next;
        while(p!=NULL)
        {
            if(p->bj!=-1) printf("%d ",p->x);
            p=p->next;
        }
        printf("
    "); 
    }
    
    int main(void)
    {
        List p,L;
        L=Init(L);
        L->Delete_size=0;
        L->yes_size=0; 
        p=L;
        int n,i,x;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>x;
            Insert(x,L,p);
            p=p->next;
        }
        Delete_Lazy(3,L);
        Print(L);
        return 0;
    }
    View Code
  • 相关阅读:
    某个周六加班日的划水记
    如何保证消息的可靠性传输
    PHP面向对象学习六 多态
    PHP面向对象学习五 类中接口的应用
    PHP面向对象学习四 类的关键字
    PHP面向对象学习三 类的抽象方法和类
    PHP面向对象学习二
    PHP面向对象学习一
    高级ql
    mysql 方法
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10031507.html
Copyright © 2020-2023  润新知