演算法導論第十九章二項堆

2021-06-08 14:05:15 字數 1622 閱讀 1272

自己寫的bug應該很多

binheapnode.h

#includeusing namespace std;

class binheap;

class binheapnode

~binheapnode()

void destory()

};

binheap.h

#include"binheapnode.h"

class binheap

~binheap()

void destory1(binheapnode*node) }

binheapnode* findminnum()

p=p->sibling;

} return y;

} //將以y為根的二項樹和以z為根的二項樹合併,使z為y的父節點

void binlink(binheapnode* y,binheapnode*z)

binheapnode*binheapmerge(binheapnode*head1,binheapnode*head2)

if(head2==null)

binheapnode*x,*node1,*node2,*node3;

if(head1->degree<=head2->degree)

else

node3=x;

while(node1&&node2)

else

}if(node1==null)

}else

}return node3;

} void binheapunion(binheapnode*head1,binheapnode*head2)

else if(x->key<=nextx->key)

else

else

prex->sibling=nextx;

binlink(x,nextx);

x=nextx;

}nextx=nextx->sibling;

} }void bininsert(int x)

binheapnode*extractmin()

binheapnode*q=p,*node;

while(q->parent)

q=p;

while(q->sibling)

p->parent=null;

binheapunion(head,p);

return x;

} void binheapdcerasekey(binheapnode*x,int k) }

void binheapdelete(binheapnode*node)

void print(binheapnode*node)

; binheap heap1(4),heap(4);

int i;

/* for(i=0;i<7;i++)

heap1.print();

*/ int b[19]=;

binheap heap2(4);

for(i=0;i<19;i++)

heap2.print();

return 0;

}

第十九章 事務

redis的事務是指將多個命令請求打包,一次性地,按順序執行的機制。通過multi exec watch等命令實現事務功能。19.1.1 事務的開始 multi命令的執行代表了乙個事務的開始,會將執行該命令的客戶端由非事務狀態切換成事務狀態 在客戶端狀態的flags屬性中開啟redis multi標...

第十九章 19 1 1節練習

練習19.1 使用malloc編寫你自己的operator new size t 函式,使用free編寫operator delete void 函式。解答 這個也就參考書中實現吧。不過這裡我更傾向於使用模板來實現,不把new的引數寫死。練習19.2 預設情況下,allocator類使用operat...

第十九章 19 2 1節練習

練習19.3 已知存在如下的類繼承體系,其中每個類分別定義了乙個公有的預設建構函式和乙個虛析構函式 class a class b public a class c public b class d public b,public a 下面的哪個dynamic cast將失敗?a a pa new ...