Advertisement

哈希表在通讯录中的应用与实现

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


简介:
本文探讨了哈希表数据结构在通讯录应用程序中的具体应用和实现方式,详细分析了如何利用哈希表提高联系人查找、插入及删除等操作效率。 ```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<<输出查找的信息:<

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 优质
    本文探讨了哈希表数据结构在通讯录应用程序中的具体应用和实现方式,详细分析了如何利用哈希表提高联系人查找、插入及删除等操作效率。 ```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语言编写,能够生成哈希表、插入电话号码以及进行查找等功能。 按提示输入联系人的相关信息; 以指定格式输出存储的联系人信息; 具备建立、添加、查询和打印的功能; 能识别并纠正用户非法的数据输入。 概要设计:在记录中储存电话号码时,若能在关键字与存储位置间创建一种确定的关系,使得每个关键字都能对应到一个唯一的存储地址,在查找过程中根据这个关系f找到给定值K的映射f(K)即可实现高效检索。
  • 基于C语言
    优质
    本项目采用C语言开发,利用哈希表技术高效管理联系人信息,提供增删改查等功能,适用于个人或小型团队使用。 本段落详细介绍了用C语言基于哈希表实现通讯录的方法,具有一定的参考价值,供对此感兴趣的读者参考。
  • 数据结构课程设计
    优质
    本项目探讨了哈希表的数据结构原理,并通过实际案例展示了其在解决查找、插入和删除操作中的高效性及灵活性,旨在加深对数据结构课程的理解。 这是武汉理工大学的数据结构哈希表课程设计文档,可以直接使用,无需修改,非常实用哦!我也为此付出了很多努力,希望能帮到你啊。
  • C++ STL
    优质
    本文章介绍了C++标准模板库(STL)中哈希表的相关知识和应用场景,并提供了具体的使用示例。 哈希表应用C++_STL_hash哈希表应用C++_STL_hash哈希表应用C++_STL_hash 这段文字看起来像是对使用C++标准库中的哈希表进行介绍或讨论的标题,重复了三次同样的内容。如果需要简化或者重新表述的话,可以考虑如下: 关于在C++中利用STL实现哈希表的应用。 这样的重写去除了原文中的重复部分,并且保持了原有的核心主题和意图不变。
  • 数据结构课程设计——基于(附报告代码)
    优质
    本项目为数据结构课程作业,通过构建基于哈希表的数据结构来高效管理通讯录信息。详细介绍及完整代码已附于报告中。 设计一个散列表来实现通讯录查找系统,并确保平均查找长度不超过R。需要完成建表和查表程序的编写。从键盘输入各个记录,使用姓名作为关键字建立散列表。假设人名采用中国人姓名的汉语拼音形式表示。待填入哈希表的人名共有30个,设定平均查找长度上限为2;通过除留余数法构造哈希函数,并利用二次探测再散列方法解决冲突问题。
  • ASP.NETSQL Server
    优质
    本项目探讨了如何使用ASP.NET结合SQL Server来构建和管理一个高效、安全的在线通讯录系统。通过实际案例分析,展示了数据库设计、用户界面开发及数据交互技术的应用。 使用通讯录结合ASP.NET和SQL Server进行课程设计。
  • C语言
    优质
    本文档探讨了在C语言环境下构建和使用哈希表的方法和技术。它详细介绍了哈希函数的设计、冲突解决策略以及哈希表的基本操作。适合希望深入了解数据结构与算法应用的读者参考学习。 百度的一位技术专家撰写了一篇关于哈希结构的文章。该文章详细介绍了哈希表的原理及其在实际应用中的优势,并探讨了如何优化哈希算法以提高数据处理效率。通过具体的例子,作者深入浅出地解释了冲突解决策略和扩容机制等关键技术点,为读者提供了宝贵的参考信息和技术指导。 (注:原文中没有具体提及联系方式、网址等额外内容,因此重写时未做相应修改)
  • C++ 例子
    优质
    本篇文章提供了一个使用C++语言构建和操作哈希表的具体实例。通过此示例,读者可以了解如何在实际编程中应用哈希表数据结构来高效存储与检索信息。 哈希表是一种常用的数据结构,用于快速存储与检索数据。通过C++实现哈希表的实例能够帮助我们更好地理解其工作原理及内部机制。 一、基本概念 1. 键值对(Key-Value):每个元素包含一个唯一的键和对应的值。 2. 散列函数(Hash Function):将键转换为索引,以快速访问数据。 3. slot:哈希表中的每一个slot是一个链表,存储具有相同散列结果的键值对。 二、C++实现示例 首先定义一个LinkNode类用于保存每个节点的数据: ```cpp class LinkNode { private: int key; LinkNode* next; // 指向下一个节点的指针 friend class Link; public: LinkNode():key(-1),next(NULL){} // 默认构造函数 LinkNode(int num):key(num),next(NULL){} int GetKey() { return key;} }; ``` 接下来定义Link类管理链表: ```cpp class Link { private: friend class Hash; // 友元类,可以访问Hash的私有成员 LinkNode* head; int length; public: Link():head(NULL),length(0) {} // 默认构造函数 ~Link() { MakeEmpty(); } // 析构函数中调用清理方法 void MakeEmpty() { if (head == NULL) return; LinkNode* p = head; // 清空链表,释放内存 while (p != nullptr){ head = head->next; delete p; p = head; } } int GetLength(){return length;} void Insert(int num) { length++; // 插入一个元素 LinkNode* node = new LinkNode(num); if (!head || node->GetKey() < head->GetKey()){ node->next = head; head = node; return; } LinkNode *p, *q; for (p=head,q=NULL;p != nullptr && p->key < num;q=p,p=p->next); q->next = node; node->next = p; } bool Delete(int num) { if (!head) cout << 链表为空! << endl; LinkNode* temp, *q; for (temp=head,q=NULL;temp != nullptr && temp->key < num;q=temp,temp=temp->next); if (temp == NULL || temp->GetKey() > num) return false; else { q->next = temp->next; // 删除节点 delete(temp); length--; } } int Search(int num) { LinkNode* p = head; while(p != nullptr){ if (p->key == num) return p->GetKey(); else if (p->key < num) p=p->next; } return -1; // 没有找到返回-1 } ``` 最后定义Hash类管理哈希表: ```cpp class Hash { private: Link* table; // 存储链表指针的数组 int size; public: Hash(int s) { this->size = s; table = new Link*[s]; for (int i=0;iInsert(num); // 插入元素到对应的链表中 } bool Delete(int num){ int index = HashFunction(num); return table[index]->Delete(num);} int Search(int num){ int index = HashFunction(num); return table[index]->Search(num);} } ``` 三、哈希表的工作机制 1. 散列函数将键转换为索引,便于快速定位数据。 2. Link类管理链表的插入、删除和查找操作。 3. Hash类实现整个哈希表的操作。 四、应用场景 - 缓存系统:利用哈希表存储最近使用的数据以加速访问速度; - 数据库索引:使用它来加快数据库记录的检索过程; - 内存管理:帮助高效地分配与释放内存空间; 结论: 通过C++实现哈希表的具体实例,我们可以深入了解其核心概念、工作原理及实际应用。这有助于我们在具体问题中更有效地利用这一数据结构。