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

HashTable类模板_C++的更多相关文章

  1. 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

    第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  2. 3.2 STL中的函数对象类模板

    *: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...

  3. C++STL - 类模板

    类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板   1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...

  4. C++ 类模板的使用

    从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ...

  5. Xcode6中如何使用自定义的类模板

    说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...

  6. VS2013,VS2015设置类模板文件表头

    一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...

  7. 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

    [源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...

  8. 类模板的static成员

    下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum {   static void foo(T op1 , T op2){    c ...

  9. 4.1 pair类模板

    在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pai ...

随机推荐

  1. asp.net 一般处理程序session 为 null

    必须继承  IRequiresSessionState  接口才行!

  2. IOS程序创建view

    在IOS程序中创建view有六种方式 首先创建一个GLViewController类,继承UIViewController. 然后进入GLAppDelegate.m,在- (BOOL)applicat ...

  3. ARM指令集中经常使用的存储和载入指令

    ARM微处理器支持载入/存储指令用于在寄存器和存储器之间传送数据,载入指令用于将存储器中的数据传送到寄存器,存储指令则完毕相反的操作.经常使用的载入存储指令例如以下: -  LDR     字数据载入 ...

  4. Delta3D 2.8版本号 预习

    http://blog.csdn.net/zhuyingqingfen/article/details/38581453 看到官网今天的更新.发现即将公布的delta3d 2.8 版本号 做了非常大的 ...

  5. jquery自己主动旋转的登录界面的背景代码登录页背景图

    在其他网站上看到比较爽Web登录界面.背景图片可以自己主动旋转. 介绍给大家.有兴趣的可以改改下来作为自己的系统登录界面. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY ...

  6. Linux下tomcat管理查看控制台|杀死tomcat进程

    查看控制台 # tail -f catalina.out 脚本执行权限chmod u+x *.sh #看是否已经有tomcat在运行了 ps -ef |grep tomcat #如果有,用kill; ...

  7. Android的5样的调试信息

    Android的5样的调试信息 华清2014-10-23   北京海淀区  张俊浩 verbose:只是滤全部的信息. 啰嗦的意思. debug:debug调试的意思. info:一般提示的信息inf ...

  8. 实现一个简单的Unity3D三皮卡——3D Picking (1)

    3D Picking 其原理是从摄像机位置到空间发射的射线.基于光线碰到物体回暖. 这里我们使用了触摸屏拿起触摸,鼠标选择相同的原理,仅仅是可选API不同. 从unity3D官网Manual里找到下面 ...

  9. SQL点滴29—错误无处不在

    原文:SQL点滴29-错误无处不在 我只想说以下是很基础的sql知识,但是很容易犯错.所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧! 案例1if not exists (select OrderI ...

  10. SAE设置记录:修改config.yaml实现地址重写和修改固定链接

    刚搭建完sae博客后闲置下来了,偶尔写两篇文章,最近想整理整理sae,于是开始. 刚新建完博客修改固定链接,可是保存后直接访问出现问题,访问不到文章了,而且我的博客地址前面会出现"1.&qu ...