2008-06-30 回答
//链表问题
//电话薄实现:可以输入,输出,插入,删除联系人信息.
#include
#include
#include
typedef struct student
{
char address[20];
char name[20];
char mail[7];;
char phone[10];
struct student *next;
}LNode;
void creat_list( LNode **h ) //请输入联系人信息
{
LNode * p;
int i;
char temp_number[20];
(*h)=(LNode *)malloc(sizeof(LNode));
(*h)->next=NULL;
printf("请输入联系人信息:\n");
printf("请输入联系人姓名,以000结束\n");
scanf("%s",temp_number);
while(strcmp(temp_number,"000"))
{
p=(LNode *)malloc(sizeof(LNode));
strcpy(p->name, temp_number);
printf("请输入联系人地址\n");
scanf("%s",temp_number);
strcpy(p->address, temp_number);
printf("请输入联系人电话号码\n");
scanf("%s",temp_number);
strcpy(p->phone, temp_number);
printf("请输入联系人邮政编码\n");
scanf("%s",temp_number);
strcpy(p->mail, temp_number);
printf("请输入联系人姓名,以000结束\n");
scanf("%s",temp_number);
p->next=(*h)->next;
(*h)->next=p;
}
}
//输出电话本
void print_list(LNode *L)
{
LNode *p;
printf("\t姓名\t地址\t邮政编码\t电话号码\n");
p=L->next;
//printf("\n1\n");
if(!p)
{
printf("error\n");
}
//printf("\n3\n");
while (p)
{
printf("\t%s\t%s\t%s\t%s\n", p->name, p->address, p->mail, p->phone);
p=p->next;
}
//printf("\n2\n");
}
// 在第i 个联系人前插入
void ListInsert_L(LNode *L,int i)
{
int j=0;
LNode *s,*p;
char temp_number[20];
p=L;
s=(LNode *)malloc(sizeof(LNode));
if(!s)
{
printf("error\n");
return;
}
printf("请输入联系人姓名\n");
scanf("%s",&temp_number);
strcpy(s->name, temp_number);
printf("请输入联系人地址\n");
scanf("%s",temp_number);
strcpy(s->address, temp_number);
printf("请输入联系人电话号码\n");
scanf("%s",temp_number);
strcpy(s->phone, temp_number);
printf("请输入联系人邮政编码\n");
scanf("%s",temp_number);
strcpy(s->mail, temp_number);
while (p&&j
{
p=p->next;
j++;
}
if (!p||j>i-1)
{
printf("error\n");
return;
}
s->next=p->next;
p->next=s;
}
//删除第i个联系人
void ListDelete_L(LNode *L, int i)
{
LNode *p, *q;
int j;
p = L;
j = 0;
while (p->next && j < i-1) // 寻找第 i 个结点,并令 p 指向其前趋
{
p = p->next;
j++;
}
if (!(p->next) || j > i-1) // 删除位置不合理
{
printf("error\n");
return;
}
q = p->next; p->next = q->next;
free(q);
}
void main()
{
LNode *L;
int choice,i;
printf("输入功能号choice,\n\t为1时输入联系人,\n\t为2时输出电话本,\n\t为3时插入联系人,\n\t为4时删除联系人\n\t为0时结束\n");
scanf("%d",&choice);
while(choice)
{
switch (choice)
{
case 1:creat_list(&L);
break;
case 2:print_list(L);
break;
case 3:printf("请输入要插入元素的位置i:\n");
scanf("%d",&i);
ListInsert_L(L,i);
break;
case 4:printf("请输入你要删除元素的位置\n");
scanf("%d",&i);
ListDelete_L(L, i) ;
break;
default:
printf("输入错误\n");
}
printf("输入功能号choice,\n\t为1时输入联系人,\n\t为2时输出电话本,\n\t为3时插入联系人,\n\t为4时删除联系人\n\t为0时结束\n");
scanf("%d",&choice);
}
}