习题3.17 懒惰删除

//Lazy delete
void
LazyDelete( List L )
{
    Position p;
    p = L;
    while( p->Next != NULL )
    {
        if( p->Next->judg == 1 )
            Delete( p );
        else
            p = p->Next;
    }
}

void
Delete( Position p )
{
    Position TmpCell;
    TmpCell = p->next;
    p->Next = TmpCell->Next;
    free(TmpCell);
}

时间: 2024-10-31 23:24:37

习题3.17 懒惰删除的相关文章

如履薄冰 —— Redis懒惰删除的巨大牺牲

前言 之前我们介绍了Redis懒惰删除的特性,它是使用异步线程对已经删除的节点进行延后内存回收.但是还不够深入,所以本节我们要对异步线程逻辑处理的细节进行分析,看看Antirez是如何实现异步线程处理的.异步线程在Redis内部有一个特别的名称,它就是BIO,全称是Background IO,意思是在背后默默干活的IO线程.不过内存回收本身并不是什么IO操作,只是CPU的计算消耗可能会比较大而已. 懒惰删除的最初实现不是异步线程 Antirez实现懒惰删除时,它并不是一开始就想到了异步线程.最初

[詹兴致矩阵论习题参考解答]习题4.17

17. (Ando-Zhan) 设 $A,B\in M_n$ 半正定, $\sen{\cdot}$ 是一个酉不变范数, 则 $$\bex \sen{(A+B)^r}\leq \sen{A^r+B^r},\quad (0<r\leq 1), \eex$$ $$\bex \sen{(A+B)^r}\geq \sen{A^r+B^r},\quad (1\leq r<\infty). \eex$$ 证明: (1). 先证当 $0<r\leq 1$ 时, $$\bex \sen{(A+B)^r}\

C++ Primer第四版习题--3.17(重做3.14)

/*读入一段文本到vector对象,每个单词存储为vector中的一个元素, * 要求用迭代器实现,把vector中的每个单词转化为大写字母. * 输出转化后的元素,每8个单词为一行 **/ #include <iostream> #include <vector> #include <string> #include <cctype> int main() { std::vector<std::string> svec; std::string

【Weiss】【第03章】练习3.17【习题未完成】

[练习3.17] 不同于我们已经给出的删除方法,另一种是使用懒惰删除的方法. 为了删除一个元素,我们只标记上该元素被删除的信息(使用一个附加的位域). 表中被删除和非被删除的元素个数作为数据结构的一部分被保留. 如果被删除元素和非被删除元素一样多,我们就遍历整个表,对所有被标记的节点执行标准的删除算法. a.列出懒惰删除的优点和缺点. b.编写实现使用懒惰删除的标准链表操作的例程. Answer: a:优点——思想简单粗暴易于理解,误删可有恢复空间 缺点——需要额外的域且节点不及时释放,需要更多

SICP 习题 (2.17)解题总结:列表的遍历

SICP 习题 2.17 要求我们定义出过程last-pair,它返回只包含给定表里之后一个元素的表. 比如 (last-pair (list 23 72 149 34))的结果应该是(34) 当你开始做这道题的时候你应该已经看完书中有关list操作的内容了,你应该明白car和cdr分别是什么意思,也应该知道如何通过递归调用遍历一个list. 有了以上基础的话完成习题2.17就是小菜一碟啦,基本思路就是不断对目标list进行cdr操作,直到最后一个元素为止. 在递归实现上的基本思路就是看目标li

删除文件、文件夹、子目录的工具类

1 package com.wdxc.util; 2 3 import java.io.File; 4 5 /** 6 * 文件删除 7 * 包括文件夹包含文件夹.文件的情况 8 * @author wangbo 9 * 10 */ 11 public class FileDelUtil { 12 13 14 /** 15 * 根据路径删除指定的目录或文件,无论存在与否 16 * @param sPath 要删除的目录或文件路径 17 * @return 删除成功返回 true,否则返回 fal

数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作

AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树. 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1). 也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树). 对Avl树进行相关的操作最重要的是要保持Avl树的平衡条件.即对Avl树进行相关的操作后,要进行相应的旋转操作来恢复Avl树的平衡条件. 对Avl树的插入和删除都可以用递归实现,文中也给出了插入的非递归版本,关键在于要用到栈. 代码如下: #inclu

C++ Primer第二章习题(一)

习题2.1 /* 各种类型在本机所在字长 */ #include<iostream> int main(){ std::cout<<"sizeof(int)="<<sizeof(int)<<std::endl; std::cout<<"sizeof(long)="<<sizeof(long)<<std::endl; std::cout<<"sizeof(long

redis中关于过期键的删除策略

我们已经了解到了Redis是一种内存数据库,Redis中数据都是以key-value的形式存储在内存中,由Redis服务器来维护和管理这部分内存,内存是何足珍贵,不需要的数据或者是已经使用过的没用的数据是不会让它长久的存在于内存中的,毕竟我们还是要建设节约型社会的.所以我们可以通过给键设置生存时间或者过期时间来权衡有限的内存和不断增长的数据,设置过期时间的命令为:[expire key 时间长度(秒)]或者是[pexpire key 时间长度(毫秒)] 同时也可以通过[expireat key