利用单链表实现电话本的模拟程序:定义单链表的数据类型,将头插法和尾插法、插入、删除、查找、修改、计数、逆置、输出等操作都定义成子函数的形式,最后在主函数中调用它,并将每一种操作前后的结果输出,以查看每
时间: 2023-04-30 22:03:59 浏览: 55
这段字符串描述了利用单链表实现电话本的模拟程序。程序中定义了单链表的数据类型,将头插法和尾插法、插入、删除、查找、修改、计数、逆置、输出等操作都定义成子函数的形式,最后在主函数中调用它们,以实现每一种操作前后的结果输出,以查看每种操作的效果。
相关问题
利用单链表实现电话本的模拟程序:定义单链表的数据类型,将头插法和尾插法、插入、删除、查找、修改、计数、逆置、输出等操作
定义单链表的数据类型:
```
struct ListNode {
string name;
string phone;
ListNode* next;
};
```
头插法:
```
ListNode* head = nullptr;
void insertAtHead(string name, string phone) {
ListNode* node = new ListNode{name, phone, nullptr};
if (head == nullptr) {
head = node;
} else {
node->next = head;
head = node;
}
}
```
尾插法:
```
ListNode* head = nullptr;
void insertAtTail(string name, string phone) {
ListNode* node = new ListNode{name, phone, nullptr};
if (head == nullptr) {
head = node;
} else {
ListNode* tail = head;
while (tail->next != nullptr) {
tail = tail->next;
}
tail->next = node;
}
}
```
插入:
```
void insert(string name, string phone, int index) {
ListNode* node = new ListNode{name, phone, nullptr};
if (index == 0) {
insertAtHead(name, phone);
} else {
ListNode* prev = head;
for (int i = 0; i < index - 1 && prev != nullptr; i++) {
prev = prev->next;
}
if (prev != nullptr) {
node->next = prev->next;
prev->next = node;
}
}
}
```
删除:
```
void remove(string name) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr && curr->name != name) {
prev = curr;
curr = curr->next;
}
if (curr != nullptr) {
if (prev == nullptr) {
head = curr->next;
} else {
prev->next = curr->next;
}
delete curr;
}
}
```
查找:
```
ListNode* find(string name) {
ListNode* curr = head;
while (curr != nullptr && curr->name != name) {
curr = curr->next;
}
return curr;
}
```
修改:
```
void update(string name, string newPhone) {
ListNode* node = find(name);
if (node != nullptr) {
node->phone = newPhone;
}
}
```
计数:
```
int count() {
int cnt = 0;
ListNode* curr = head;
while (curr != nullptr) {
cnt++;
curr = curr->next;
}
return cnt;
}
```
逆置:
```
void reverse() {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
```
输出:
```
void print() {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->name << ": " << curr->phone << endl;
curr = curr->next;
}
}
```
利用单链表实现电话本的模拟程序定义单链表的数据类型将头插法和尾插法插入删除查找修改技术拟制输出等操作都定义成此函数的形式最后在主函数中调用它并将每一种操作前后的结果输出以查看每一种操作最后的结果完整代码 c语言
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义电话本结构体
typedef struct phonebook {
char name[20];
char phone[11];
struct phonebook *next;
} PhoneBook;
// 头插法插入电话本信息
PhoneBook *insertHead(PhoneBook *head) {
PhoneBook *p = (PhoneBook*)malloc(sizeof(PhoneBook));
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入电话:");
scanf("%s", p->phone);
p->next = head;
head = p;
printf("添加成功!\n");
return head;
}
// 尾插法插入电话本信息
PhoneBook *insertTail(PhoneBook *head) {
PhoneBook *p = (PhoneBook*)malloc(sizeof(PhoneBook));
printf("请输入姓名:");
scanf("%s", p->name);
printf("请输入电话:");
scanf("%s", p->phone);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
PhoneBook *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("添加成功!\n");
return head;
}
// 根据姓名查找电话本信息
void searchByName(PhoneBook *head) {
printf("请输入要查找的姓名:");
char name[20];
scanf("%s", name);
PhoneBook *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("姓名:%s,电话:%s\n", p->name, p->phone);
return;
}
p = p->next;
}
printf("未找到该用户!\n");
}
// 根据电话查找电话本信息
void searchByPhone(PhoneBook *head) {
printf("请输入要查找的电话:");
char phone[11];
scanf("%s", phone);
PhoneBook *p = head;
while (p != NULL) {
if (strcmp(p->phone, phone) == 0) {
printf("姓名:%s,电话:%s\n", p->name, p->phone);
return;
}
p = p->next;
}
printf("未找到该用户!\n");
}
// 修改电话本信息
void modify(PhoneBook *head) {
printf("请输入要修改的姓名:");
char name[20];
scanf("%s", name);
PhoneBook *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入新的电话:");
scanf("%s", p->phone);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该用户!\n");
}
// 删除电话本信息
PhoneBook *delete(PhoneBook *head) {
printf("请输入要删除的姓名:");
char name[20];
scanf("%s", name);
PhoneBook *p = head;
PhoneBook *pre = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (pre == NULL) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
printf("删除成功!\n");
return head;
}
pre = p;
p = p->next;
}
printf("未找到该用户!\n");
return head;
}
// 输出电话本信息
void print(PhoneBook *head) {
PhoneBook *p = head;
while (p != NULL) {
printf("姓名:%s,电话:%s\n", p->name, p->phone);
p = p->next;
}
}
int main() {
PhoneBook *head = NULL;
int choice;
do {
printf("1.头插法插入电话本信息\n2.尾插法插入电话本信息\n3.根据姓名查找电话本信息\n4.根据电话查找电话本信息\n5.修改电话本信息\n6.删除电话本信息\n7.输出电话本信息\n8.退出\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch(choice) {
case 1:
head = insertHead(head);
break;
case 2:
head = insertTail(head);
break;
case 3:
searchByName(head);
break;
case 4:
searchByPhone(head);
break;
case 5:
modify(head);
break;
case 6:
head = delete(head);
break;
case 7:
print(head);
break;
case 8:
printf("程序结束!");
break;
default:
printf("请输入正确的操作编号!\n");
}
} while (choice != 8);
return 0;
}
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)