这是运行后的结果
下面是代码,请各位前辈指教,谢谢!
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define len sizeof(struct student)
typedef struct student
{
char id[10];
char name[20];
struct student *next;
}STU;
//分割线的输出
void line()
{
int i;
for(i=0;i<30;i++)
{
printf("-");
}
printf("\n");
}
//新建链表
STU *link(int n)
{
STU *head,*p,*p1;
int i=1;
while(n<=0)
{
printf("分配失败,请输入你要录入学生的个数:");
scanf("%d",&n);
line();
}
head=p=p1=(struct student *)malloc(len);
printf("请输入第1个学生信息(学号,姓名):\n");
scanf("%s%s",p1->id,p1->name);
for(i=2;i<=n;i++)
{
p1=(struct student *)malloc(len);
line();
printf("请输入%d个学生信息(学号,姓名):\n",i);
scanf("%s%s",p1->id,p1->name);
p->next=p1;
p=p1;
}
p1->next=NULL;
return head;//返回头指针
}
//链表的输出
void output(STU *head)
{
STU *p=head;
line();
if(p!=NULL)
printf("学号\t姓名\n");
while(p!=NULL)
{
printf("%s\t%s\n",p->id,p->name);
p=p->next;
}
}
//链表查找
void find(STU *head,char *name)
{
STU *p=head;
while(p!=NULL)
{
if (strcmp(p->name,name)==0)
{
break;
}
p=p->next;
}
if(p==NULL)
{
line();
printf("对不起,找不到此学生\n");
}
else
{ line();
printf("学号\t姓名\n");
printf("%s\t%s\n",p->id,p->name);
}
}
//链表的删除
STU *del(STU *head,char *name)
{
STU *p=head,*front;
if (strcmp(head->name,name)==0)
{
head=head->next;
return head;
}
while(p!=NULL)
{
if (strcmp(p->name,name)==0)
{
break;
}
front=p;
p=p->next;
}
if (p!=NULL)
{
front->next=p->next;
}
else
{
printf("找不到该学生;");
}
return head;
}
void main()
{
STU *head;
int n;
char name[20];
head=NULL;
printf("请输入你要录入学生的个数:");
scanf("%d",&n);
line();
head=link(n);
output(head);
/*
printf("请输入要查找的学生姓名:\n");
getchar();
gets(name);
output(find(head,name));*/
line();
printf("请输入你要删的学生的姓名:\n");
getchar();
gets(name);
del(head,name);
output(head);
}