好久没看数据结构了,今天终于要用到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;}

转载于:https://www.cnblogs.com/jiangu66/p/3221588.html

HashTable类模板_C++相关推荐

  1. 判断exception类型_C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)...

    T.44: Use function templates to deduce class template argument types (where feasible) T.44:使用函数模板推断类 ...

  2. binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...

    目录 定义函数模板 使用函数模板 两阶段翻译 Two-Phase Translation 模板的编译和链接问题 多模板参数 引入额外模板参数作为返回值类型 让编译器自己找出返回值类型 将返回值声明为两 ...

  3. c++ 模板类实现堆栈实验报告_C++类模板实现栈

    定义类模板: template class 类名 {.....}; stack.h #define maxsize 10 template class myStack { private: type ...

  4. C++提高部分_C++类模板成员函数类外实现---C++语言工作笔记092

    然后我们再来说,类模板成员函数的类外实现 上面我们写一个Person类,然后 类模板template 然后写一个Person构造方法,然后,写一个showPerson方法 然后后面我们要用字符串,我们 ...

  5. C++提高部分_C++类模板与继承---C++语言工作笔记091

    然后我们再来看,c++中的类模板,与继承,可以看到 当子类继承的父类是一个类模板的时候,子类在声明的时候,要指定父类中的类型 如果不指定父类中的T的类型的话,编译器就无法给子类,分配内存,这个很好理解 ...

  6. C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090

    然后我们再去看C++的类模板也可以做函数的参数,而且参数方式 可以有3种方式,1.可以指定传入类型,2可以把参数变成模板进行传递, 3.将整个类进行模板化 我们去写个例子去看看 首先我们写一个Pers ...

  7. C++提高部分_C++类模板中成员函数的创建时机---C++语言工作笔记089

    然后我们再来看类模板中成员函数的创建时机是什么时候 可以看到,普通类中的成员函数一开始就可以创建了, 类模板中的成员函数在调用时才创建. 我们写个例子看看,可以看到我们写了一个Person1类,然后 ...

  8. C++提高部分_C++类模板与函数模板的区别---C++语言工作笔记088

    然后我们再去看看类模板和函数模板的区别, 类模板没有自动类型推导,这一种使用方式. 类模板在模板参数列表中是可以有默认参数的. 用例子去说明一下,可以看到我们写了一个Person类,然后 这个类有两个 ...

  9. C++提高部分_C++类模板基本语法---C++语言工作笔记087

    然后我们再来看类模板,可以看到类模板,跟函数模板的区别,就是template 下面是个类,我们去看看 我们先去写一个类Person 然后这个类上面,写上一个模板,可以看到,指定了 template 可 ...

最新文章

  1. 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
  2. Ubuntu16.04 配置pytorch
  3. STM32F103构建固件库模板(PS固件库文件树介绍)
  4. 【Makefile由浅入深完全学习记录5】预定义变量的使用
  5. jquery关于checkbox在ie下的一个bug
  6. cacti安装和配置 技术交流群:146510248
  7. CentOS下用于查看系统当前登录用户信息的4种方法
  8. python优先队列的库,python优先队列及二叉堆的实现
  9. Python+OpenCV:Optical Flow(光流)
  10. shell脚本学习总结02--数组
  11. Java程序员常用软件
  12. nbu备份脚本 linux,NBU60网络备份大全之Linux设备管理(参考Word)
  13. AI制作ICON流程
  14. python爬虫Selenium批量关注微博用户
  15. block locality
  16. android 仿微信视频压缩上传,iOS视频压缩(仿微信录像)
  17. 安装和使用Linux花生壳(公网版)
  18. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.5 层次结构模型...
  19. python网球比赛模拟主持稿_主持人大赛模拟主持环节情景
  20. mysql 在指定的dsn中_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA...

热门文章

  1. Python Django 常用字段类型
  2. Linux 交换文件已存在解决办法
  3. VMware拍摄快照(系统备份)
  4. Java计算多线程运行时间的简单方式
  5. 事务的隔离级别演示-避免脏读,演示不可重复读发生
  6. 如何使用python效率办公_日常office工作中如何用python提升效率014
  7. 魅族怎么查看内存linux,这就是魅族超级旗舰:看燃
  8. linux mysql进阶_mysql进阶学习二之搭建主从
  9. ZigBee网络数据传递流程_基于ZigBee—WSN的温湿度监测系统
  10. 算法练习day12——190331(哈希函数、哈希表、布隆过滤器、一致性哈希)