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

yizhihongxing

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日

相关文章

  • 使用python网络抓取google新闻

    使用Python网络抓取Google新闻是一项非常有用的技能,可以帮助您获取最新的新闻和信息。本文将提供一个完整的攻略,包括Python进行网络抓取的基本知识和两个示例说明。 基本知识 在使用Python进行网络抓取之前,您需要了解基本知识: 网络请求:使用Python发送HTTP请求来获取网页内容。 解析HTML:使用Python解析HTML文档,以便从中…

    other 2023年5月7日
    00
  • 关于java:system.getproperty(”key”)从何处读取

    下面是关于“关于java:system.getproperty(‘key’)从何处读取”的完整攻略: 1. Java System.getProperty() 简介 Java System.getProperty() 是一个用于获取系统属性的方法,它可以获取系统一些基本信息,例如操作系统名称、Java 运行环境版本、用户的主目录等。在 Java 中,可以使用…

    other 2023年5月7日
    00
  • vue封装一个右键菜单组件详解(复制粘贴即可使用)

    下面我来详细讲解一下“vue封装一个右键菜单组件详解(复制粘贴即可使用)”的完整攻略。 1. 概述 右键菜单是网页中常用的一个功能,它可使用户在单击鼠标右键时显示一个菜单,给用户提供特定的操作选择。本文将介绍如何用Vue.js封装一个简单的右键菜单组件,并且提供“复制粘贴”功能,使您可以在需要的项目中使用。 2. 实现步骤 2.1 编写组件模板 首先,我们需…

    other 2023年6月27日
    00
  • Java递归寻路实现,你真的理解了吗

    Java递归寻路实现,你真的理解了吗 什么是递归寻路 递归寻路是指在迷宫等场景下,从起点开始,不断地试探路径并标记已经探测的路径,直到找到终点或是所有可达路径都已探测过的过程。 实现思路 在 Java 中,可以通过递归函数来实现寻路的过程。具体来说,我们可以编写下面这个函数 findPath: public static boolean findPath(i…

    other 2023年6月27日
    00
  • Android中的build.gradle文件深入讲解

    以下是使用标准的Markdown格式文本,详细讲解Android中的build.gradle文件的完整攻略: Android中的build.gradle文件深入讲解 什么是build.gradle文件? 在Android开发中,build.gradle文件是一个重要的配置文件,用于定义和配置项目的构建过程。它包含了项目的依赖项、编译选项、打包配置等信息。 b…

    other 2023年10月14日
    00
  • WinXP桌面右键刷新会弹出网页广告怎么解决?

    如果WinXP桌面右键刷新会弹出网页广告,可以按以下步骤来解决: 检查并清除潜在的恶意软件。恶意软件可以导致广告弹出。使用可信赖的杀毒软件和反恶意软件工具来扫描和清除系统中的恶意软件。示例命令: # Windows Defender 病毒和威胁防护扫描 Microsoft Defender Antivirus -Scan -ScanType 3 重置注册表项…

    other 2023年6月27日
    00
  • 守望先锋归来进不去游戏怎么办 闪退、死机重启解决方法

    当玩家尝试进入“守望先锋”时,有时候会遇到游戏开启不了、闪退、死机、重启等问题。这些问题通常是因为游戏客户端、电脑系统或外部因素导致的。为帮助玩家解决这些问题,本文将详细讲解“守望先锋归来进不去游戏怎么办 闪退、死机重启解决方法”。 问题一:游戏闪退或死机 如果你的游戏闪退或死机,以下措施可以尝试解决问题: 1. 检查电脑硬件配置 “守望先锋”是一款占用比较…

    other 2023年6月27日
    00
  • servelet基础

    Servelet基础 Servlet是J2EE规范中定义的一种用于Web应用程序的组件。在Web应用程序中,Servlet通常被用来处理HTTP请求、响应以及请求参数的解析等操作。 Servlet的生命周期 Servlet的生命周期包括初始化、服务处理和销毁三个阶段。 初始化阶段:在Servlet被初始化时会调用其init()方法,用于完成Servlet的初…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部