zoukankan      html  css  js  c++  java
  • 练习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
  • 相关阅读:
    eclipse中设置自动生成的author,date等注释
    JSP基本指令
    java代码注释规范
    java中的 FileWriter类 和 FileReader类的一些基本用法
    关于java中BufferedReader的read()及readLine()方法的使用心得
    java开发中经典的三大框架SSH
    Java访问修饰符(访问控制符)
    Linux环境变量具体内容介绍
    MSG结构体和WndProc窗口过程详解
    Java当出现未被捕获的异常应该如何处理
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10031507.html
Copyright © 2011-2022 走看看