数据结构课程设计通讯录、电话号码查询系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、课程设计概述:

本次数据结构课程设计共完成两个题:电话号码查询系统、通讯录。

使用语言:C

编译环境:VC6.0

二、课程设计题目一

[实验内容]

电话号码查询系统

[问题描述]

设计散列表实现电话号码查找系统。

[需求分析]

(1)设每个记录有下列数据项:电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;

(3)采用一定的方法解决冲突;

(4)查找并显示给定电话号码的记录;

(5)查找并显示给定用户名的记录。

整个系统必须满足系统功能要求;设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。

[概要设计]

void getin(Record* a) // 键盘输入联系人的信息

void ShowInformation(Record* a) //显示输入的用户信息

Status collision(int p,int &c) // 冲突处理函数,采用二次探测再散列法解决冲突

void CreateHash(HashTable* H ,Record* a) // 建表,若哈希地址冲突,进行冲突处理void SearchHash ( HashTable* H,int &c) //在通讯录里查找关键字

void Save() //保存

void main_menu()

[存储结构]

typedef struct{//记录

NA name;

NA tel;

NA add;

}Record;

typedef struct{//哈希表

Record *elem[HASHSIZE]; //数据元素存储基址

int count; //当前数据元素个数

int size; //当前容量

}HashTable;

[详细设计]

#include //cout,cin语句的头文件

#include //清屏函数头文件:使用csl时调用system

#include //字符串头文件

#include

#include

#define MAXSIZE 100 //电话薄记录的数量

#define MAX_SIZE 50 //用户名、电话号码、地址的最大长度

#define HASHSIZE 400 //定义表长

#define SUCCESS 1 //查找

#define UNSUCCESS -1

#define LEN sizeof(HashTable) // 哈希表的长度

using namespace std;

typedef int Status;//typedef用来定义类型的别名。此处用status作为int别名,目的表达int 变量是一个状态变量。

typedef char NA[MAX_SIZE]; //NA作为char的别名

typedef struct{ // 自定义一个记录用户名、电话号码、联系地址的结构体的别名record

NA name,tel,add,way;

}Record;

Record a[HASHSIZE];

typedef struct{ //散列表

Record *elem[HASHSIZE]; //数据元素存储地址

int count; //数据元素个数

int size; //容量

}HashTable;

Status eq(NA x,NA y)

{ //关键字比较,相等返回SUCCESS;否则返回UNSUCCESS

if(strcmp(x,y)==0)//2个字符串的大小比较s1=s2,strcmp(s1,s2) == 0; s1>s2, strcmp(s1,s2) == 1; s1

return SUCCESS;

else

return UNSUCCESS;

}

Status NUM_BER; //记录的个数

void getin(Record* a){ // 键盘输入联系人的信息,Record*调用Record函数;a是参数

cout<<"请输入要添加的联系人的个数:\n";

cin>>NUM_BER;

int i;

for(i=0;i

cout<<"请输入第"<

cin>>a[i].name;

cout<<"请输入第"<

cin>>a[i].tel;

cout<<"请输入第"<

cin>>a[i].add;

}}

void ShowInformation(Record* a)//显示输入的用户信息

{

int i;

for( i=0;i

cout<<"\n第"<

}

long fold(NA s) //人名的折叠处理:将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址

{

char *p;

long sum=0;

NA ss;

strcpy(ss,s);//复制字符串,不改变原字符串的大小写

strupr(ss);//将字符串ss转换为大写形式

p=ss;

while(*p!='\0')

sum+=*p++;

return sum;

}

int Hash1(NA str){//哈希函数

long n;

int m;

n=fold(str);//先将用户名进行折叠处理

相关文档
最新文档