• 练习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
  • 相关阅读:
    用命令行工具安装 卸载 设置 .Net服务
    oracle imp 数据时实现插入到表中 不覆盖
    Oracle导出 Exp的使用
    Linux下的tar压缩解压缩命令详解
    设计模式 配置器
    设计模式 概括说明
    设计模式 创建型模式
    设计模式 组成 & 装饰 & 外观
    设计模式 单件 & 原型
    设计模式 享元 & 代理
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10031507.html
Copyright © 2020-2023  润新知