HashTable类模板_C++
2023-09-27 14:23:51 时间
好久没看数据结构了,今天终于要用到hash,整理一下写了个hash类模板
template<typename T> class DataType { public: T key; DataType(T k):key(k){} DataType(void){} bool operator ==(const DataType &a) { return key == a.key; } bool operator !=(const DataType &a) { return key != a.key; } }; enum KindOfItem{Empty, Active, Delete}; template<typename T> class HashItem { public: DataType<T> data; KindOfItem info; HashItem(KindOfItem i = Empty):info(i){} HashItem(DataType<T> d, KindOfItem i = Empty):data(d),info(i){} bool operator ==(const HashItem & a) { return a.data == data; } bool operator !=(const HashItem &a) { return a.data != data; } }; template<typename T> class HashTable { public: const int size; HashItem<T> *ht; int FindItem(const HashItem<T> &a); int InsertItem(const HashItem<T> &a); int DeleteItem(const HashItem<T> &a); HashTable(int k); ~HashTable(); };
template<typename T> HashTable<T>::HashTable(int k): size(k), ht(0) { ht = new HashItem<T>[size]; } template<typename T> HashTable<T>::~HashTable() { if (ht) { delete[]ht; ht =0; } } template<typename T> int HashTable<T>::FindItem(const HashItem<T> &a) { int i = a.data.key%size; int j = i; while (ht[j].info == Active && ht[j].data != a.data) { j = (j+1)%size; if (j == i) { return -size; } } if (ht[j].info == Active) { cout<<"发现数据"<<endl; return j; } else { return -j; } return 0; } template<typename T> int HashTable<T>::InsertItem(const HashItem<T> &a) { int i = FindItem(a); if (i > 0 || (i==0 && ht[0].info == Active)) { return -1; } if (i == -size) { cout<<"hashtable已满,插入失败"<<endl; return -1; } else { ht[-i] = a; ht[-i].info = Active; } cout<<"插入成功"<<endl; return i; } template<typename T> int HashTable<T>::DeleteItem(const HashItem<T> &a) { int i = FindItem(a); cout<<i<<endl; if (i < 0|| (i==0 && ht[0].info != Active)) { cout<<"无此数据"<<endl; return -1; } ht[i].info = Delete; cout<<"删除成功"<<endl; return i; }
相关文章
- c++之模板【进阶版】
- 【C++】模板初阶——函数模板和类模板
- 从 C++ 走向 rust(四):创建自己的库文件
- C++内存对齐的理解
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- 【C++】模板总结
- 详解C++右值引用
- c++引用总结
- 冒泡排序极其优化(c/c++版本)
- C++类模板
- (四)C++的常用容器简析
- Linux·C/C++主线程对子线程的影响
- C++入门学习——标准模板库之vector
- C++ 堆 和 堆 分析
- 【C/C++】C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇
- C++笔记:面向对象编程(Handle类)
- C++ gbk与utf8互转
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- C++ DLL 模板 .
- UE4 C++编写自定义动画蓝图节点
- 26.C++- 泛型编程之类模板(详解)
- C++函数包装模板function
- C++函数模版实现
- [C++ STL] 各容器简单介绍
- C++ 调节PCM音频音量大小
- 我对开源C++网络库简单应用总结