项目参考来源:【C++简单项目】用单链表制作通讯录_数据结构用链表做通讯录-CSDN博客
项目需要实现的功能:
1.添加联系人
2.显示联系人
3.查找联系人
4.删除联系人
5.修改联系人
6.清除联系人
7.退出联系人
各个功能函数命名
void showMenu();
void add(Node *&head);
void show(Node *head);
void search(Node *head);
void del(Node *head);
void revise(Node *head);//修改
void empty(Node *&head);
确定我们需要用到的库函数
#include<iostream>
#include<string>
调用命名空间,简化使用std命名空间里的函数使用
关于namespace:为什么在C++程序中写“using namespace std”很重要?|极客笔记 (deepinout.com)
using namespace std;
定义我们需要的数据结构
一个是联系人,一个是链表
struct Contacts
{
string name;
string phone;
string address;
};
struct Node
{
Contacts person;
Node *next;
};
主函数
int main()
{
Node* head = NULL;
while (1)
{
showMenu();
int choice;
cin>>choice;
switch (choice)
{
case 1://添加联系人
add(head);
break;
case 2://显示联系人
show(head);
break;
case 3://查找联系人
search(head);
break;
case 4://删除联系人
del(head);
break;
case 5://修改联系人
revise(head);
break;
case 6://修改联系人
empty(head);
break;
case 7://退出联系人
cout << "欢迎下次使用" << endl;
return 0;
default:
break;
}
}
}
1.添加联系人
这是一个插入链表的操作,插入的名字按c++默认的string排序,1在2前,a在b前
void add(Node *&head)
{
Node *s,*p,*q ;
s = new Node;
cout << "请输入名字:\n";
cin >> s->person.name;
cout << "请输入电话:\n";
cin >> s->person.phone;
cout << "请输入住址:\n";
cin >> s->person.address;
s->next = NULL;
if(head == NULL)//若链表为空
{
head = s;
cout << "已成功添加联系人的信息!\n";
return;
}
if(s->person.name < head->person.name)//若插入的数据最小,插在表头
{
s->next = head;
head = s;
cout << "已成功添加联系人的信息!\n";
return;
}
for (q = head, p = head->next; p ;q = p,p = p->next)
{//循环遍历列表
if (s->person.name < p->person.name)
{
s->next = p;
q->next = s;
cout << "已成功添加联系人的信息!\n";
return;
}
}
q->next = s;//被插数据最大
cout << "已成功添加联系人的信息!\n";
return;
}
2.显示联系人
void show(Node *head)
{
if(head == NULL)
{
cout << "联系人列表为空!" << endl;
return;