首页 > 其他 > 详细

1.4

时间:2016-01-04 08:51:14      阅读:151      评论:0      收藏:0      [点我收藏+]

#include<iostream>
#include <fstream>
using namespace std;
#define MAXSIZE 50
//哈希表元素的三种状态,没有记录、有记录、有过记录但已被删除
typedef struct info
{
int num;//联系人电话
char name;
char address;
}group;//information of students
typedef struct hash
{
int max;
int len;
int elemflag[50];//元素状态,没有记录、有记录、有过记录但已被删除
group data[50];

}ha;


ha p;
void creat(){//初始化哈希表
for(int i=0;i<=49;i++)
p.elemflag[i]=0;//每个元素位置上被标记为 “没有过“
}

void list() //显示哈希表所有元素及其所在位置
{ cout<<"哈希表如下显示;"<<endl;
//显示哈希表中记录所在位置
for(int i=0;i<=49;i++) //显示哈希表中记录值
{if(p.elemflag[i]==1)
cout<<i<<"."<<"电话:"<<p.data[i].num<<"姓名:"<<p.data[i].name<<"地址:"<<p.data[i].address<<endl;
if(p.elemflag[i]==0||p.elemflag[i]==2) cout<<i<<"."<<"null"<<endl;}
}

 

 

int find(int a)//search the information by telephone number
{
int d,position;
int o=1;
position=d=a%50;//get the hash position
while(p.elemflag[d]==1&&p.data[d].num!=a)//该位置填有记录并且关键字不相等
{ d=d+o*o; //冲突处理方法:线性探测再散列
o++;
if(d>=50) d=d%50; //循环搜索 if(d==position)return 0;//整个表已搜索完,没有找到待查元素
}
if(p.data[d].num==a&&p.elemflag[d]==1) {cout<<"您所输入的联系人信息是"<<"电话:"<<p.data[d].num<<"姓名"<<p.data[d].name<<"地址"<<p.data[d].address<<endl;return 1; }//查找成功,d指示待查元素位置
//查找成功返回1
else return 0;//查找失败

//else return 0;//失败的返回0

}


int append(int n,char name,char address)//查找不成功时插入元素e到开放定址哈希表H中,并返回True,否则返回False
{ int d;
int position;
d=position=n%50;
int o=1;
while (p.elemflag[position]==1&&p.data[d].num!=n)//concept has been occupyed
{
position=position+o*o;
o++;
if(position>=50)position=position%50;
if(position==d)return 0;
}
if(p.elemflag[position]==0||p.elemflag[position]==2)
{ //表示该位置没有记录
p.data[position].num=n; //插入记录
p.data[position].name=name;
p.data[position].address=address;
p.elemflag[position]=1;
return 1;}


}
void load()
{ char wenjian[50];
ifstream in;
in.open("E:\txl.txt");
for(int i=0;i<=2;i++)
{
in.getline(wenjian[i],80);
in.getline(wenjian[i]);
in.getline(wenjian[i]);
}
out.close();
for(int i=0;i<=2;i++){
append(p.wenjian[i].num,p.wenjian[i].name,p.wenjian[i].address);}


}

int DeleteHash(int n)
{

int d,position;
int o=1;
position=d=n%50;//get the hash position
while(p.elemflag[d]==1&&p.data[d].num!=n)//该位置填有记录并且关键字不相等
{ d=d+o*o; //冲突处理方法:线性探测再散列
o++;
if(d>=50) d=d%50; //循环搜索 if(d==position)return 0;//整个表已搜索完,没有找到待查元素
}
if(p.data[d].num==n&&p.elemflag[d]==1)
{cout<<"您将要的联系人信息是"<<"电话:"<<p.data[d].num<<"姓名"<<p.data[d].name<<"地址"<<p.data[d].address<<endl;
p.elemflag[d]=2;cout<<"删除成功!"<<endl;return 1; }//查找成功,d指示待查元素位置
//查找成功返回1

else
cout<<"不存在此元素"<<endl;
//表中不存在待删元素

}


void main()
{



printf("\n\t**************************************");
printf("\n\t* 哈 希 查 找 * ");
printf("\n\t**************************************");
printf("\n\t* 1-----------------建表 *");
printf("\n\t* 2-----------------显示 *");
printf("\n\t* 3-----------------查找 *");
printf("\n\t* 4-----------------插入 *");
printf("\n\t* 5-----------------删除 *");
printf("\n\t* 6-----------------载入文件 *");
printf("\n\t* 0-----------------退出 *");
printf("\n\t**************************************");
int x;
int k= 1;
while (k)
{

printf("\n\n\t请输入菜单号:");
cin>>x; //输入操作选项
switch(x)
{
case 1:
creat();
cout<<"哈希表初始化成功!"<<endl;
break;

case 2:
list();
break;
case 3 :

cout<<"请输入要查找的电话号码:"<<endl;
int a;
cin>>a;
if(find(a)==1)
{cout<<"查找成功!";}
else cout<<"查找失败!"<<endl;
break;
case 4:
int r;
char name,address;
cout<<"请输入要插入的电话号码"<<endl;
cin>>r;
cout<<"请输入要插入的姓名"<<endl;
cin>>name;
cout<<"请输入要插入的地址"<<endl;
cin>>address;
append(r,name,address);
cout<<"插入成功!"<<endl;
break;
case 5:
int l;
cout<<"请删除要插入的电话号码"<<endl;
cin>>l;
DeleteHash(r);

break;
case 6:
load();
break;

case 0:
k=0;
break;

}


}

printf("\n\t欢迎再次使用本程序,再见!\n");

}

1.4

原文:http://www.cnblogs.com/helloaworld/p/5097728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!