针对“基于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技术站