基于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日

相关文章

  • C++ 如何用cout输出hex,oct,dec的解决方法

    使用C++中的cout语句输出数字时,默认是以10进制方式输出的,并且不直接支持以16进制和8进制的方式输出。为了输出16进制和8进制的数字,我们需要使用cout的标志控制。 1.输出16进制的数字 要想输出16进制的数字,需要使用cout中的hex控制符,它可以将数字转换为16进制输出。示例代码如下: #include <iostream> u…

    C 2023年5月23日
    00
  • Win11遇到错误0xc0000142怎么办? 0xc0000142错误代码的修复方法

    关于“Win11遇到错误0xc0000142怎么办? 0xc0000142错误代码的修复方法”的攻略,我将在下面详细讲解: 1. 什么是0xc0000142错误代码? 在使用Windows 11时, 用户可能会遇到错误代码0xc0000142。这种错误通常与应用程序相关,具体表现为应用程序无法正常启动或崩溃。解决这个问题的首要目标是找到问题的根本原因。 0x…

    C 2023年5月23日
    00
  • vscode 配置 C/C++编译环境(完整教程)

    下面是“vscode配置C/C++编译环境(完整教程)”的完整攻略: 一、安装vscode和MinGW-w64 1.安装vscode vscode是一款非常流行的编辑器,使用非常方便,可以在官网 https://code.visualstudio.com/ 下载最新版的安装包进行安装。安装完成后,打开vscode,在左侧菜单栏中搜索并安装“C/C++”插件。…

    C 2023年5月23日
    00
  • C语言实现学生选修课程系统设计

    C语言实现学生选修课程系统设计攻略 1. 系统需求 开发一个简单的学生选修课程系统,支持学生的登录和注销操作,包括选课、查看选课信息、取消选课等功能。系统需要提供以下功能: 学生登陆/注销 查看当前可选课程 查看已选课程 选课 取消选课 退出系统 2. 数据结构设计 学生信息 学生编号:int 姓名:char[20] 选课列表:数组,包括已选课程的编号 课程…

    C 2023年5月23日
    00
  • C++ 系统IO流介绍

    C++系统IO流介绍 介绍 在C++中,IO流是一组用于处理输入和输出的标准库组件。 C++标准库提供了多种IO流,包括文件流、字符串流和标准输入/输出流等。 IO流类型 输入流和输出流 在C++中,IO流分为输入流和输出流。输入流用于读取数据,输出流用于输出数据。输入和输出都是相对于程序来说的,即程序可以将数据写入输出流,另一个程序或用户可以读取该数据。 …

    C 2023年5月23日
    00
  • 如何通过Objective-C的枚举学习iOS中位操作.md详解

    针对网站上的 “如何通过Objective-C的枚举学习iOS中位操作” 这篇文章,我来给你提供一个完整的攻略。 1. 什么是枚举 枚举是C语言的一种数据类型,它能够将一组常量绑定在一起并赋予它们名字,使代码更易读和可维护。在Objective-C中,可以使用typedef定义自己的枚举类型,例如: typedef NS_ENUM(NSInteger, Fr…

    C 2023年5月23日
    00
  • C语言中各种运算类型全面总结

    C语言中各种运算类型全面总结 在C语言中,常见的运算类型有整型、浮点型、字符型以及指针类型。本文将对这些运算类型及其运算方式进行详细讲解。 整型运算 C语言中的整型运算指的是对整数进行的运算,常用的整型有int、short和long。整型运算中,常见的运算符有加号+、减号-、乘号*、除号/和取模(取余)运算符%。 int a = 5; int b = 2; …

    C 2023年5月23日
    00
  • C++实现图书管理系统最新版

    C++实现图书管理系统最新版 简介 本文将会详细讲解如何使用C++实现一个简单的图书管理系统。此系统模拟了图书馆的基本管理功能,具有管理图书、借阅图书、归还图书等功能。 实现步骤 创建一个C++项目,并在项目中新建一个名为 book.h 的头文件。 在 book.h 中定义一个 Book 结构体,包含以下属性:* int book_id:图书编号* stri…

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