C语言单链表实现通讯录管理系统

C语言单链表实现通讯录管理系统

本文介绍如何使用C语言的单链表数据结构来实现通讯录管理系统。

数据结构设计

首先,我们需要设计出通讯录中需要保存的数据类型及其结构。在本教程中,我们仅考虑每个联系人需要保存姓名和电话。

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

以上代码定义了一个 Contact 结构体,它包含了保存姓名和电话信息的两个字符数组,以及一个指向下一个联系人的指针。

功能实现

添加联系人

当用户需要添加一个新的联系人时,我们需要通过单链表数据结构将新的联系人添加到通讯录中。具体实现如下:

void add_contact(struct Contact** head, char name[], char phone[]) {
    struct Contact* new_contact = (struct Contact*)malloc(sizeof(struct Contact));
    strcpy(new_contact->name, name);
    strcpy(new_contact->phone, phone);
    new_contact->next = NULL;

    if (*head == NULL) {
        *head = new_contact;
    }
    else {
        struct Contact* curr = *head;
        while (curr->next != NULL) {
            curr = curr->next;
        }
        curr->next = new_contact;
    }
}

以上代码实现了添加联系人的功能,其中:

  • head 是指向单链表头节点的指针;
  • namephone 分别是新的联系人的姓名和电话号码。

删除联系人

当用户需要删除一个已有的联系人时,我们需要通过单链表数据结构找到该联系人并将其从通讯录中删除。具体实现如下:

void delete_contact(struct Contact** head, char name[]) {
    if (*head == NULL) {
        printf("Contact list is empty.\n");
        return;
    }

    struct Contact* curr = *head;
    if (strcmp(curr->name, name) == 0) {
        *head = curr->next;
        free(curr);
    }
    else {
        struct Contact* prev = curr;
        curr = curr->next;
        while (curr != NULL && strcmp(curr->name, name) != 0) {
            prev = curr;
            curr = curr->next;
        }
        if (curr == NULL) {
            printf("Contact not found.\n");
        }
        else {
            prev->next = curr->next;
            free(curr);
        }
    }
}

以上代码实现了删除联系人的功能,其中:

  • head 是指向单链表头节点的指针;
  • name 是待删除联系人的姓名。

修改联系人

当用户需要修改一个已有的联系人的电话号码时,我们需要通过单链表数据结构找到该联系人并修改其电话号码。具体实现如下:

void modify_contact(struct Contact** head, char name[], char phone[]) {
    struct Contact* curr = *head;
    while (curr != NULL && strcmp(curr->name, name) != 0) {
        curr = curr->next;
    }
    if (curr == NULL) {
        printf("Contact not found.\n");
    }
    else {
        strcpy(curr->phone, phone);
    }
}

以上代码实现了修改联系人的功能,其中:

  • head 是指向单链表头节点的指针;
  • name 是待修改联系人的姓名;
  • phone 是待修改后的电话号码。

示例

示例1 添加联系人

int main() {
    struct Contact* head = NULL;

    add_contact(&head, "Bob", "123456");
    add_contact(&head, "Alice", "654321");

    return 0;
}

以上代码示例创建了一个新的通讯录,并向其中添加了两个联系人。

示例2 删除联系人

int main() {
    struct Contact* head = NULL;

    add_contact(&head, "Bob", "123456");
    add_contact(&head, "Alice", "654321");

    delete_contact(&head, "Alice");

    return 0;
}

以上代码示例创建了一个新的通讯录,并向其中添加了两个联系人,然后删除了其中一个联系人。

总结

本教程介绍了如何使用C语言的单链表数据结构来实现通讯录管理系统。我们实现了向通讯录中添加联系人、删除联系人和修改联系人信息的功能,并为每个联系人定义了一个自定义的数据类型。这些功能的实现过程中用到了指针、动态内存分配和字符串处理等基本知识。

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

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言简明讲解操作符++和–的使用方法

    C语言简明讲解操作符++和–的使用方法 操作符++和–的基本概念 操作符++和–是C语言中的两种自增、自减操作符。它们作用于一个变量,可以将该变量的值自增1或自减1。 操作符++:将变量的值自增1,等同于var = var + 1。 操作符–:将变量的值自减1,等同于var = var – 1。 这两个操作符都可以在变量前面或后面使用,从而分别产生前…

    C 2023年5月23日
    00
  • 使用C语言实现最小生成树求解的简单方法

    以下是“使用C语言实现最小生成树求解的简单方法”的攻略: 什么是最小生成树? 在一张带有n个结点的带权无向图中,如果选取其中n-1条边可以使得这张图的连通且总权值最小,那么这n-1条边构成的图就是最小生成树。最小生成树在许多实际问题中都有广泛应用,比如设计网络、规划交通和通信等。 最小生成树算法 最小生成树算法有多种实现方法,其中比较常用的有Kruskal算…

    C 2023年5月22日
    00
  • c语言中&的用法示例代码

    下面是关于 C 语言中 & 的用法攻略,针对此问题,我们需要从以下两个方向进行讲解: 变量声明和引用时的 & 符号使用 当我们声明一个变量时,可以使用 & 符号获取该变量的地址。例如: int x = 10; int *p = &x; 上述代码中,我们声明了一个整型变量 x,并将其初始化为 10。然后,我们使用指针变量 p 来…

    C 2023年5月24日
    00
  • C语言实现弹跳小球

    C语言实现弹跳小球 1. 实现思路 本例中的弹跳小球,实质上就是一个在窗口中移动的小球,它有自己的坐标和移动方向,同时也有一定的大小和颜色。而在运动期间它还需要遇到窗口边界时进行反弹的操作,也就是改变移动方向。 基于此,我们可以考虑使用C语言结构体来存储小球的位置、大小、颜色和移动方向等信息,同时利用窗口显示库如SDL或Qt来实现小球在窗口中的运动和反弹效果…

    C 2023年5月23日
    00
  • C++使用智能指针实现模板形式的单例类

    下面我将详细讲解使用智能指针实现模板形式的单例类的完整攻略。 1. 什么是智能指针? 智能指针是一个 C++ 类,它的实例行为类似于指针,不过它添加了自动内存回收的管理功能。智能指针中最常用的是 std::shared_ptr 和 std::unique_ptr。 我们使用智能指针可以避免内存泄漏和空悬指针,避免程序崩溃等问题。 2. 什么是模板形式的单例类…

    C 2023年5月23日
    00
  • C++中的常对象与常对象成员详解

    C++中的常对象与常对象成员详解 在C++中存在常对象和常对象成员,它们都有一个共同点:都不允许在对象的生命周期内被修改。下面我们详细讲解常对象和常对象成员的定义、声明、初始化及其特点。 常对象 定义 常对象是指一个对象在它被创建后就无法被修改。在C++中,我们可以通过在对象类型前面加上const关键字来定义常对象。例如: const int a = 10;…

    C 2023年5月22日
    00
  • C语言实现小学生计算机辅助教学系统

    C语言实现小学生计算机辅助教学系统攻略 目标 本攻略将指导您如何使用C语言编写一个小学生计算机辅助教学系统,该教学系统可以帮助小学生进行加减乘除练习,并评估他们的表现。 步骤 设计用户界面 首先,您需要设计一个用户界面。您可以使用如下的代码块来创建用户界面。该用户界面将会展示程序的功能菜单和用户可以选择的操作。在此示例中,我们提供了四个选项,分别对应加、减、…

    C 2023年5月30日
    00
  • C 数据类型

    当我们使用 C 语言进行编程时,需要用到不同的数据类型来存储和操作不同的数据。C 语言中支持多种数据类型,包括整型、浮点型、字符型等。在本文中,我将详细讲解 C 数据类型的完整使用攻略,包括数据类型的定义、使用和常见问题等方面。 数据类型的定义 在 C 语言中,可用的数据类型包括基本数据类型和派生数据类型。 基本数据类型 C 语言中的基本数据类型包括整型、浮…

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