通讯录(用链表功能实现)

#include<stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct people{

     char name[10];//姓名

     int age;//年龄

     int num;//手机号码

     struct people *next;

}PEOPLE;

 

void create(PEOPLE *L)//尾插法建立链表

{

    PEOPLE *p,*r;

    int i;

    

    r=L;

    for(i=0;i<5;i++)

    {

        p=(PEOPLE *)malloc(sizeof(PEOPLE));

        printf("input a name:\n");

        scanf("%s",p->name);

        printf("input age:\n");

        scanf("%d",&(p->age));

        printf("input num:\n");

        

            scanf("%d",&(p->num));

        r->next=p;

        r=p;

       

        

    }

    r->next=NULL;

 

}

void paixu(PEOPLE *L)//排序

{

   PEOPLE *p,*q,*tmp;

   int i,j;

   tmp=(PEOPLE *)malloc(sizeof(struct people));

   p=L->next;

   q=p->next;

        while(p!=NULL)

        {  

           while(q!=NULL)

           {

              if(strcmp(p->name,q->name)>0)

           {

                strcpy(tmp->name,p->name);

                 strcpy(p->name,q->name);

                strcpy(q->name,tmp->name);

                 tmp->age=p->age;

                 p->age=q->age;

                 q->age=tmp->age;

                 tmp->num=p->num;

                 p->num=q->num;

                 q->num=tmp->num;

           }

          q=q->next;

         

       }

       q=p->next;

       p=p->next;

    }

     

}

 

void insert(PEOPLE *L,char na[],int ag,inttel)

{

   PEOPLE *p,*s;//s为创建的空节点用来存放插入数据

   int i;//循环使用

   p=L;

   s=(PEOPLE *)malloc(sizeof(PEOPLE));

   

   strcpy(s->name,na);

   s->age=ag;

   s->num=tel;//分别将要插入的数据放入空节点中

 

   s->next=p->next;//

   p->next=s;

       

}

 

void delete(PEOPLE *L,char na[],int ag,inttel)//删除

{

   PEOPLE *p,*q;

   q=L;

   p=L->next;

   

   while(p!=NULL)

    {

       if((strcmp(p->name,na)==0)&&((p->age)==ag)&&((p->num)==tel))

       {

           

           q->next=p->next;

           break;

       }

       else

       {

           q=q->next;

          p=p->next;

       }

    }

   free(p);

}

 

void print(PEOPLE *L)//输出函数

{

    PEOPLE *p=L->next;

    int i;

    while(p!=NULL)

    {

        printf("姓名:%10s\t",p->name);

        printf("年龄:%5d\t",p->age);

       

             printf("手机号码:%15d\n",p->num);

         

        p=p->next;

    }

}

int main()

{

    PEOPLE p;

    int i,n;

    char na[20];

    int ag,tel;

    

    printf("通讯录具有以下功能:\n1.创建联系人\n2.列表好友信息\n3.添加好友\n4.搜索好友\n5.删除好友\n");

   printf("创建功能请按1:\n");

   scanf("%d",&n);

   if(n==1)

    {

        create(&p);

        print(&p);

              

   } 

   printf("添加功能请按2:\n");

   scanf("%d",&n);

   if(n==2)

   {  

       printf("请输入要添加的姓名:\n");

       scanf("%s",na);

       getchar();

       printf("请输入年龄:\n");

       scanf("%d",&ag);

       printf("请输入手机号码");

       scanf("%d",&tel);

       insert(&p,na,ag,tel);//插入函数参数左到右分别为p,姓名,年龄,手机号码

       print(&p);

    }

 

   printf("排序功能请按3:\n");

   scanf("%d",&n);

   if(n==3)

    {

       paixu(&p);

       print(&p);

    }

   printf("删除功能请按4:\n");

   scanf("%d",&n);

   if(n==4)

   {  

       printf("请输入要删除的名字:\n");

       scanf("%s",na);

       printf("请输入要删除的人的年龄:\n");

       scanf("%d",&ag);

       printf("请输入要删除的人的手机号码:\n");

       scanf("%d",&tel);

       delete(&p,na,ag,tel);//输入要删除的人的姓名,年龄,手机号码

       print(&p);

   } 

    

 

    return 0;

   

}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值