c程序 使用链表建立通讯录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define N 20
typedef struct Person{
char Tel[N];
char Name[N];
char Address[2*N];
struct Person *next;
}Person,*Linklist;
//输入函数
void InPut(Linklist p)
{
printf("\n请输入通讯者姓名:\n");
scanf("%s",p->Name);
printf("\n请输入通讯者联系电话:\n");
scanf("%s",p->Tel);
printf("\n请输入通讯者地址:\n");
scanf("%s",p->Address);
}
//输出单个联系人的信息
void PutNode(Linklist p)
{
printf("\n通讯者姓名:\n%s",p->Name);
printf("\n通讯者联系电话:\n%s",p->Tel);
printf("\n通讯者地址:\n%s\n\n",p->Address);
}
//回收内存函数
void Release(Linklist L)
{
Linklist z,p;
p=L;
while(p!=NULL)
{
z=p->next;
free(p);
p=z;
}
}
//建立链表的函数
Linklist CreatList()
{
int tem1;
Linklist s,p,L;
printf("\n输入通讯者信息:\n输入非零整数开始;或者输入'0'退出:\n");
scanf("%d",&tem1);
L=(Linklist)malloc(sizeof(Person));
L->next=NULL;
s=L;
while(tem1!=0){
p=(Linklist)malloc(sizeof(Person));
InPut(p);
p->next=s->next;s->next=p;s=p;
printf("\n输入学生信息:\n输入非零整数继续;或者输入'0'退出:\n");
scanf("%d",&tem1);
}
return L;
}
//向通讯录中第i个位置前插入一个联系人的函数
void ListInsert(Linklist L,int i)
{
int j=0;
Linklist s,p;
p=L;
while(p&&j
if(!p||j>i-1) exit(0);
s=(Linklist)malloc(sizeof(Person));
InPut(s);
s->next=p->next;
p->next=s;
}
//删除通讯录中第i个联系人的函数
void ListDelete(Linklist L,int i)
{
int j=0;
Linklist p,q;
p=L;
while(p->next&&j
if(!(p->next)||j>i-1) exit(0);
q=p->next;p->next=q->next;
printf("您将删除的联系人信息为:\n");
PutNode(q);
free(q);
}
//输出通讯录中的所有联系人信息
void OutPut(Linklist L)
{
Linklist p;
p=L->next;
printf("输出所有联系人信息:\n");
while(p!=NULL)
{
PutNode(p);
p=p->next;
}
}
//按姓名查找的函数
Linklist FindName(Linklist p)
{
char tem[N];
printf("\n请输入要查找同学的姓名:\n");
scanf("%s",tem);
while(p!=NULL){
if(!strcmp(p->Name,tem))
return p;
else
p=p->next;
}
return NULL;
}
//按联系电话查找的函数
Linklist FindTel(Linklist p)
{
char tem[N];
printf("\n请输入要查找同学的联系电话:\n");
scanf("%s",tem);
while(p!=NULL){
if(!strcmp(p->Tel,tem))
return p;
else
p=p->next;
}
return NULL;
}