基于C语言打造高效通讯录的示例代码

针对“基于C语言打造高效通讯录的示例代码”的完整攻略,我们可以分为以下几个步骤来进行讲解:

1.设计数据结构

在打造通讯录的代码中,我们需要首先设计合理的数据结构来储存通讯录信息。在此我们可以采用链表数据结构来实现。所以在数据结构的设计中,需要定义一个结构体来存储每位通讯录人员的信息,然后私有一个指向实体的指针来实现链表。

2.实现通讯录基本功能

通讯录的基本功能包括添加联系人、删除联系人、查看所有联系人以及根据姓名查找联系人等等。针对这些基本功能,我们需要实现相应的代码逻辑,基于定义好的数据结构来完成这些操作。示例代码如下:

void add_contact(struct ContactBook *book) {
    struct Contact *p = (struct Contact *)malloc(sizeof(struct Contact));
    printf("Please Input Contact Name: ");
    scanf("%s", p->name);
    // ...
    p->next = NULL;
    if (book->head == NULL) {
        book->head = p;
    } else {
        book->tail->next = p;
    }
    book->tail = p;
    book->size++;
}

void delete_contact(struct ContactBook *book, char *name) {
    struct Contact *p, *prev;
    prev = NULL, p = book->head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            if (p == book->head) {
                book->head = p->next;
            } else {
                prev->next = p->next;
            }
            if (p == book->tail) {
                book->tail = prev;
            }
            free(p);
            book->size--;
            printf("Delete Contact Successfully!\n");
            return;
        }
        prev = p, p = p->next;
    }
    printf("Contact Not Found!\n");
}

void list_all_contact(struct ContactBook *book) {
    printf("Here Are %d Contacts:\n", book->size);
    struct Contact *p = book->head;
    while (p != NULL) {
        printf("Name: %s\n", p->name);
        // ...
        p = p->next;
    }
}

void find_contact(struct ContactBook *book, char *name) {
    struct Contact *p = book->head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            printf("Name: %s\n", p->name);
            // ...
            return;
        }
        p = p->next;
    }
    printf("Contact Not Found!\n");
}

3.实现高效查询功能

为了提升程序的效率,我们可以将通讯录实现的更高效。例如可以将根据姓名查找联系人的操作由遍历整个链表来实现变为通过二叉搜索树实现。示例代码如下:

struct Contact *bst_find_contact(struct Contact *p, char *name) {
    if (p == NULL) return NULL;
    if (strcmp(p->name, name) == 0) return p;
    if (strcmp(p->name, name) < 0) return bst_find_contact(p->rchild, name);
    return bst_find_contact(p->lchild, name);
}

void find_contact(struct ContactBook *book, char *name) {
    struct Contact *p = bst_find_contact(book->root, name);
    if (p != NULL) {
        printf("Name: %s\n", p->name);
        // ...
    } else {
        printf("Contact Not Found!\n");
    }
}

以上就是基于C语言打造高效通讯录的示例代码的完整攻略。另外,以下提供两个实例说明:

实例一:如何添加联系人?

在打开通讯录后,输入“1”即可进入添加联系人操作。此时程序会提示您输入联系人的姓名,接着会将其余信息如电话、电子邮件等信息输入完毕后可以将联系人的信息存储到链表中。示例代码如下:

void add_contact(struct ContactBook *book) {
    struct Contact *p = (struct Contact *)malloc(sizeof(struct Contact));
    printf("Please Input Contact Name: ");
    scanf("%s", p->name);
    printf("Please Input Contact Tel: ");
    scanf("%s", p->tel);
    printf("Please Input Contact Email: ");
    scanf("%s", p->email);
    p->next = NULL;
    if (book->head == NULL) {
        book->head = p;
    } else {
        book->tail->next = p;
    }
    book->tail = p;
    book->size++;
}

实例二:如何删除联系人?

在打开通讯录后,输入“2”即可进入删除联系人操作。此时程序会提示您输入要删除的联系人的姓名,如果通讯录中有该联系人,则会删除该联系人,并打印“Delete Contact Successfully!"。如果通讯录中没有该联系人,则打印“Contact Not Found!"。示例代码如下:

void delete_contact(struct ContactBook *book, char *name) {
    struct Contact *p, *prev;
    prev = NULL, p = book->head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            if (p == book->head) {
                book->head = p->next;
            } else {
                prev->next = p->next;
            }
            if (p == book->tail) {
                book->tail = prev;
            }
            free(p);
            book->size--;
            printf("Delete Contact Successfully!\n");
            return;
        }
        prev = p, p = p->next;
    }
    printf("Contact Not Found!\n");
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C语言打造高效通讯录的示例代码 - Python技术站

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

相关文章

  • Python中hash加密简介及使用方法

    Python中hash加密简介及使用方法 什么是hash加密 hash加密是一种单向加密算法,它将原始数据通过特定的算法生成固定长度的字符串,且无法通过这个字符串反向推回原始数据。这种加密方式被广泛应用于安全领域中,例如密码加密、数据完整性验证等。 Python中hash模块 Python标准库中提供了hashlib模块来实现hash加密。该模块支持多种ha…

    C 2023年5月23日
    00
  • Linux折腾记(八):使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

    Linux折腾记(八)的主题是如何使用GCC和GNU Binutils编写能在x86实模式运行的16位代码。针对这个主题,我们可以分为以下几步。 步骤1:准备工作 在开始编写代码之前,我们需要安装在Ubuntu系统上安装GCC和GNU Binutils。可以使用以下命令进行安装: sudo apt-get update sudo apt-get instal…

    C 2023年5月23日
    00
  • C++为什么不能修改set里的值?非要修改怎么办?

    C++为什么不能修改set里的值 set是C++ STL库中的一个容器,它使用平衡二叉搜索树作为实现机制。这种数据结构会在插入或删除元素时维护树的平衡,从而使得查找等操作的时间复杂度保持在O(log n)级别。而且,set自身所提供的插入、删除和查找操作也能保证元素的唯一性,因此适用于需要去重的情况。 set中元素的顺序是按照元素的大小由小到大排列的,在该容…

    C 2023年5月23日
    00
  • c#和Javascript操作同一json对象的实现代码

    下面我将详细讲解如何通过C#和JavaScript操作同一个JSON对象的实现代码攻略。 1.使用Newtonsoft.Json库 在C#中,我们可以通过使用 Newtonsoft.Json 库来轻松地序列化和反序列化 JSON 数据,包括将 JSON 数据转换为 .NET 中的对象,或者将 .NET 对象序列化为 JSON 格式。 在项目中添加 Newto…

    C 2023年5月23日
    00
  • C++程序操作文件对话框的方法

    现在我将为大家介绍一下在C++程序中操作文件对话框的方法。操作文件对话框是一个常用的功能,它可以帮助我们在程序中以交互式的方式选择文件并进行相关操作。下面是该攻略的详细步骤: 1. 确定操作系统类型 在编写代码之前,我们需要确定我们所使用的操作系统类型,不同的操作系统可能具有不同的文件对话框API接口。下面是Windows和macOS操作系统下涉及到的API…

    C 2023年5月23日
    00
  • python中的json数据和pyecharts模块入门示例教程

    Python中的JSON数据格式和Pyecharts模块入门示例教程: JSON数据格式 JSON是一种轻量级的数据交换格式,通常用于将数据从服务器发送到Web应用程序中。Python具有內置的JSON模块,使用它可以轻松处理JSON数据。 JSON格式的编码与解码 下面是一个简单的例子来说明JSON数据格式的编码和解码: “`pythonimport j…

    C 2023年5月23日
    00
  • JSON数据转换成Java对象的方法

    将JSON数据转换成Java对象是Java开发中常见的操作。下面我将讲解三种将JSON数据转换成Java对象的方法。 方法一:手动解析JSON数据 手动解析JSON数据是最原始的方法。大概思路就是按照JSON数据的层次结构逐级解析JSON数据,并将其存储到Java对象中。 一般情况下,我们会使用JSON解析工具库来将JSON数据解析成Java对象。常用的JS…

    C 2023年5月23日
    00
  • 使用vs2010编译log4cxx图文教程

    使用vs2010编译log4cxx图文教程: 步骤1:下载并解压log4cxx库 首先去Apache网站下载log4cxx的源码包,例如: https://downloads.apache.org/logging/log4cxx/0.11.0/apache-log4cxx-0.11.0.tar.gz 解压后得到一个apache-log4cxx-0.11.0的…

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