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 }