数据结构c++实现基本的堆

# pragma> bool运营商()(const T&离开,const T&右)

{

返回左比;正确的;

}

};

template<类T>

struct少

{

bool运营商()(const T&离开,const T&右)

{

返回左& lt;正确的;

}

};


template在//默认建小堆堆

{

公共:

堆()

{

}

堆(const T *数组,size_t大小)

{

断言(数组);

(size_t我=0;我& lt;大小;+ + i)

{

_vec.push_back(阵列[我]);}

(int i=_vec.size ()/2 - 1;我在=0;——我)

{

_AdjustDown (_vec, _vec.size ());

}

}

堆(const vector和vec)

{

_vec.swap (vec);

(int i=_vec.size ()/2 - 1;我在=0;——我)

{

_AdjustDown (_vec, _vec.size ());

}

}

空白推(const T&x)

{

_vec.push_back (x);

如果_vec.size()比;0)

_AdjustUp (_vec, _vec.size () - 1),

}

空白Pop ()

{

交换(_vec [0], _vec [_vec.size ()——1]);

_vec.pop_back ();

_AdjustDown (_vec 0 _vec.size ());}

const T&GetTop ()

{

断言(_vec.size()比;0);

返回_vec [0];

}

bool空()

{

返回_vec.empty ();

}

size_t大小()

{

返回_vec.size ();

}

私人:

空白_AdjustDown (vector和矢量,int, int大小)

{

int=根* 2 + 1,

,(左& lt;大小)

{

如果(左+ 1 & lt;大小,,Compare () (vec(左+ 1),vec(左)))

+ +左;

如果(比较()(vec(左),vec(根)))

{

交换(vec(左),vec(根));

根=左;

=根* 2 + 1,

}

其他打破;

}

}

空白_AdjustUp (vector和矢量,int指数)

{

int父母=指数在祝辞1;

,(比较()(vec(指数),vec(父)))

{

交换(vec(指数),vec(父));

指数=父;

父=指数在祝辞1;

}

}

保护:

vector_vec;//底层使用向量来实现

};

空白测试()

{

arr int []={1、2、8、9、7、4、6、5、11、10};

Heaph(加勒比海盗,sizeof (arr)/sizeof (arr [0]));

h.Push (0);

h.Pop ();

cout & lt; & lt;h.GetTop () & lt; & lt;endl;

h.Pop ();

}


数据结构c++实现基本的堆