首页 > 代码库 > c语言 链表使用示例

c语言 链表使用示例

  1 #include<stdio.h>  2 #include<stdlib.h>  3 #include<string.h>  4 typedef struct list{  5     struct list *next;  6     char name[30];//用户名称  7     char addr[50];//地址  8     char num[8];//号码   9 }user; 10   11 void insert(user *h); 12 void edit(user *h); 13 void del(user *h); 14 void S_byName(user *h); 15 void S_byNum(user *h); 16 void display(user *h); 17   18 int main() 19 { 20     int flag; 21     user *head=(user *)malloc(sizeof(user)); 22     head->next=NULL; 23     while(1) 24     { 25         printf("电话号码目录系统\n"); 26         printf("    1、添加新电话用户信息\n"); 27         printf("    2、修改电话用户信息\n"); 28         printf("    3、删除已有电话用户信息\n"); 29         printf("    4、根据用户名查询电话信息\n"); 30         printf("    5、根据电话号码查询用户信息\n"); 31         printf("    6、显示全部用户信息\n"); 32         printf("    7、退出\n"); 33         printf("请选择:"); 34         scanf("%d",&flag); 35         if(flag==1) 36             insert(head); 37         else if(flag==2) 38             edit(head); 39         else if(flag==3) 40             del(head); 41         else if(flag==4) 42             S_byName(head); 43         else if(flag==5) 44                S_byNum(head); 45           else if(flag==6) 46             display(head); 47         else if(flag==7) 48             return 0; 49         else 50             printf("输入有误,请重新选择!\n"); 51     } 52 } 53 void insert(user *h) 54 { 55     user *p=(user *)malloc(sizeof(user)); 56     p->next=h->next; 57     h->next=p; 58     printf("请输入新增用户名称(最多30个字):"); 59     scanf("%s",p->name); 60     printf("请输入新增用户的家庭住址(最多50字):"); 61     scanf("%s",p->addr); 62     printf("请输入新增用户的电话号码(8位数):"); 63     scanf("%s",p->num); 64     printf("新用户记录成功添加:%s  %s  %s\n\n",p->name,p->addr,p->num); 65 } 66 void edit(user *h) 67 { 68     char name[30]; 69     int flag=0; 70     user *lh=h->next; 71     printf("输入要修改用户的名称:"); 72     scanf("%s",name); 73     while(lh) 74     { 75         if(strcmp(name,lh->name)==0) 76         { 77             flag=1; 78             printf("请输入新的名称(30字以内):"); 79             scanf("%s",lh->name); 80             printf("请输入新的地址(50字以内):"); 81             scanf("%s",lh->addr); 82             printf("请输入新的号码(8位):"); 83             scanf("%s",lh->num);  84             printf("用户记录修改成功:%s  %s  %s\n\n",lh->name,lh->addr,lh->num); 85             break; 86         } 87         lh=lh->next; 88     } 89     if(!flag) 90         printf("不存在这样的用户\n\n"); 91 } 92 void S_byName(user *h) 93 { 94     char name[30]; 95     int flag=0; 96     user *lh=h->next; 97     printf("输入要查找的用户名称:"); 98     scanf("%s",name); 99     while(lh)100     {101         if(strcmp(name,lh->name)==0)102         {103             flag=1;104             printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);105             break;106         }107         lh=lh->next;108     }109     if(!flag)110         printf("用户名不存在\n\n");111 }112 void S_byNum(user *h)113 {114     char num[30];115     int flag=0;116     user *lh=h->next;117     printf("输入要查找的电话号码:");118     scanf("%s",num);119     while(lh)120     {121         if(strcmp(num,lh->num)==0)122         {123             flag=1;124             printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);125             break;126         }127         lh=lh->next;128     }129     if(!flag)130         printf("找不到匹配的号码\n\n");131 }132 void display(user *h)133 {134     user *lh=h->next;135     int i=1;136     while(lh)137     {138         printf("第%d条用户信息:%s  %s  %s\n",i,lh->name,lh->addr,lh->num);139         lh=lh->next;140         i++;141     }142     printf("\n");143 }144 void del(user *h)145 {146     char name[30];147     int flag=0;148     user *lh=h;149     printf("输入要删除的用户名称:");150     scanf("%s",name);151     while(lh->next)152     {153         if(strcmp(name,lh->next->name)==0)154         {155             flag=1;156             printf("删除用户成功:%s  %s  %s\n\n",lh->next->name,lh->next->addr,lh->next->num);157             lh->next=lh->next->next;158             break;159         }160         lh=lh->next;161     }162     if(!flag)163         printf("用户名不存在\n\n");164 }

 

c语言 链表使用示例