用c语言链表打出电话簿
时间: 2023-07-11 20:02:19 浏览: 187
### 回答1:
使用C语言链表实现电话簿可以通过创建一个包含联系人信息的结构体,然后利用链表将这些结构体连接起来。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Contact {
char name[100];
char number[100];
struct Contact* next;
};
typedef struct Contact Contact;
Contact* createContact(char* name, char* number) {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
strncpy(newContact->name, name, sizeof(newContact->name));
strncpy(newContact->number, number, sizeof(newContact->number));
newContact->next = NULL;
return newContact;
}
void addContact(Contact** head, Contact* newContact) {
if (*head == NULL) {
*head = newContact;
} else {
Contact* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newContact;
}
}
void printContacts(Contact* head) {
Contact* current = head;
while (current != NULL) {
printf("Name: %s\tNumber: %s\n", current->name, current->number);
current = current->next;
}
printf("\n");
}
int main() {
Contact* phoneBook = NULL;
// 添加联系人信息
addContact(&phoneBook, createContact("张三", "123456"));
addContact(&phoneBook, createContact("李四", "987654"));
addContact(&phoneBook, createContact("王五", "456789"));
// 打印电话簿所有联系人信息
printContacts(phoneBook);
// 释放内存
Contact* current = phoneBook;
while (current != NULL) {
Contact* next = current->next;
free(current);
current = next;
}
return 0;
}
```
通过使用`createContact`函数创建一个新的联系人,并使用`addContact`函数将其添加到电话簿链表中。`printContacts`函数用于打印电话簿中所有联系人的信息。在`main`函数中,我们创建一个空的电话簿,然后添加一些联系人信息,最后打印出电话簿的所有内容。完成后,我们还要释放使用的内存空间以避免内存泄漏。
### 回答2:
电话簿通常是一个包含联系人信息的数据库,可以用链表来实现。在C语言中,可以定义一个结构体来表示联系人的信息,然后使用链表来存储这些联系人的结构体节点。
首先,我们定义一个包含联系人信息的结构体,例如:
```c
typedef struct Contact {
char name[100];
char phone[20];
struct Contact* next;
} Contact;
```
然后,我们可以定义一个链表的头指针变量,以及一些必要的函数来操作链表。以下是一些常用的函数:
1. 创建联系人节点的函数:
```c
Contact* createContact(char name[], char phone[]) {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
strcpy(newContact->name, name);
strcpy(newContact->phone, phone);
newContact->next = NULL;
return newContact;
}
```
2. 插入联系人节点的函数:
```c
void insertContact(Contact** head, Contact* newContact) {
if (*head == NULL) {
*head = newContact;
} else {
Contact* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newContact;
}
}
```
3. 打印电话簿的函数:
```c
void printPhoneBook(Contact* head) {
if (head == NULL) {
printf("电话簿为空。\n");
} else {
Contact* current = head;
printf("电话簿列表:\n");
while (current != NULL) {
printf("姓名:%s,电话:%s\n", current->name, current->phone);
current = current->next;
}
}
}
```
4. 主函数中的演示:
```c
int main() {
Contact* phoneBook = NULL;
// 创建联系人节点
Contact* contact1 = createContact("张三", "123456");
Contact* contact2 = createContact("李四", "654321");
Contact* contact3 = createContact("王五", "987654");
// 插入联系人节点到电话簿链表
insertContact(&phoneBook, contact1);
insertContact(&phoneBook, contact2);
insertContact(&phoneBook, contact3);
// 打印电话簿
printPhoneBook(phoneBook);
return 0;
}
```
以上就是使用C语言链表存储电话簿的一个简单示例。当然,我们还可以添加更多的函数来实现其他操作,如删除联系人、按照姓名或电话进行搜索等。这个例子主要展示了链表的创建、插入和打印功能。
### 回答3:
使用C语言中的链表来实现电话簿可以通过以下步骤完成:
1. 首先,我们需要定义一个电话簿节点的结构。该结构可以包含联系人的姓名和电话号码等信息。例如,
```c
typedef struct PhonebookNode {
char name[50];
char phone[15];
struct PhonebookNode* next;
} PhonebookNode;
```
2. 接下来,我们需要定义一个链表的头节点,用于指向电话簿的第一个节点。例如,
```c
PhonebookNode* head = NULL;
```
3. 然后,我们可以编写一些函数来操作这个链表。例如,我们可以编写一个函数来添加新的联系人到电话簿中。函数可以按照字母顺序将联系人插入到正确的位置。例如,
```c
void addContact(char name[], char phone[]) {
PhonebookNode* newNode = (PhonebookNode*)malloc(sizeof(PhonebookNode));
strcpy(newNode->name, name);
strcpy(newNode->phone, phone);
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
PhonebookNode* current = head;
PhonebookNode* previous = NULL;
while (current != NULL && strcmp(current->name, newNode->name) < 0) {
previous = current;
current = current->next;
}
if (previous == NULL) {
newNode->next = current;
head = newNode;
} else {
previous->next = newNode;
newNode->next = current;
}
}
}
```
4. 还可以编写其他函数来删除联系人、查找联系人或显示整个电话簿。例如,
```c
void deleteContact(char name[]) {
PhonebookNode* current = head;
PhonebookNode* previous = NULL;
while (current != NULL && strcmp(current->name, name) != 0) {
previous = current;
current = current->next;
}
if (current != NULL) {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
}
}
PhonebookNode* findContact(char name[]) {
PhonebookNode* current = head;
while (current != NULL && strcmp(current->name, name) != 0) {
current = current->next;
}
return current;
}
void displayPhonebook() {
PhonebookNode* current = head;
while (current != NULL) {
printf("Name: %s, Phone: %s\n", current->name, current->phone);
current = current->next;
}
}
```
通过这些函数,我们可以使用链表来创建、编辑和显示电话簿中的联系人。这样,在C语言中使用链表实现一个电话簿就完成了。
阅读全文