- 博客(0)
- 资源 (23)
- 收藏
- 关注
计算机学科SCI期刊汇总(2021年8月).xlsx
计算机学科SCI期刊汇总(2021年8月),包含期刊名称、ISSN编号、影响因子、自引率、年发文量、总被引频次、JCR分区、学科类别等信息
2021-08-17
数据结构 堆的实现(泛型)
数据结构 堆的泛型实现,可以支持对的各种操作(包括建堆,弹出,插入,取顶,删除堆中的某一个元素)等等,同时可以传入函数对象定义大顶/小顶堆(默认小顶),使用更灵活!
2019-08-23
哈希表(带template)
哈希表的实现(注:计算对应变量的哈希值需要重载hashTable::hash_val函数),参考实现如下
#include<string>
#include<string.h>
using namespace std;
/*注:functional里面定义了求哈希值的函数,这里的函数可以不用了*/
namespace hash_val
{
const size_t _FNV_prime = 16777619U;
const size_t _FNV_offset_basis = 2166136261U;
inline size_t _Fnv1a_append_bytes(size_t _Val,
const unsigned char * const _First, const size_t _Count) noexcept
{
for (size_t _Idx = 0; _Idx < _Count; ++_Idx)
{
_Val ^= static_cast<size_t>(_First[_Idx]);
_Val *= ::_FNV_prime;
}
return (_Val);
}
template<class _Kty>
inline size_t _Hash_array_representation(
const _Kty * const _First, const size_t _Count) noexcept
{ // bitwise hashes the representation of an array
return (::_Fnv1a_append_bytes(::_FNV_offset_basis,
reinterpret_cast<const unsigned char *>(_First), _Count * sizeof(_Kty)));
}
/*hash_val(string)*/
template<class _Elem,
class _Traits,
class _Alloc> inline
size_t hash_val(const basic_string<_Elem, _Traits, _Alloc>& _Str)
{ // hash string to size_t value
return (::_Hash_array_representation(_Str.c_str(), _Str.size()));
}
/*hash_val(const char*)*/
inline size_t hash_val(const char *_Str)
{ // hash NTBS to size_t value
return (::_Hash_array_representation(_Str, strlen(_Str)));
}
/*hash_val int*/
template<class _Kty> inline
size_t hash_val(const _Kty& _Keyval)
{ // hash _Keyval to size_t value one-to-one
return ((size_t)_Keyval ^ (size_t)0xdeadbeef);
}
}
2019-08-17
AVL(平衡二叉检索)树模板(带template)
AVL树模板,支持操作如下
template <class T>
struct BSTNode {
T data;
int h;
BSTNode<T> * lchild, *rchild;
};
template <class T>
class AVLTree {
public:
AVLTree() :root(NULL),node_num(0) {}
~AVLTree() { Release(root); }
void Clear() { Release(root); root = NULL; }
bool Insert(T x) { return Insert(root, x); }
bool Delete(T x) { return Delete(root, x); }
BSTNode<T> * Search(T x) { return Search(root, x); }
vector<T> PreOrder() { vector<T>vec; PreOrder(root, vec); return vec; }
vector<T> InOrder() { vector<T>vec; InOrder(root, vec); return vec;}
vector<T> PostOrder() { vector<T>vec; PostOrder(root, vec); return vec;}
vector<T> LevelOrder() { vector<T>vec; LevelOrder(root, vec); return vec;}
inline size_t size() { return node_num; }
private:
size_t node_num;
BSTNode<T> * root;
void Release(BSTNode<T> * bst);
inline int Height(BSTNode<T> * bst) { return (bst == NULL ? -1 : bst->h); }
void SingleRotateWithLeft(BSTNode<T> * &bst;); //LL型
void DoubleRotateWithLeft(BSTNode<T> * &bst;); //LR型
void SingleRotateWithRight(BSTNode<T> * &bst;); //RR型
void DoubleRotateWithRight(BSTNode<T> * &bst;); //RL型
bool Insert(BSTNode<T> * &bst;, const T &x);
bool Delete(BSTNode<T> * &bst;, const T &x);
BSTNode<T> * Search(BSTNode<T> * bst, T &x);
void PreOrder(BSTNode<T> * bst, vector<T>&vec;);
void InOrder(BSTNode<T> * bst, vector<T>&vec;);
void PostOrder(BSTNode<T> * bst, vector<T>&vec;);
void LevelOrder(BSTNode<T> * bst, vector<T>&vec;);
};
2019-08-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人