哈希表c++实现电话号码本,主函数有问题,请指正谢谢

tigercoco 2012-07-26 10:00:28
以下是我全部的函数,在最下面的主函数有问题,请看主函数和类的定义。现在报错是主函数中key ,value不是类hashtable的成员。这个地方和我定义的两个类冲突了但是不知道怎么改。
文本文件是:
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();

}

}
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongxujun 2012-08-08
  • 打赏
  • 举报
回复
elem前不要加Element类型,有点乱
linguangliang 2012-07-27
  • 打赏
  • 举报
回复
key value是Element类成员变量record[i].key???!,另外你hashtable构造函数定义
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;

}
//定义的Element只有一个,怎么又elem[i]??!,如果你想通过tablesize控制Element个数,也要
elem = new Element[tablesize]定义吧,elem前不要加Element类型,因为你将其定义为hashtable的成员变量了,反正你这段代码有很多错误!

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧