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

yizhihongxing

针对“基于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日

相关文章

  • 10本最佳的C和C++书籍,适合初学者和高级程序员阅读

    我们来详细讲解一下“10本最佳的C和C++书籍,适合初学者和高级程序员阅读”的使用攻略,包括如何选择、购买、使用和评价。 选择书籍 在选择书籍之前,需要先确定自己的学习目标和水平。初学者应该选择适合入门的教材,而高级程序员可以考虑深入学习某个领域的专业书籍。 如果是初学者,推荐选择以下书籍: 《C Primer Plus》:C语言入门经典教材之一。 《C++…

    C 2023年5月9日
    00
  • C语言用realloc调整数组长度

    下面是关于C语言中使用realloc调整数组长度的详细攻略: 1. realloc函数的介绍 在C语言中,realloc函数用于在运行时重新分配之前已经分配了内存的内存块的大小。这个函数返回一个指向新分配内存的指针。如果没有足够的内存,realloc函数的返回值为NULL。realloc函数的语法如下: ptr = realloc(ptr, size); 其…

    C 2023年5月10日
    00
  • C语言实现手写字符串处理工具的示例代码

    下面是关于“C语言实现手写字符串处理工具的示例代码”的完整攻略: 1. 确定所要实现的功能 在开始编写代码之前,我们需要确定需要实现的功能。对于字符串处理工具,常见的功能包括: 字符串长度计算 字符串拼接 字符串替换 字符串查找 字符串分割等 我们可以根据需求,选择相应的功能进行实现。在本示例中,我们选择实现字符串查找和字符串替换两个功能。 2. 编写代码 …

    C 2023年5月23日
    00
  • SQLite教程(十四):C语言编程实例代码(2)

    下面我将为你详细讲解“SQLite教程(十四):C语言编程实例代码(2)”的完整攻略。 SQLite教程(十四):C语言编程实例代码(2) 在这个教程中,我们将继续介绍SQLite在C语言中的应用。本文将分享两个C语言编程实例代码,分别是插入数据和查询数据。 插入数据 首先,我们需要通过C语言的sqlite3 API打开数据库: sqlite3 *db; i…

    C 2023年5月22日
    00
  • JS仿Base.js实现的继承示例

    JS仿Base.js实现的继承示例是一种通过原型链实现的继承方式,可以为程序员提供更加灵活的代码组织方式和更加高效的代码复用功能。以下是详细的攻略过程: 1. 前置知识 在学习JS仿Base.js实现的继承示例前,需要掌握以下前置知识:- JS的原型和原型链- JS中函数的this指向- JS中的作用域和闭包- JS的面向对象编程思想 2. 示例说明 接下来…

    C 2023年5月22日
    00
  • C语言局部数据指针

    当我们在写C语言程序时,经常会定义一些变量,这些变量可以是全局变量,也可以是局部变量。而局部变量是指定义在函数内部或代码块内部的变量,这些变量的作用域仅限于定义它们的函数或代码块内部。那么在定义局部变量时,我们可以定义一个指针变量,它可以指向局部变量的地址。这就是C语言局部数据指针的使用方法。 如下是C语言局部数据指针的使用攻略: 1. 定义局部变量和指针变…

    C 2023年5月9日
    00
  • 替换json对象中的key最佳方案

    为了替换JSON对象中的key,我们可以尝试使用以下方法: 遍历对象并创建新的对象 我们可以遍历JSON对象,对每个键值对进行检查,然后创建一个新的对象来替换旧的对象中的Key。例如在JavaScript中: const oldObj = {"oldKey": "value"}; const newObj = {}; …

    C 2023年5月23日
    00
  • C语言基于回溯算法解决八皇后问题的方法

    C语言基于回溯算法解决八皇后问题的方法 什么是八皇后问题? 八皇后问题是一个经典的、古老的问题,它的目标是在一个8×8的棋盘上放置8个皇后,使得每个皇后都无法互相攻击,即两个皇后不能在同一行、同一列或同一对角线上。 回溯算法解决八皇后问题 回溯算法(Backtracking Algorithm),又称试探法,是一种系统地搜索问题的解的算法。它的基本思想是从问…

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