Advertisement

链表和哈希表构成的通讯录系统设计方案。

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
《数据结构与算法分析》课程设计教学任务书及通讯录系统设计:本设计旨在构建一个以姓名为关键的散列表(哈希表)为基础的通讯录查找系统,并完成相关的建立表和检索程序。具体要求如下:(1)每条记录需包含用户名、电话号码和地址这几个数据项;(2)程序需通过键盘输入各记录,并利用姓名为关键字分别在散列表中建立索引;(3)为了处理人名,可以采用汉语拼音形式进行编码,具体字符串到数字的转换方式可自行决定。(4)所使用的哈希函数采用除留余数法进行构造,同时采用二次探测再散列法来解决可能发生的冲突情况;(5)系统能够根据输入的姓名进行查找,并显示对应记录的电话号码和地址信息;若未找到该记录,则提示通讯录中不存在该人员。(6)通讯录的数据信息将被持久化存储到文件中。 ============================================================= 上述任务书基础上,我进一步开发了以下新增功能:1、通讯录的信息以链表的形式进行组织和存储;2、程序具备从先前保存的文件中读取通讯录信息的能力;3、人名支持中文汉字的使用。 =================================== 相关文件包含:contacts.c——作为主程序文件的核心代码;hash.c——负责处理哈希表操作的相关函数实现;hash.h——定义了哈希类型接口的声明文件;list.c——负责实现链表操作所需函数的代码;list.h——声明了链表类型接口文件;menu.c——实现了用户交互菜单功能的代码;menu.h——声明了菜单函数的接口文件。此外,contacts.dat存储着数据信息,采用二进制格式保存;Contacts.cbp则是CodeBlocks开发环境下的工程文件,方便直接打开和使用。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 数据结课程——结合
    优质
    本课程设计旨在通过构建基于链表与哈希表相结合的数据结构模型来优化通讯录系统,提升其查找、插入及删除操作效率。 《数据结构与算法分析》课程设计教学任务书 通讯录系统设计: 设计要求: 1. 设计以姓名为关键字的散列表(哈希表),实现通讯录查找系统,完成相应的建表和查表程序。 2. 每个记录包含以下数据项:用户名、电话号码、地址; 3. 从键盘输入各记录,并分别以姓名作为关键字建立散列表。人名可以采用汉语拼音形式;人名字符串转化为数字的方式自行决定。 4. 使用除留余数法构造哈希函数,采用二次探测再散列法解决冲突。 5. 根据给定的姓名查找对应的电话号码和地址,并显示结果;若找不到则提示通讯录中无此人信息。 6. 通讯录的信息需保存到文件。 在上述任务的基础上,我的程序还增加了以下功能: 1. 使用链表的形式存储通讯录的数据; 2. 支持从文件读取先前已保存的通讯录数据; 3. 允许使用汉字作为人名输入; 文件说明: - contacts.c:主程序文件 - hash.c:支持哈希表操作的相关函数 - hash.h:定义了用于实现哈希类型的接口文件 - list.c:提供列表相关操作的支持函数 - list.h:列出类型接口的声明文档 - menu.c: 菜单功能实现代码 - menu.h : 对菜单函数进行声明 - contacts.dat :数据存储文件(二进制格式) - Contacts.cbp : CodeBlocks工程配置文件,若有CodeBlocks环境可直接打开使用
  • 实现
    优质
    本项目旨在设计并实现一个基于哈希表的通讯录管理系统,通过C++编程语言展示数据结构与算法的实际应用。 每个人的信息至少包括姓名、电话和地址。系统应具备创建通讯录、添加联系人以及按姓名查找等功能。 假设人的名字采用汉语拼音全拼形式,并将其插入到一个哈希表中,该哈希表的长度为班级的人数。使用除留余数法构造哈希函数,并通过链地址法或二次探测再散列法解决冲突问题。 设计菜单时,请确保包含必要的操作提示。
  • 基于C语言实现
    优质
    本项目采用C语言开发,通过哈希表高效管理联系人信息,实现了添加、删除和查询等功能,为用户提供了便捷实用的通讯录解决方案。 本段落分享了使用C语言实现通讯录的哈希表方法的具体代码供参考。 需求分析: 程序用C语言编写,能够生成哈希表、插入电话号码以及进行查找等功能。 按提示输入联系人的相关信息; 以指定格式输出存储的联系人信息; 具备建立、添加、查询和打印的功能; 能识别并纠正用户非法的数据输入。 概要设计:在记录中储存电话号码时,若能在关键字与存储位置间创建一种确定的关系,使得每个关键字都能对应到一个唯一的存储地址,在查找过程中根据这个关系f找到给定值K的映射f(K)即可实现高效检索。
  • 应用与实现
    优质
    本文探讨了哈希表数据结构在通讯录应用程序中的具体应用和实现方式,详细分析了如何利用哈希表提高联系人查找、插入及删除等操作效率。 ```cpp #include #include #include using namespace std; #define NULL 0 unsigned int key; //用于输入/输出文件流类的变量 unsigned int key2; //key和key2分别作为电话号码和姓名的关键字 struct node { char name[8], address[20]; char num[11]; struct node *next; }; typedef struct node* pnode; void hash(char num[]) { int i = 3, key=0; //以电话号码为关键字建立哈希函数 while(num[i] != NULL) { key += (int)num[i]; i++; } key %= 20; } void hash2(char name[]) { int i = 1, key2 = 0; //姓名作为关键字的哈希函数 while(name[i] != NULL) { key2 += (int)name[i]; i++; } key2 %= 20; } node* input() { //输入节点信息,建立结点,并将结点的next指针指向空 node *temp = new node; temp->next=NULL; cout<<输入姓名:<>temp->name; cout<<输入地址:<>temp->address; cout<<输入电话:<>temp->num; return temp; } int apend() { //添加节点 node *newphone, *newname; newphone = input(); hash(newphone->num); newname = newphone; hash2(newname->name); if(phone[key] == NULL) phone[key]=newnode; if(nam[key2] == NULL) nam[key2]=newnode; 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, j; pnode *p; for(j=0;j<20;j++) if(phone[j]!=NULL) cout<name<<\n; for(i=0;i<20;i++) { node *p = phone[i]->next; while(p) { cout << p->name << ; p=p->next; } cout << \n; } } void list2() { //显示列表 int i, j; mingzi *q; for(j=0;j<20;j++) { if(nam[j]!=NULL) cout<name<<\n; } for(i=0;i<20;i++) { node *p = nam[i]->next; while(p) { cout << p->name << ; p=p->next; } cout << \n; } } int main() { char num[11]; char name[8]; create(); create2(); int sel; while(1) { menu(); cin>>sel; if(sel==3){ cout<<8姓名查询 <>b; if(b==9){ cout<<请输入电话号码:<>num; cout<<输出查找的信息:<>name; cout<<输出查找的信息:<
  • 基于C语言实现
    优质
    本项目采用C语言开发,利用哈希表技术高效管理联系人信息,提供增删改查等功能,适用于个人或小型团队使用。 本段落详细介绍了用C语言基于哈希表实现通讯录的方法,具有一定的参考价值,供对此感兴趣的读者参考。
  • 基于建(含报告、源码及截图)
    优质
    本项目通过哈希表实现高效通讯录管理,包含详细设计文档、完整代码以及运行效果截图,旨在展示数据结构在实际应用中的优势。 C语言课程设计要求使用哈希表来构建通讯录系统,并提交报告、源代码(*.c 和 *.exe 文件)、截图以及需求分析等内容。此外,还需定义抽象数据类型并编写伪码及其详细解释,绘制函数调用关系图和主程序流程图等文档资料。
  • 基于课程管理
    优质
    本项目为一款基于链表数据结构设计的学生通讯录管理系统,旨在通过C/C++编程语言实现高效的数据存储与检索功能。系统支持添加、删除及查询学生信息,并提供友好的用户交互界面。该项目不仅锻炼了程序设计能力,还加深了对数据结构的理解和应用实践。 能够对数据进行存储、读取、查找、删除以及修改。
  • 基于C++数据结课程源码及报告(95分以上).zip
    优质
    本项目为高分课程设计作品,提供了一个基于C++编写的通讯录管理系统源代码及其详细报告。采用哈希表实现高效数据存储与检索功能,适用于学习和研究数据结构与算法应用。 本系统是一个电话号码查找系统,其中最频繁的操作是查询功能。因此,实现快速的查询速度对于整个系统的性能至关重要。基于这一需求,选择合适的数据结构进行设计显得尤为关键。散列表能够提供O(1)级别的快速查找能力,在这种情况下使用Hash数据结构作为底层存储机制更为合理。 首先需要实现哈希表的基本构造和相关操作,并在此基础上开发电话号码查询系统。该系统涉及多个数据项:包括但不限于电话号码、用户名以及地址信息,支持通过键盘输入或文件批量导入记录的方式添加联系人信息。此外,用户可以选择使用电话号码或者姓名作为索引创建哈希表,并且能够根据这两种方式来查找特定的联系人记录。 为了更深入地了解不同设计方案之间的性能差异,在设计Hash数据结构时可以考虑采用不同的Hash函数以及冲突解决策略来进行实验对比分析。
  • .rar
    优质
    本资源为《哈希表的设计.rar》,包含详细讲解与实现哈希表数据结构的内容,适用于学习和研究目的。提供多种哈希函数及冲突解决策略实例代码。 针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,并完成相应的建表和查表程序。假设人名为中国人姓名的汉语拼音形式。带填入哈希表的人名共有30个。哈希函数采用除留余数法构造,使用线性探测法或开散列(链地址法)处理冲突。 测试数据取自周围较熟悉的30个人名。
  • 数据结课程——基于实现(附报告与代码)
    优质
    本项目为数据结构课程作业,通过构建基于哈希表的数据结构来高效管理通讯录信息。详细介绍及完整代码已附于报告中。 设计一个散列表来实现通讯录查找系统,并确保平均查找长度不超过R。需要完成建表和查表程序的编写。从键盘输入各个记录,使用姓名作为关键字建立散列表。假设人名采用中国人姓名的汉语拼音形式表示。待填入哈希表的人名共有30个,设定平均查找长度上限为2;通过除留余数法构造哈希函数,并利用二次探测再散列方法解决冲突问题。