⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 散列表.cpp

📁 课程设计: 关于二叉树操作
💻 CPP
字号:
#include "iostream.h" 
#include "string.h" 
#include "fstream.h" 
#define NULL 0 
unsigned int key; 
unsigned int key2; 

int *p; 
struct node //建节点 
{ 
	char name[8],address[20]; 
	char num[11]; 
	node * next; 
}; 
typedef node* pnode; 
typedef node* mingzi; 
node **phone; 
node **nam; 
node *a; 

void hash(char num[11]) //哈希函数 
{ 
	int i = 3; 
	key=(int)num[2]; 
	
	while(num[i]!=NULL) 
	{ 
		key+=(int)num[i]; 
		i++; 
	} 
	key=key%20; 
} 
void hash2(char name[8]) //哈希函数
{ 
	int i = 1; 
	key2=(int)name[0]; 
	
	while(name[i]!=NULL) 
	{ 
		key2+=(int)name[i]; 
		i++; 
	} 
	key2=key2%20; 
} 

node* input() //输入节点 
{ 
	node *temp; 
	temp = new node; 
	temp->next=NULL; 
	cout<<"输入姓名:"<<endl; 
	cin>>temp->name; 
	cout<<"输入地址:"<<endl; 
	cin>>temp->address; 
	cout<<"输入电话:"<<endl; 
	cin>>temp->num; 
	return temp; 
} 
int apend() //添加节点 
{ 
	node *newphone; 
	node *newname; 
	newphone=input(); 
	newname=newphone; 
	newphone->next=NULL; 
	newname->next=NULL; 
	hash(newphone->num); 
	hash2(newname->name); 
	newphone->next = phone[key]->next; 
	phone[key]->next=newphone; 
	newname->next = nam[key2]->next; 
	nam[key2]->next=newname; 
	return 0; 
} 
void create() //新建节点 
{ 
	int i; 
	phone=new pnode[20]; 
	for(i=0;i<20;i++) 
	{ 
		phone[i]=new node; 
		phone[i]->next=NULL; 
		
	} 
	
} 
void create2() //新建节点 
{ 
	int i; 
	nam=new mingzi[20]; 
	for(i=0;i<20;i++) 
	{ 
		nam[i]=new node; 
		nam[i]->next=NULL; 
		
	} 
	
} 
void list() //显示列表 
{ 
	int i; 
	node *p; 
	for(i=0;i<20;i++) 
	{ 
		p=phone[i]->next; 
		while(p) 
		{ 
			cout<<p->name<<'_'<<p->address<<'_'<<p->num<<endl; 
			p=p->next; 
		} 
	} 
} 
void list2() //显示列表 
{ 
	int i; 
	node *p; 
	for(i=0;i<20;i++) 
	{ 
		p=nam[i]->next; 
		while(p) 
		{ 
			cout<<p->name<<'_'<<p->address<<'_'<<p->num<<endl; 
			p=p->next; 
		} 
	} 
} 

void find(char num[11]) //查找用户信息 
{ 
	hash(num); 
	node *q=phone[key]->next; 
	while(q!= NULL) 
	{ 
		if(strcmp(num,q->num)==0) 
			break; 
		q=q->next; 
	} 
	if(q) 
		cout<<q->name<<"_" <<q->address<<"_"<<q->num<<endl; 
	else cout<<"无此记录"<<endl; 
} 
void find2(char name[8]) //查找用户信息 
{ 
	hash2(name); 
	node *q=nam[key2]->next; 
	while(q!= NULL) 
	{ 
		if(strcmp(name,q->name)==0) 
			break; 
		q=q->next; 
	} 
	if(q) 
		cout<<q->name<<"_" <<q->address<<"_"<<q->num<<endl; 
	else cout<<"无此记录"<<endl; 
} 


void save() //保存用户信息 
{ 
	int i; 
	node *p; 
	for(i=0;i<20;i++) 
	{ 
		p=phone[i]->next; 
		while(p) 
		{ 
			fstream iiout("out.txt", ios::out); 
			iiout<<p->name<<"_"<<p->address<<"_"<<p->num<<endl; 
			p=p->next; 
		} 
	} 
	
} 

void menu() //菜单 
{ 
	
	cout<<"1.添加记录"<<endl; 
	cout<<"2.查找记录"<<endl; 
	cout<<"3.姓名散列"<<endl; 
	cout<<"4.号码散列"<<endl; 
	cout<<"5.清空记录"<<endl; 
	cout<<"6.保存记录"<<endl; 
	cout<<"7.退出系统"<<endl; 
} 

int main() 
{ 
	
	char num[11]; 
	char name[8]; 
	
	create(); 
	create2() ; 
	
	int sel; 
	while(1) 
	{ 
		menu(); 
		cin>>sel; 
		if(sel==2) 
		{ cout<<"9号码查询,8姓名查询"<<endl; 
		int b; 
		cin>>b; 
		if(b==9) 
		{cout<<"请输入电话号码:"<<endl; 
		cin >>num; 
		cout<<"输出查找的信息:"<<endl; 
		find(num); 
		} 
		else 
		{cout<<"请输入姓名:"<<endl; 
		cin >>name; 
		cout<<"输出查找的信息:"<<endl; 
		find2(name);}} 
		
		if(sel==1) 
		{cout<<"请输入要添加的内容:"<<endl; 
		apend();} 
		if(sel==3) 
		{cout<<"姓名散列结果:"<<endl; 
		list2();} 
		if(sel==4) 
		{cout<<"号码散列结果:"<<endl; 
		list(); 
		} 
		if(sel==5) 
		{cout<<"列表已清空:"<<endl; 
		create();create2();} 
		if(sel==6) 
		{ cout<<"通信录已保存:"<<endl; 
		save();} 
		if(sel==7) return 0; 
		
	} 
	
	return 0; 
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -