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; }
HashTable类模板_C++的更多相关文章
- 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板
第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...
- 3.2 STL中的函数对象类模板
*: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...
- C++STL - 类模板
类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板 1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...
- C++ 类模板的使用
从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ...
- Xcode6中如何使用自定义的类模板
说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...
- VS2013,VS2015设置类模板文件表头
一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
- 类模板的static成员
下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum { static void foo(T op1 , T op2){ c ...
- 4.1 pair类模板
在学习关联容器之前,首先先要了解一下STL中的pair类模板,因为关联容器的一些成员函数返回值都是pair对象,而且map 和multimap中的元素都是pair对象. 1)pair类模板定义 pai ...
随机推荐
- ZOJ3640之简单慨率DP
Help Me Escape Time Limit: 2 Seconds Memory Limit: 32768 KB Background If thou doest well, ...
- 1_BLE nRF51822 UART 与 BLE转发
去年Noridc出了集成蓝牙4.0并能开口说话24L01通信芯片,这部电影可以非常小包装.和低功耗.非常适合于可穿戴设备,然后挖了一个免费的手在不久的将来AK II,又没了一个Becon的板子.先玩了 ...
- java设计模式之五原型模式(Prototype)
原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通过对象的复制,进行讲解.在Java中 ...
- 还在等待漫长的iOS构建过程?来试试通过命令行的方式进行iOS应用快速构建和运行吧
不必多言,Xcode慢得很是众所周知的了.更甚者是,我有时发觉自己太依赖于Cocoa Touch的自动完成功能了,这可是个天使和魔鬼的结合体! 故此我开始去寻觅一个替代的流程来通过命令行来实现我需要的 ...
- 如何用dumpbin.exe检查编译器生成的托管模块所嵌入的信息
开启CMD 运行到dumpbin目录下:D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 运行命令VCVARS32.BAT,配置环境 ...
- java在string和int相互转化
1 如何串 String 转换成整数 int? A. 有两种方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([St ...
- Android项目---listview的那些属性,常用却不常见
一.在xml中,常用到的属性有 android:cacheColorHint="#00000000" //设置拖动背景色为透明 android:dividerHeight=&quo ...
- 百度地图SDK for Android v2.1.3全新发布
2013年8月1日 Android SDK:V2.1.3产品上线 新增: 增加短串分享接口(poiDetailShareURLSearch.poiRGCShareURLSearch) 驾车路线检索增加 ...
- 你是否应该使用一个Javascript MVC框架?
你是否应该使用一个Javascript MVC框架?本文摘自smashingmagazine的Journey Through The JavaScript MVC Jungle部分内容,希望对大家有帮 ...
- ext日期加减任意天数
1.Ext.util.Format.date(new Date().add(Date.DAY, 5), 'Y-m-d'), 'Y-m-d') 2.Ext.util.Format.date(new Da ...