#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student{
char id[20];
char name[20];
int age;
struct Student *next;
}Stu;
Stu *create(int n){
Stu *head,*p,*tail;
head=(Stu*)malloc(sizeof(Stu));
head->next=NULL;
tail=head;
int i;
printf("请输入需要添加学生的ID,名字,年龄:");
for(i=0;i<n;i++)
{
p=(Stu*)malloc(sizeof(Stu));
scanf("%s %s %d",p->id,p->name,&p->age);
p->next=NULL;
tail->next=p;
tail=p;
}
return head;
}
void Print(Stu *head)
{
Stu *p=head;
p=p->next;
printf("学生ID,名字,年龄:");
while(p){
printf("%s %s %d\n",p->id,p->name,p->age);
p=p->next;
}
}
Stu *Add(Stu *head,Stu *x,int i)
{
Stu *p=head;
int j;
for(j=0;j<i-1;j++){
p=p->next;
}
x->next=p->next;
p->next=x;
return head;
}
Stu *Delete(Stu *head,int i)
{
Stu *p=head;
int j;
for(j=0;j<i-1;j++)
{
p=p->next;
}
Stu *q=p->next;
p->next=q->next;
free(q);
return head;
}
void Length(Stu *head)
{
int j=0;
while(head->next){
j++;
head=head->next;
}
printf("%d",j);
}
Stu *DeleteAge(Stu *head,int age)
{
Stu *p=head;
while(p->next!=NULL){
if(p->next->age==age)
{
Stu *q=p->next;
p->next=q->next;
free(q);
}else{
p=p->next;
}
}
return head;
}
void *reverse(Stu *head)
{
Stu *pre,*p=head->next,*r=p->next;
p->next=NULL;
while(r!=NULL)
{
pre=p;
p=r;
r=r->next;
p->next=pre;
}
head->next=p;
return head;
}
int main()
{
int x1,x2;
int n,i;
int age;
Stu *head=NULL;
while(1){
printf("请输入执行什么操作\n");
printf("1.创建学生表\n2.输出学生信息\n3.添加学生信息\n4.删除学生信息\n5.学生数量\n6.逆置学生表\n");
scanf("%d",&x1);
switch(x1){
case 1:
printf("请输入需要添加学生的数量:");
scanf("%d",&n);
head=create(n);
break;
case 2:
Print(head);
break;
case 3:
printf("请输入需要添加的学生信息和位置:");
printf("请输入需要添加学生的ID,名字,年龄:");
Stu *x=(Stu*)malloc(sizeof(Stu));
scanf("%s %s %d",x->id,x->name,&x->age);
printf("请输入需要添加学生的位置:");
scanf("%d",&i);
Add(head,x,i);
break;
case 4:
printf("请选择\n(1)依据学生位置进行删除\n(2)依据学生年龄进行删除\n");
scanf("%d",&x2);
if(x2==1){
printf("请输入需要删除的信息位置:");
scanf("%d",&i);
Delete(head,i);
}else{
printf("\n请输入需要删除的年龄:");
scanf("%d",&age);
head=DeleteAge(head,age);
}
break;
case 5:
printf("学生数量:");
Length(head);
break;
case 6:
printf("逆置学生表:\n");
head=reverse(head);
break;
default:
printf("请输入指定操作\n");
break;
}
}
return 0;
}