HashTable类模板_C++
好久没看数据结构了,今天终于要用到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++相关推荐
- 判断exception类型_C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)...
T.44: Use function templates to deduce class template argument types (where feasible) T.44:使用函数模板推断类 ...
- binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...
目录 定义函数模板 使用函数模板 两阶段翻译 Two-Phase Translation 模板的编译和链接问题 多模板参数 引入额外模板参数作为返回值类型 让编译器自己找出返回值类型 将返回值声明为两 ...
- c++ 模板类实现堆栈实验报告_C++类模板实现栈
定义类模板: template class 类名 {.....}; stack.h #define maxsize 10 template class myStack { private: type ...
- C++提高部分_C++类模板成员函数类外实现---C++语言工作笔记092
然后我们再来说,类模板成员函数的类外实现 上面我们写一个Person类,然后 类模板template 然后写一个Person构造方法,然后,写一个showPerson方法 然后后面我们要用字符串,我们 ...
- C++提高部分_C++类模板与继承---C++语言工作笔记091
然后我们再来看,c++中的类模板,与继承,可以看到 当子类继承的父类是一个类模板的时候,子类在声明的时候,要指定父类中的类型 如果不指定父类中的T的类型的话,编译器就无法给子类,分配内存,这个很好理解 ...
- C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090
然后我们再去看C++的类模板也可以做函数的参数,而且参数方式 可以有3种方式,1.可以指定传入类型,2可以把参数变成模板进行传递, 3.将整个类进行模板化 我们去写个例子去看看 首先我们写一个Pers ...
- C++提高部分_C++类模板中成员函数的创建时机---C++语言工作笔记089
然后我们再来看类模板中成员函数的创建时机是什么时候 可以看到,普通类中的成员函数一开始就可以创建了, 类模板中的成员函数在调用时才创建. 我们写个例子看看,可以看到我们写了一个Person1类,然后 ...
- C++提高部分_C++类模板与函数模板的区别---C++语言工作笔记088
然后我们再去看看类模板和函数模板的区别, 类模板没有自动类型推导,这一种使用方式. 类模板在模板参数列表中是可以有默认参数的. 用例子去说明一下,可以看到我们写了一个Person类,然后 这个类有两个 ...
- C++提高部分_C++类模板基本语法---C++语言工作笔记087
然后我们再来看类模板,可以看到类模板,跟函数模板的区别,就是template 下面是个类,我们去看看 我们先去写一个类Person 然后这个类上面,写上一个模板,可以看到,指定了 template 可 ...
最新文章
- 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
- Ubuntu16.04 配置pytorch
- STM32F103构建固件库模板(PS固件库文件树介绍)
- 【Makefile由浅入深完全学习记录5】预定义变量的使用
- jquery关于checkbox在ie下的一个bug
- cacti安装和配置 技术交流群:146510248
- CentOS下用于查看系统当前登录用户信息的4种方法
- python优先队列的库,python优先队列及二叉堆的实现
- Python+OpenCV:Optical Flow(光流)
- shell脚本学习总结02--数组
- Java程序员常用软件
- nbu备份脚本 linux,NBU60网络备份大全之Linux设备管理(参考Word)
- AI制作ICON流程
- python爬虫Selenium批量关注微博用户
- block locality
- android 仿微信视频压缩上传,iOS视频压缩(仿微信录像)
- 安装和使用Linux花生壳(公网版)
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.5 层次结构模型...
- python网球比赛模拟主持稿_主持人大赛模拟主持环节情景
- mysql 在指定的dsn中_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA...
热门文章
- Python Django 常用字段类型
- Linux 交换文件已存在解决办法
- VMware拍摄快照(系统备份)
- Java计算多线程运行时间的简单方式
- 事务的隔离级别演示-避免脏读,演示不可重复读发生
- 如何使用python效率办公_日常office工作中如何用python提升效率014
- 魅族怎么查看内存linux,这就是魅族超级旗舰:看燃
- linux mysql进阶_mysql进阶学习二之搭建主从
- ZigBee网络数据传递流程_基于ZigBee—WSN的温湿度监测系统
- 算法练习day12——190331(哈希函数、哈希表、布隆过滤器、一致性哈希)