哈希表c++实现电话号码本,主函数有问题,请指正谢谢
以下是我全部的函数,在最下面的主函数有问题,请看主函数和类的定义。现在报错是主函数中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();
}
}