首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    左式堆左式堆代码实现

    左式堆 性质 零路径长 零路径长的定义为: 零路径长:从节点X到一个没有两个子节点的(有一个子节点或没有子节点)节点的最短距离 对于零路径长,有以下递归的计算方法: 每个节点的零路径长比子节点的最小零路径长大...1 NULL的节点的零路径长为-1,只有一个子节点或没有子节点的节点零路径长为0 左式堆 左式堆是特殊的优先堆,除了有序性(每个节点的数据小于其子节点)以外,还有具有与零路径长相关的性质:对于左式堆,要求任一节点的左子节点零路径长大于等于右子节点的零路径长...操作 合并操作 左式堆的基本操作是合并,合并的递归描述如下: 当输入的两个堆都是空的,输出空堆;当有一个堆是空的,则返回非空的堆 当两个堆非空时,比较两个根节点的大小,返回为: 堆根节点为原较小的根节点...左子树为原较小的跟节点的左子树 右子树为根节点较大的堆和跟节点较小堆右子树合并的结果 如下图所示: ?...merge_op.png 对于最终结果,可能在根节点上出现不符合左式堆的性质的情况,出现这种情况时,交换左右子节点即可: ?

    953100

    左值、左值引用,右值,右值引用

    c++11中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能,用的不多,每次看过了就忘了,整理下; 1、左值和右值: 左值是指表达式结束后依然存在的持久化对象; 右值是指表达式结束时就不再存在的临时对象...; 比方: int i=0;// i是左值, 0是右值 2、左值引用: c++98中的引用很常见了,就是给变量取了个别名,在c++11中,因为增加了右值引用(rvalue reference)的概念,所以...int a = 10;  int& refA = a; // refA是a的别名, 修改refA就是修改a, a是左值,左移是左值引用 int& b = 1; //编译错误!...;   //getTemp()的返回值是右值(临时变量) 总结一下,其中T是一个具体类型: 左值引用, 使用 T&, 只能绑定左值; 右值引用, 使用 T&&, 只能绑定右值; 常量左值, 使用 const...T&, 既可以绑定左值又可以绑定右值; 已命名的右值引用,编译器会认为是个左值; 编译器有返回值优化,但不要过于依赖; Q:下面涉及到一个问题:x的类型是右值引用,指向一个右值,但x本身是左值还是右值呢

    80010
    领券