建立一个学生数据链表,每个结点信息包括如下内容:学号,姓名,性别,年龄和专业.

对该链表作如下处理:
1、输入一个学号,如果链表中的结点包含该学号,则将这个结点删去;
2、输入一个专业,删除链表中包含该专业的所有结点。
要求:
(1)利用结构体类型组织链表;
(2)学号和专业信息由 scanf()函数从键盘输入。

#include<stdio.h>
#include<malloc.h>
#define LEN sizeo(struct student)
struct student
{
char num[6];
char name[8];
char sex[2];
int age;
struct student *next;
}stu[10];

void main()
{
struct student *p,*pt,*head;
int i,length,iage,flag=1;
int find=0;
while(flag==1)
{
printf("input length of list(<10):");
scanf("%d",&length);
if(length<10)
flag=0;
}

for (i=0;i<length;i++)
{
p=(struct student * ) malloc(LEN);
if(i==0)
head=pt=p;
else
pt->next=p;
pt=p;
printf("No.:");
scanf("%s",p->num);
printf("name:");
scanf("%s",p->name);
printf("sex:");
scanf("%s",p->sex);
printf("age:");
scanf("%d",&p->age);
}
p->next=NULL;
p=head;
printf("\n No. name sex age\n");
while(p!=NULL)
{
printf("%4s%8s%6s%6d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}

printf("input age:");
scanf("%d",&iage);
pt=head;
p=pt;
if(pt->age==iage)
{
p=pt->next;
head=pt=p;
find=1;
}
else
pt=pt->next;
while(pt!=NULL)
{
if(pt->age==iage)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(!find)
printf("not found %d.",iage);
p=head;
printf("\n No. name sex age\n");
while(p!=NULL)
{
printf("%4s%8s",p->num,p->name);
printf("%6s%6d\n",p->sex,p->age);
p=p->next;
}
}
温馨提示:答案为网友推荐,仅供参考