利用链表实现通讯录

来源:互联网 发布:小麦淘商城 知乎 编辑:程序博客网 时间:2024/05/22 02:03
用链表实现一个可以用来存储信息的通讯录,每个人的信息包括:

姓名、性别、年龄、电话、住址


程序如下:

#include<stdio.h>#include<string.h>#include<stdlib.h>#define LEN sizeof(struct student)struct student{int i;char name[20];char tel[15];char addr[50];struct student*next;};void menu()//目录格式{printf("=================欢迎来到苏嵌154班通讯录======================\n");printf("-------------------1.添加我班宝宝联系信息---------------------\n");printf("-------------------2.删除我班宝宝联系信息---------------------\n");printf("-------------------3.修改我班宝宝联系信息---------------------\n");printf("-------------------4.查找我班宝宝联系信息---------------------\n");printf("-------------------5.展示我班全体宝宝信息---------------------\n");printf("-------------------6.删除全体宝宝联系信息---------------------\n");printf("-------------------7.感谢你的偷看,白白-----------------------\n");printf("=================欢迎来到苏嵌154班通讯录======================\n");}struct student *creat()//建立链表{struct student*p1,*p2,*head;int n = 0;head = NULL;p1=p2=(struct student*)malloc(LEN);printf("输入新成员学号:\n");scanf("%d",&p1->i);printf("输入新成员姓名:\n");scanf("%s",p1->name);printf("输入新成员号码:\n");scanf("%s",p1->tel);printf("输入新成员地址:\n");scanf("%s",p1->addr);printf("添加新成员成功!\n");while(p1->i != 0){n = n+1;if(n == 1)head = p1;elsep2->next = p1;p2 = p1;p1 = (struct student*)malloc(LEN);printf("输入新成员学号:\n");scanf("%d",&p1->i);printf("输入新成员姓名:\n");scanf("%s",p1->name);printf("输入新成员号码:\n");scanf("%s",p1->tel);printf("输入新成员地址:\n");scanf("%s",p1->addr);printf("添加新成员成功!\n");}p2->next = NULL;return head;}struct student *add(struct student *head,int index)//增加联系人{printf("添加联系人:\n");struct student *p1,*p2,*p3;p3=(struct student*)malloc(LEN);printf("输入新成员学号:\n");scanf("%d",&p3->i);printf("输入新成员姓名:\n");scanf("%s",p3->name);printf("输入新成员号码:\n");scanf("%s",p3->tel);printf("输入新成员地址:\n");scanf("%s",p3->addr);printf("添加新成员成功!\n");p1 = p2 = head;while(p1->next != NULL && p1->i != index) {p2 = p1;p1 = p1->next;}if(p1->i == index){if(p1 == head){head = p3;p3->next = p1;}else{p2->next = p3;p3->next = p1;}}else{p1->next = p3;p3->next = NULL;}return head;}struct student *delete(struct student *head,char name[20])//删除联系人{struct student *p1,*p2;p1 = head;p2 = p1;while(p1->next !=NULL && strcmp(p1->name,name) != 0){p2=p1;p1=p1->next;}if(strcmp(p1->name,name) == 0){if(p1 == head){head = head->next;printf("删除联系人成功\n");}else{p2->next = p1->next;printf("删除联系人成功\n");}}else{printf("目前通讯录没这个宝宝!\n");}free(p1);return head;}struct student *modify(struct student *head,char name[20])//修改联系人{struct student *p;p = head;while(p->next != NULL && strcmp(p->name,name)!=0){p = p->next;}if(strcmp(p->name,name)==0){printf("输入修改成员学号:\n");scanf("%d",&p->i);printf("输入修改的姓名:\n");scanf("%s",p->name);printf("输入修改的号码:\n");scanf("%s",p->tel);printf("输入修改的地址:\n");scanf("%s",p->addr);printf("修改成功\n");}else{printf("目前通讯录没这个宝宝!\n");}return head;}struct student *find(struct student *head,char name[20])//查找联系人{struct student *p1;p1 = head;while(p1->next != NULL && strcmp(p1->name,name)!=0){p1 = p1->next;}if(strcmp(p1->name,name)==0){printf("序号\t姓名\t号码\t地址\t\n");printf("%d\t",p1->i);printf("%s\t",p1->name);printf("%s\t",p1->tel);printf("%s\t",p1->addr);printf("\n");}elseprintf("目前通讯录没这个宝宝!\n");}void show(struct student *head)//打印链表{struct student *p;p = head;if(head != NULL){do{printf("序号\t姓名\t号码\t地址\t\n");printf("%d\t",p->i);printf("%s\t",p->name);printf("%s\t",p->tel);printf("%s\t",p->addr);printf("\n");p = p->next;}while(p != NULL);}elseprintf("目前通讯录没宝宝!\n");}struct student *clear(struct student *head){head = NULL;return head;}int main(){int n = 1;int i;struct student *head;head = creat();char name[20];int index;while(n){menu();printf("请输入你的骚操作:\n");scanf("%d",&i);switch(i){case 1:{printf("请输入插到哪个学号前:\n");scanf("%d",&index);head = add(head,index);break;    }case 2:{ printf("请输入要删除联系人的姓名:\n");scanf("%s",name);head = delete(head,name);break; }case 3:{printf("请输入需要修改的联系人的姓名:\n");scanf("%s",name);modify(head,name);break;}case 4:{printf("请输入查找联系人的姓名:\n");scanf("%s",name);find(head,name);break;}case 5:{show(head);break;}case 6:{head = clear(head);break;}default:{break;}}}}


程序比较浅显易懂 ,这里就不做具体分析 ,大家可以自己多多琢磨分析语句。