哈希表c++实现电话号码本,主函数有问题,请指正谢谢
文本文件是:
3 // 文件中有多少个人的信息确定循环的次数 主函数中的size先把3 读进来
Joe 123456 // 每一条信息都是 人名 号码(中间有空格) record 读这两个部分存进来 然后object访问类实现
Mark 123987 // 类方法定义的是int型变量,读人名的时候不知道能不能读成ASC码读进来
Lily 456789 //谢谢
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cmath>
#include <cstring>
#define tablesize 100
using namespace std;
class Element{
public:
int key;
int value;
bool status;
};
class hashtable{
public:
hashtable(int n);
~hashtable();
int datasize;
friend class Element ;
Element *elem;
int hash(int n);
int search(int key);
void insert(int key, int val);
void display();
void remove(int key);
};
hashtable::hashtable(int n ){
Element *elem = new Element();
int i;
datasize=0;
for(i=0; i<tablesize; i++){
elem[i].key=0;
elem[i].value=0;
elem[i].status=0;
}
}
hashtable::~hashtable(){
delete[] elem;
}
int hashtable:: hash(int n){
return (n*3)%11;
}
void hashtable::insert(int key, int value){
int pos;
int i=1;
if(datasize == tablesize){
cout<<"Hash table is full"<<endl;
return;
}
else{
pos=hash(key);
for( i=1; i<tablesize;i++){
if( (elem[pos].status==0) && (datasize< tablesize)){
elem[pos].key=key;
elem[pos].value=value;
elem[pos].status=1;
datasize++;
return;
}
else{
pos=(pos+1)%tablesize;
}
}
}
}
int hashtable::search(int key){
int pos = hash(key);
for(int i=0;i<tablesize;i++){
if((elem[pos].status =1) && (elem[pos].key==key) && (pos < tablesize)){
cout<<"true"<<endl;
return pos;
}
else if( elem[pos].status == 0 && pos<tablesize){
pos=(pos+1)%tablesize;
//status =elem[pos].status;
}
else{
cout<<"false"<<endl;
return 0;
}
}
}
void hashtable::remove(int key ){
int pos=search(key);
if(pos==0){
cout<<"There is no such a key in the hash table"<<endl;
}
elem[pos].key=0;
elem[pos].value=0;
elem[pos].status=0;
datasize--;
}
void hashtable::display(){
int i;
if(datasize=0){
cout<<"The hash table is empty."<<endl;
return;
}
for(i=0;i<tablesize;i++){
cout<<elem[i].key<<"\t"<<elem[i].value<<"\t"<<endl;
}
}
int main(){
hashtable *record =new hashtable(tablesize);
hashtable *object = new hashtable(tablesize);
int item;
int i,size;
string input;
cin >> size;
for(i=0;i<size;i++){
cin >> record[i].key;
cin >> record[i].value;
}
cout<<"Please enter display, remove name, search name,insert, seperated by spase"<<endl;
cin>>input;
if(input=="insert"){
for(i=0;i<size;i++){
object->insert(record[i].key,record[i].value);
}
}
else if(input =="search"){
cin >> item;
object->search(item);
}
else if(input=="remove"){
cin>>item;
object->remove(item);
}
else if(input=="display"){
object->display();
}
}
相关推荐
散列表的设计与实现设计散列表实现电话号码查找系统。
散列表是一种高效的数据结构,它通过哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。
C/C++哈希表实现的电话号码查询系统实战
哈希表是一种常见的数据结构,广泛应用于各种IT系统中,用于快速查找、插入和删除数据。哈希表的核心思想是通过一个哈希函数,将关键字映射到一个表中的位置,从而实现对数据的快速访问。哈希表的高效性主要依赖于哈希函数的设计,理想情况下,哈希函数能够将关键字均匀地映射到表中,避免冲突,从而达到高效的性能。然而,实际应用中,由于关键字的数量和分布往往无法预测,冲突是不可避免的。因此,如何设计一个优良的哈希函数,以及如何解决冲突,是实现高效哈希表的关键。
C++哈希表实现高效电话号码查询系统
哈希函数是一种将输入(称为“键”)映射到数字域的函数,目的是为了在哈希表中快速定位数据存储位置。哈希函数的设计非常关键,因为它直接影响着哈希表的性能。理想的哈希函数会将键均匀分布在整个哈希表中,减少冲突的发生概率。以一个简单的电子邮件地址数据库为例,我们可能需要根据用户的邮箱地址来检索其个人信息。如果使用哈希函数来处理这些邮箱地址,可以极大地提升查询效率。// 一个简单的哈希函数示例,将字符串映射为哈希码冲突解决是哈希表设计中的关键环节。
基于C++散列表的高效电话号码查找系统实现
public:预计算哈希值,避免重复计算。回过头看,散列表的设计过程其实反映了典型的工程权衡:时间 vs 空间简洁 vs 高效理论最优 vs 实际表现它教会我们:没有绝对正确的答案,只有最适合当前场景的选择。下次当你快速找到某个联系人时,不妨想想背后的那一串哈希值、那一条探测路径、那一块被精心管理的内存——原来,科技的温度,就藏在这些细节之中 ❤️。本文还有配套的精品资源,点击获取简介:散列表是一种高效的哈希数据结构,广泛应用于快速查找与存储场景。
利用C++哈希表的方法实现电话号码查询系统
在C++中,标准库提供了一个名为`std::unordered_map`的容器,它是实现哈希表的一种方式。电话号码查询系统是哈希表应用的经典场景,尤其适合处理大量的查询操作。


