紅黑樹C 完整版

2021-07-16 08:05:15 字數 3856 閱讀 6885

這裡寫**片//異常類

////

#ifndef except_h_

#define except_h_

#include using namespace std;

class d***ception

virtual ~d***ception() {};

virtual string tostring() const

virtual string what() const

private:

string message;

};class duplicateitemexception : public d***ception

};class nullpointerexception : public d***ception

}#endif

#include "except.h"

template class cref

explicit cref(const object &x) : obj(&x) {}

object &get() const else

} bool isnull() const

private:

object *obj;

};#endif

///redblacktree.h 最最核心類

//

#ifndef red_black_tree_h_

#define red_black_tree_h_

#include "except.h"

/**紅黑樹規則:

*1.每乙個節點不是紅色就是黑色

*2.根總是黑色的

*3.如果節點是紅色,則他的子節點必須是黑色的

*4.從根到葉節點的每條路徑,必須包含相同數目的黑色節點

*/template class redblacktree;

template class redblacknode;

template class redblacktree ;

redblacktree(const comparable &neginf);

~redblacktree();

void insert(const comparable &x);

creffind(const comparable &x);

creffindmin() const;

creffindmax() const;

bool isempty() const;

void makeempty();

typedef redblacknodenode;

private:

node *header;

node *nullnode;

//當前節點

node *current;

//當前節點的父節點

node *parent;

//祖父節點

node *grand;

//曾祖父節點

node *great;

void rotatewithleftchild(node* &k2) const;

void rotatewithrightchild(node* &k1) const;

void doublerotatewithleftchild(node* &k3) const;

void doublerotatewithrightchild(node* &k1) const;

void handlereorient(const comparable &item);

redblacknode*rotate(const comparable &item,node *theparent) const;

void reclaimmemory(node* t) const;

};template class redblacknode

friend class redblacktree;

};template redblacktree::redblacktree(const comparable &neginf)

template redblacktree::~redblacktree()

template void redblacktree::insert(const comparable &x)

} if(current != nullnode)

current = new node(x,nullnode,nullnode);

if(x < parent->element) else

handlereorient(x);

}//帶著左孩子向右移動

template void redblacktree::rotatewithleftchild(node* &k2) const

//帶著右孩子向左移動

template void redblacktree::rotatewithrightchild(node* &k1) const

template void redblacktree::doublerotatewithleftchild(node* &k3) const

template void redblacktree::doublerotatewithrightchild(node* &k1) const

template void redblacktree::handlereorient(const comparable &item)

current = rotate(item,great);

current->color = black;

} header->right->color = black;

}//通用旋轉函式

/**theparent是item的父節點,item為被旋轉的節點

*旋轉可能性:

*左子樹像向轉,左子樹向右轉

*右子樹像向轉,右子樹向右轉

*/template redblacknode* redblacktree::rotate(const comparable &item,node *theparent) const else

}template crefredblacktree::find(const comparable &x) else if(x > curr->element) else if(curr != nullnode) else }}

template crefredblacktree::findmin() const

node *itr = header->right;

while(itr->left != nullnode)

return cref(itr->element);

}template crefredblacktree::findmax() const

node *itr = header->right;

while(itr->left != nullnode)

return cref(itr->element);

}template bool redblacktree::isempty() const

template void redblacktree::makeempty()

template void redblacktree::reclaimmemory(node* t) const

}#endif

//

main.cpp

#include #include "redblacktree.h"

using namespace std;

int main(int argc, char** argv)

mysql完整版 MYSQL安裝(完整版)

一 完全解除安裝mysql yum remove mysql mysql server mysql libs compat mysql51 rm rf var lib mysql rm etc my.cnf 檢視是否還有mysql軟體 rpm qa grep mysql 如果存在的話,繼續刪除即可。...

php完整版,ThinkPHP5 0完整版

thinkphp5.0版本是乙個顛覆和重構版本,官方團隊歷時十月,傾注了大量的時間和精力,採用全新的架構思想,引入了更多的php新特性,優化了核心,減少了依賴,實現了真正的惰性載入,支援composer,並針對api開發做了大量的優化,包括路由 日誌 異常 模型 資料庫 模板引擎和驗證等模組都已經重...

JS完整版原型鏈剖析之完整版

爭對上兩篇遺留的問題建構函式和object建構函式 proto 屬性執行的問題,我們可以分析出最終他們的原型鏈 即物件原型的物件原型 最後肯定會執行null不然就會一直指向下去 建構函式和object建構函式指向的同乙個原型物件 function建構函式的原型物件 而這個原型物件的 proto 屬性...