- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct DIR{
- char name[50];
- char clas[20];
- char teleNum[15];
- struct DIR *next;
- } Dir ,*pDir;
- void Init(pDir *h){//初始化头指针
- *h = ( Dir *)malloc(sizeof( Dir));
- memset(*h, 0, sizeof( Dir));
- (*h) -> next = NULL;
- }
- void Input(Dir *p)
- {
- printf("输入姓名:");
- scanf("%s",p->name);
- printf("输入班级:");
- scanf("%s",p->clas);
- printf("输入电话号码:");
- scanf("%s",p->teleNum);
- }
- void add(pDir *head){//添加成员
- Dir *p = *head ;
- int conti = 1;
- while((p -> next)!=NULL){
- p = p -> next;
- }
- while(1){
- printf("键入1继续录入(0-1):");
- scanf("%d",&conti);
- if(!conti){
- printf("退出通讯录的录入!\n");
- break;
- }
- p -> next = ( Dir *)malloc(sizeof( Dir));
- Input(p->next);
- p = p -> next;
- }
- p -> next = NULL;
- }
- int del( Dir *head, char *ne){//删除成员
- Dir *p = head;
- Dir *q = NULL;
- int status = 0;
- while(p!=NULL && (p -> next)!=NULL){
- q = p -> next;
- if(q!=NULL && strcmp(q->name, ne)==0){
- p -> next = q -> next;
- free(q);
- status++ ;
- // break;
- }
- p = p -> next;
- }
- return status;
- }
- void query( Dir *head, char* ne){//查询成员
- Dir *p = head -> next;
- int Founded = 0;
- while(p!=NULL){
- if(strcmp(p->name, ne)==0){
- printf("姓名:%s 班级:%s 电话号码:%s\n",p->name,p->clas,p->teleNum);
- Founded = 1;
- }
- p = p -> next;
- }
- if(!Founded){
- printf("0个记录!\n");
- }
- }
- void print(Dir *head){//打印通讯录
- Dir *p = head -> next;
- if(p==NULL)
- printf("链表为空!\n");
- while(p!=NULL){
- printf("姓名:%s 班级:%s 电话号码:%s\n",p->name,p->clas,p->teleNum);
- p = p -> next;
- }
- }
- void push_back( Dir *head, Dir *insert){//在末尾插入同学
- Dir *p = head;
- while((p -> next)!=NULL){
- p = p -> next;
- }
- p -> next = insert;
- insert -> next = NULL;
- }
- void push_front( Dir *head, Dir *insert){//在列表头插入同学
- Dir *p = head -> next;
- head -> next = insert;
- insert -> next = p;
- }
- void InitNew(pDir *m_new)
- {
- *m_new = (Dir *)malloc(sizeof(Dir));
- Input(*m_new);
- }
- int main()
- {
- Dir *head, *p;
- char tmp[50];
- int num = 0;
- Init(&head);
- printf("1.进行通讯录的录入:\n");
- add(&head);
- printf("2.打印通讯录:\n");
- print(head);
- printf("进行通讯录的查询(以姓名查询):\n");
- printf("输入姓名:");
- scanf("%s",tmp);
- query(head,tmp);
- printf("删除通讯录成员:(以姓名删除)\n");
- scanf("%s",tmp);
- if(num = del(head, tmp)){
- printf("删除%d个记录!\n",num);
- }
- else{
- printf("没有此项记录\n");
- }
- printf("3.在表尾添加:\n");
- InitNew(&p);
- push_back(head, p);
- printf("添加后,通讯录内容为:\n");
- print(head);
- printf("4.在表头添加:\n");
- InitNew(&p);
- push_front(head, p);
- printf("添加后,通讯录内容为:\n");
- print(head);
- system("pause");
- return 0;
- }
转载于:https://blog.51cto.com/hustluy/434527