初级链表。。。电话本的简单创建。。。有点小困难。。。求解啊。。。谢谢、、、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct information
{
char name[10];
char telephone[15];
char num[10];
struct information *next;
};
struct information *head=NULL,*temp=NULL,*tail=NULL;
void creat()
{
tail=(struct information *)malloc(sizeof(struct information));
printf("请输入要添加联系人的信息:\n");
printf("姓名:");
scanf("%s",tail->name);
printf("手机号码:");
scanf("%s",tail->telephone);
printf("住宅号码:");
scanf("%s",tail->num);
temp->next=tail;
temp=tail;
tail->next=NULL;
}
void search()
{
char name1[10];
printf("请输入要查找的人名:");
scanf("%s",name1);
temp=tail=head->next;
for(;tail!=NULL;)
{
if(strcmp(tail->name,name1)==0)
{
printf("手机号码:%s\n住宅号码:%s\n",tail->telephone,tail->num);
return;
}
tail=tail->next;
}
printf("对不起,没有找到这个人。\n");
}
void insert()
{
char name1[10];
struct information *p;
printf("请输入要插入位置之前的人名:");
scanf("%s",name1);
tail=temp=head->next;
for(;tail!=NULL;)
{
if(strcmp(name1,tail->name)==0)
{
p=(struct information *)malloc(sizeof(struct information));
printf("请输入要添加联系人的信息:\n");
printf("姓名:");
scanf("%s",p->name);
printf("手机号码:");
scanf("%s",p->telephone);
printf("住宅号码:");
scanf("%s",p->num);
tail = temp->next;
temp->next = p;
p->next = tail;
printf("插入成功!\n");
return;
}
temp=tail=tail->next;
}
printf("对不起,无法在此人之后输入信息!\n");
}
void delete()
{
char name[10];
tail=temp=head->next;
printf("请输入要删除的联系人姓名:");
scanf("%s",name);
for(;tail!=NULL;)
{
temp=tail;
if(strcmp(tail->name,name))
{
temp->next=tail->next->next;
printf("删除成功!\n");
return;
}
temp=tail=tail->next;
}
}
void output()
{
tail=head->next;
for(;tail!=NULL;)
{
printf("姓名:%s\n手机号码:%s\n住宅号码:%s\n",tail->name,tail->telephone,tail->num);
tail=tail->next;
}
}
int main()
{
int k;
temp=(struct information *)malloc(sizeof(struct information));
head=tail=temp;
tail->next=NULL;
do
{
printf(" 0: exit\n"); /* 打印菜单项 */
printf(" 1: creat\n");
printf(" 2: search\n");
printf(" 3: insert\n");
printf(" 4: delete\n");
printf(" 5: output\n");
printf("please select:");
scanf("%d",&k); /* 输入选择项 */
switch(k)
{
case 0:
exit(0); /* 退出函数 */
case 1:
creat( );
break;
case 2:
search( );
break;
case 3:
insert( );
break;
case 4:
delete( );
break;
case 5:
output( );
break; /* 调用子函数 */
default:
exit(0);
}
}
while(1);
return 0;
}
题目
标题: 3、电话薄
时 限: 1000 ms
内存限制: 10000 K
总时限: 3000 ms
描述: 1.编写手机电话薄管理程序,用结构体实现下列功能:
(1) 手机电话薄含有姓名、宅电、手机3项内容,建立含有上述信息的电话簿。
(2)输入姓名,查找此人的号码。
(3)插入某人的号码。
(4)输入姓名,删除某人的号码。
(5)将以上功能分别用子函数实现,编写主函数,可以根据用户的需要,调用相应的子函数。
建议用结构体完成,可参考P204【例7-2】。
输入:
输出:
输入样例:
输出样例:
提示: 1、程序主函数如下所示,请认真理解,不要更改代码。
int main(void) /* 主函数 */
{
int k;
do
{
printf(" 0: exit\n"); /* 打印菜单项 */
printf(" 1: creat\n");
printf(" 2: search\n");
printf(" 3: insert\n");
printf(" 4: delete\n");
printf(" 5: output\n");
printf("please select:");
scanf("%d",&k); /* 输入选择项 */
switch(k)
{
case 0:
exit(0); /* 退出函数 */
case 1:
creat( );
break;
case 2:
search( );
break;
case 3:
insert( );
break;
case 4:
delete( );
break;
case 5:
output( );
break; /* 调用子函数 */
default:
exit(0);
}
}
while(1);
return 0;
}
2、根据主函数,设计相应函数完成指定功能。
3、create时,可用while(1)循环连续创建,当输入
这段代码删除功能无法实现,是为什么?而且插入时,在输出,有可能会出现乱码,这是怎么回事?求解。。。
[解决办法]
天啊,lz贴代码的时候选个合适的语言,看着头晕