C++链表实现通讯录管理系统

C++链表实现通讯录管理系统攻略

什么是链表?

链表是一种非常常见的数据结构,常被用来存储一系列有序数据。链表中的每个元素都包含一个数据项和一个指针,指针指向下一个元素,这样一系列元素就组成了一个链表。

链表通常被用来处理动态数据结构,例如对于一个链表中的元素,可以通过修改指针来方便地插入或删除元素。

为什么要使用链表?

链表相较于数组更具有适应性,链表无需连续的内存分配,可以更加高效地动态存储数据。链表支持快速插入和删除操作,适用于管理大量数据。

如何利用C++实现链表?

在C++中,链表可以用指针来实现。C++ 中的指针可以作为变量来使用,指向变量在内存中的地址。以此为基础,链表中的每个元素都可以用一个结构体或类来表示,每个结构体或类包含一个数据项和指向下一个元素的指针。通过定义一个指向链表头的指针,可以使用指针来实现链表的插入、删除和遍历等操作。

链表结构体示例:

struct Contact {
  char name[20];
  char tel[15];
  struct Contact* next;
};

如何用链表实现通讯录管理系统?

通讯录管理系统主要是用来存储联系人信息,对于这种动态的数据结构,链表是一个非常好的选择。以下是一个简单的通讯录管理系统的示例代码:

#include <iostream>
#include <cstring>

using namespace std;

struct Contact {
  char name[20];
  char tel[15];
  struct Contact* next;
};

Contact* create_contact(char name[], char tel[]) {
  Contact* contact = new Contact;
  strcpy(contact->name, name);
  strcpy(contact->tel, tel);
  contact->next = NULL;
  return contact;
}

void add_contact(Contact** contacts, char name[], char tel[]) {
  Contact* contact = create_contact(name, tel);
  contact->next = *contacts;
  *contacts = contact;
}

void delete_contact(Contact** contacts, char name[]) {
  Contact* p = *contacts;
  Contact* q = NULL;
  while(p != NULL) {
    if(strcmp(p->name, name) == 0) {
      if(q == NULL) {
        *contacts = p->next;
      } else {
        q->next = p->next;
      }
      delete(p);
      return;
    }
    q = p;
    p = p->next;
  }
}

void print_contacts(Contact* contacts) {
  Contact* p = contacts;
  while(p != NULL) {
    cout << p->name << "\t" << p->tel << endl;
    p = p->next;
  }
}

int main() {
  Contact* contacts = NULL;
  add_contact(&contacts, "Tom", "123456");
  add_contact(&contacts, "Jerry", "789");
  add_contact(&contacts, "Mike", "24680");
  print_contacts(contacts);
  delete_contact(&contacts, "Jerry");
  print_contacts(contacts);
  return 0;
}

示例说明

在上面的示例代码中,我们定义了一个 Contact 结构体,表示一个通讯录联系人,其中 name 字段表示联系人姓名,tel 字段表示联系人电话号码,next 字段表示指向下一个联系人的指针。然后,我们定义了一些函数,如 create_contact() 用于创建一个联系人对象,add_contact() 用于添加一个联系人对象到链表中,delete_contact() 用于删除指定名字的联系人对象,print_contacts() 用于遍历并输出所有联系人对象。最后,我们在 main() 函数中演示了如何使用这些函数来管理通讯录。在示例代码中,我们添加了三个联系人,遍历并输出所有联系人对象,然后删除一个联系人,并再次遍历并输出所有联系人对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++链表实现通讯录管理系统 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Java面向对象特性深入刨析封装

    Java面向对象特性深入刨析封装 1. 什么是封装 封装是面向对象程序设计的基本特性之一,指隐藏对象的内部数据和实现细节,只提供有限的访问方式与使用界面,这样可以保护数据不被非法访问和篡改,使得数据安全、可靠。在Java中,通过访问控制符public、private、protected 来实现封装。 2. 封装的好处 封装的好处有: 数据安全:通过限制对类成…

    other 2023年6月25日
    00
  • Python基于QQ邮箱实现SSL发送

    Python基于QQ邮箱实现SSL发送攻略 1. 准备工作 在开始之前,确保你已经安装了Python,并且拥有一个QQ邮箱账号。 2. 安装必要的库 使用Python发送SSL邮件需要使用到smtplib和ssl库。你可以使用以下命令来安装它们: pip install smtplib pip install ssl 3. 导入库 在Python脚本中,导入…

    other 2023年8月6日
    00
  • 通过修复注册表解决语言栏消失即右键没有语言栏这个选项

    下面是“通过修复注册表解决语言栏消失即右键没有语言栏这个选项”的完整攻略: 1. 打开注册表编辑器 首先按下Win + R键打开运行命令框,输入regedit进入注册表编辑器。 2. 寻找对应的注册表项 找到这个路径并选中它:HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\…

    other 2023年6月27日
    00
  • 苹果id账号邮箱全忘了怎么办 苹果刷机后忘记id找回方法

    苹果ID账号邮箱全忘了怎么办?苹果刷机后忘记ID找回方法 问题描述 苹果用户在使用苹果设备时,需要用到苹果ID账号邮箱进行登录,但是有时候由于各种原因,如久未使用、账号被盗、记忆力不好等,可能会忘记账号的邮箱地址。在遇到苹果设备需要刷机或升级系统时,如果没有记住账号信息,则会导致无法激活设备,给用户带来很大的困扰。 解决方法 以下是忘记苹果ID账号邮箱地址后…

    other 2023年6月27日
    00
  • ios史上最全的图片压缩方法集合

    ios史上最全的图片压缩方法集合 在现代社会里,图片已经成为人们生活中必不可少的一部分。然而,通过移动设备上传图片可能导致一些问题,比如图片质量过高、容量过大、加载时间慢等等。所以,对于 iOS 设备的用户来说,解决这些问题是非常关键的。下面将介绍一些在 iOS 设备上进行图片压缩的最有效的方法。 方法一:使用 iOS 自带压缩功能 iOS 11 之后,系统…

    其他 2023年3月29日
    00
  • 关于php内存不够用的快速解决方法

    当php执行任务时,程序可能会耗费大量内存,导致内存不足而导致程序崩溃,这时候就需要应对php内存不够用的情况,下面我们来介绍一些php内存不足的快速解决方法。 1. 开启内存回收 php脚本所分配的内存是不会自动回收的,需要等待垃圾回收器执行,因此可以在脚本中主动调用系统函数gc_collect_cycles()进行内存回收。示例代码如下: $yourOb…

    other 2023年6月27日
    00
  • IP地址自动修改的功能移植

    IP地址自动修改的功能移植攻略 简介 IP地址自动修改的功能移植是指将一个已经存在的IP地址自动修改的功能移植到另一个系统或应用程序中。这个功能可以用于自动更新网络设备的IP地址,提高网络管理的效率。下面是一个详细的攻略,包含了移植过程中的几个关键步骤和示例说明。 步骤 1. 确定目标系统和应用程序 首先,确定需要将IP地址自动修改功能移植到的目标系统和应用…

    other 2023年7月29日
    00
  • ios中关于taptic-engine震动反馈的深入解析

    以下是iOS中关于Taptic Engine震动反馈的深入解析的完整攻略: Taptic Engine简介 Taptic Engine是苹果公司在iPhone 7及以后的设备中引入的一种震动反馈技术。使用线性马达来产生不同类型的震动反馈,包括轻触、重击、弹跳等。Taptic Engine可以用于各种应用程序,包括游戏、通知、用户界面等。 Taptic Eng…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部