如何使用线性表实现通讯录的建立
时间: 2023-05-19 19:03:46 浏览: 64
可以使用数组或链表来实现通讯录的建立。对于数组实现,可以定义一个固定大小的数组,每个元素存储一个联系人的信息,包括姓名、电话号码等。对于链表实现,可以定义一个节点结构体,每个节点存储一个联系人的信息,并且包含一个指向下一个节点的指针。在实现过程中,可以根据需求选择合适的数据结构。
相关问题
使用线性表实现通讯录的建立的代码
以下是使用线性表实现通讯录的建立的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_PHONE_LEN 11
#define MAX_CONTACTS 100
typedef struct {
char name[MAX_NAME_LEN];
char phone[MAX_PHONE_LEN];
} Contact;
typedef struct {
Contact contacts[MAX_CONTACTS];
int count;
} ContactList;
void addContact(ContactList *list, Contact contact) {
if (list->count >= MAX_CONTACTS) {
printf("通讯录已满,无法添加新联系人!\n");
return;
}
list->contacts[list->count] = contact;
list->count++;
printf("添加联系人成功!\n");
}
void deleteContact(ContactList *list, char *name) {
int i, j;
for (i = 0; i < list->count; i++) {
if (strcmp(list->contacts[i].name, name) == 0) {
for (j = i; j < list->count - 1; j++) {
list->contacts[j] = list->contacts[j + 1];
}
list->count--;
printf("删除联系人成功!\n");
return;
}
}
printf("未找到该联系人!\n");
}
void searchContact(ContactList *list, char *name) {
int i;
for (i = 0; i < list->count; i++) {
if (strcmp(list->contacts[i].name, name) == 0) {
printf("联系人姓名:%s,电话号码:%s\n", list->contacts[i].name, list->contacts[i].phone);
return;
}
}
printf("未找到该联系人!\n");
}
void printContacts(ContactList *list) {
int i;
printf("通讯录中共有 %d 个联系人:\n", list->count);
for (i = 0; i < list->count; i++) {
printf("联系人姓名:%s,电话号码:%s\n", list->contacts[i].name, list->contacts[i].phone);
}
}
int main() {
ContactList list = {0};
int choice;
char name[MAX_NAME_LEN], phone[MAX_PHONE_LEN];
Contact contact;
while (1) {
printf("请选择操作:\n");
printf("1. 添加联系人\n");
printf("2. 删除联系人\n");
printf("3. 查找联系人\n");
printf("4. 显示所有联系人\n");
printf("5. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入联系人姓名:");
scanf("%s", name);
printf("请输入联系人电话号码:");
scanf("%s", phone);
strcpy(contact.name, name);
strcpy(contact.phone, phone);
addContact(&list, contact);
break;
case 2:
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
deleteContact(&list, name);
break;
case 3:
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
searchContact(&list, name);
break;
case 4:
printContacts(&list);
break;
case 5:
printf("程序已退出!\n");
exit(0);
default:
printf("无效的选择!\n");
break;
}
}
return 0;
}
利用线性表实现一个通讯录管理,通信录的数据格式如下: struct DataType { int ID; //编号 char name[10]; //姓名 char ch; //性别 char phone[13]; //电话 char addr[31]; //地址 }; 要求: 实现通讯录的建立、增加、删除、修改、查询等功能 能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。 能够保存每次更新的数据 能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作) 编写测试 main()函数测试线性表的正确性。C+佳
好的,以下是我对于利用线性表实现通讯录管理的建议:
首先,我们可以使用链表来实现通讯录的管理。每个节点可以存储一个 DataType 类型的数据,包括编号、姓名、性别、电话和地址。链表的头节点可以作为通讯录的入口,我们可以在头节点后面插入新的节点来添加新的联系人,也可以通过遍历链表来查找、修改或删除联系人。
为了实现简单的菜单交互,我们可以使用 switch 语句来处理用户输入的命令。比如,用户输入 1 可以添加新的联系人,输入 2 可以查找联系人,输入 3 可以修改联系人信息,输入 4 可以删除联系人,输入 5 可以退出程序等等。每个命令对应一个函数,我们可以在 switch 语句中调用相应的函数来完成对应的操作。
为了保存每次更新的数据,我们可以将链表中的数据保存到文件中。每次程序启动时,我们可以读取文件中的数据来恢复通讯录。每次更新通讯录时,我们可以将链表中的数据写入文件中,以便下次启动程序时能够恢复最新的数据。
如果需要进行通讯录分类,我们可以在链表节点中添加一个分类字段,比如 class,用来表示联系人所属的分类。我们可以在菜单中添加一个选项,让用户选择不同的分类,然后在遍历链表时只显示对应分类的联系人。
最后,我们可以编写一个测试 main() 函数来测试线性表的正确性。我们可以在 main() 函数中添加一些测试用例,比如添加、查找、修改和删除联系人等等,以确保程序的正确性。
希望这些建议能够对你有所帮助!