主题:[讨论]数据结构通讯录代码 有一点错误 请改改 先 谢谢!
# include "stdio.h"
# include "string.h"
# include "stdlib.h"
typedef struct
{ char num[5];
char name[10];
char sex[5];
char phone[15];
char addr[30];
}datatype;
typedef struct node
{ datatype data;
struct node * next;
}listnode;
typedef listnode * linklist;
linklist head;
listnode * p;
int select()
{ int id;
printf(" 通讯录系统\n");
printf("****************************************\n");
printf("* 1.通讯录链表的建立 *\n");
printf("* 2.通讯者节点的插入 *\n");
printf("* 3.通讯者节点的删除 *\n");
printf("* 4.通讯者节点的查询 *\n");
printf("* 5.通讯录链表的输出 *\n");
printf("* 0.退 出 管理系统 *\n");
printf("****************************************\n");
printf(" 请 选 择 0-5: ");
for(;;)
{ scanf("%d",&id);
if(id<0||id>5)
printf("\n\t输出错误,重选0-5: ");
else
break;
}
return id;
}
linklist createlist(void)
{ linklist head=(listnode *)malloc(sizeof(listnode));
listnode * p,* q;
char flag=0;
q=head;
while(flag==0)
{p=(listnode *)malloc(sizeof(listnode));
printf("编号(5) 姓名(10) 性别 电话(15) 地址(31)\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
q->next=p;
q=p;
printf("要继续输入吗?(y/n):");
scanf("%c",&flag);
}
q->next=NULL;
return head;
}
void insertnode(linklist head,listnode *p)
{ listnode * m,* n;
m=head;
n=m->next;
while(n!=NULL&&strcmp(n->data.num,p->data.num)<0)
{m=n;
n=n->next;
}
m->next=p;
p->next=n;
}
listnode * findlist(linklist head)
{ listnode * p;
char num[5];
char name[10];
int xz;
printf("*********************************\n");
printf(" 1.按编号查询 \n");
printf(" 2.按姓名查询 \n");
printf("*********************************\n");
printf(" 请选择 ");
p=head->next;
scanf("%d",&xz);
if(xz==1)
{printf("请输入编号:");
scanf("&s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
}
else
if(xz==2)
{printf("请输入姓名:");
scanf("&s",name);
while(p&&strcmp(p->data.num,num)!=0)
p=p->next;
}
return p;
}
void deletenode(linklist head)
{char j;
listnode *p,*q;
p=findlist(head);
if(p==NULL)
{printf("该通讯者不存在\n");
return;
}
printf("真的要删除吗?y/n:");
scanf("%c",&j);
if(j=='y')
{
q=head;
while(q!=NULL&&q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("已删除该通讯者!\n");
}
void printlist(linklist head)
{ listnode *p;
p=head->next;
printf("编号 姓名 性别 电话 地址\n");
printf("=============================\n");
while(p!=NULL)
{printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
printf("==============================");
p=p->next;
}
}
int main()
{ for(;;)
{switch(select())
{case 1:
printf("**********通讯录链表的建立**********\n");
head=createlist();
break;
case 2:
printf("**********通讯者信息的添加**********\n");
printf("编号(5) 姓名(5) 性别 电话(15) 地址(30)\n");
printf("====================================\n");
p=(listnode *)malloc(sizeof(listnode));
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
insertnode(head,p);
break;
case 3:
printf("**********通讯者信息的删除**********\n");
deletenode(head);
break;
case 4:
printf("**********通讯者信息的查询**********\n");
p=findlist(head);
if(p!=NULL)
{printf("编号 姓名 性别 电话 地址\n");
printf("=================================\n");
printf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
printf("=================================\n");
}
else
printf("该通讯者不存在!");
break;
case 5:
printf("**********通讯录链表的输出**********\n");
printlist(head);
break;
case 0:
printf("\t**********退出**********\n");
return 1;
}
}
}
# include "string.h"
# include "stdlib.h"
typedef struct
{ char num[5];
char name[10];
char sex[5];
char phone[15];
char addr[30];
}datatype;
typedef struct node
{ datatype data;
struct node * next;
}listnode;
typedef listnode * linklist;
linklist head;
listnode * p;
int select()
{ int id;
printf(" 通讯录系统\n");
printf("****************************************\n");
printf("* 1.通讯录链表的建立 *\n");
printf("* 2.通讯者节点的插入 *\n");
printf("* 3.通讯者节点的删除 *\n");
printf("* 4.通讯者节点的查询 *\n");
printf("* 5.通讯录链表的输出 *\n");
printf("* 0.退 出 管理系统 *\n");
printf("****************************************\n");
printf(" 请 选 择 0-5: ");
for(;;)
{ scanf("%d",&id);
if(id<0||id>5)
printf("\n\t输出错误,重选0-5: ");
else
break;
}
return id;
}
linklist createlist(void)
{ linklist head=(listnode *)malloc(sizeof(listnode));
listnode * p,* q;
char flag=0;
q=head;
while(flag==0)
{p=(listnode *)malloc(sizeof(listnode));
printf("编号(5) 姓名(10) 性别 电话(15) 地址(31)\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
q->next=p;
q=p;
printf("要继续输入吗?(y/n):");
scanf("%c",&flag);
}
q->next=NULL;
return head;
}
void insertnode(linklist head,listnode *p)
{ listnode * m,* n;
m=head;
n=m->next;
while(n!=NULL&&strcmp(n->data.num,p->data.num)<0)
{m=n;
n=n->next;
}
m->next=p;
p->next=n;
}
listnode * findlist(linklist head)
{ listnode * p;
char num[5];
char name[10];
int xz;
printf("*********************************\n");
printf(" 1.按编号查询 \n");
printf(" 2.按姓名查询 \n");
printf("*********************************\n");
printf(" 请选择 ");
p=head->next;
scanf("%d",&xz);
if(xz==1)
{printf("请输入编号:");
scanf("&s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
}
else
if(xz==2)
{printf("请输入姓名:");
scanf("&s",name);
while(p&&strcmp(p->data.num,num)!=0)
p=p->next;
}
return p;
}
void deletenode(linklist head)
{char j;
listnode *p,*q;
p=findlist(head);
if(p==NULL)
{printf("该通讯者不存在\n");
return;
}
printf("真的要删除吗?y/n:");
scanf("%c",&j);
if(j=='y')
{
q=head;
while(q!=NULL&&q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("已删除该通讯者!\n");
}
void printlist(linklist head)
{ listnode *p;
p=head->next;
printf("编号 姓名 性别 电话 地址\n");
printf("=============================\n");
while(p!=NULL)
{printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
printf("==============================");
p=p->next;
}
}
int main()
{ for(;;)
{switch(select())
{case 1:
printf("**********通讯录链表的建立**********\n");
head=createlist();
break;
case 2:
printf("**********通讯者信息的添加**********\n");
printf("编号(5) 姓名(5) 性别 电话(15) 地址(30)\n");
printf("====================================\n");
p=(listnode *)malloc(sizeof(listnode));
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
insertnode(head,p);
break;
case 3:
printf("**********通讯者信息的删除**********\n");
deletenode(head);
break;
case 4:
printf("**********通讯者信息的查询**********\n");
p=findlist(head);
if(p!=NULL)
{printf("编号 姓名 性别 电话 地址\n");
printf("=================================\n");
printf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
printf("=================================\n");
}
else
printf("该通讯者不存在!");
break;
case 5:
printf("**********通讯录链表的输出**********\n");
printlist(head);
break;
case 0:
printf("\t**********退出**********\n");
return 1;
}
}
}