作业:创建单链表,存储4个学生信息(年龄,分数,姓名)。
1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表
2、任意位置插入一个新学生。变量e是学生结构体变量。
3、任意位置删除一个学生。
4、单链表逆置后将学生信息输出。
#include<myhead.h>
typedef struct
{
char name[20];
int age;
int score;
}stu;
typedef struct node
{
stu data;
int len;
struct node *next;
}Link,*Plink;
int insert_stu(Plink L,stu a)
{
if(L==NULL)
{
printf("链表为空或者不存在:\n");
return -1;
}
Plink t=L;
for(int i=0;i<L->len;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data =a;
t->next =p;
p->next=NULL;
L->len++;
}
int output_stu(Plink L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或者为空\n");
return -1;
}
Plink t=L;
for (int i = 0; i <L->len; i++) {
t=t->next;
printf("姓名: %s, 年龄: %d, 分数: %d\n", t->data.name, t->data.age, t->data.score);
}
printf("\n");
return 0;
}
int insert_stu_pos(Plink L,int pos,stu e)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或者为空\n");
return -1;
}
Plink t=L;
for(int i=0;i<pos;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->next=t->next;
t->next =p;
p->data=e;
L->len++;
}
int dele_pos(Plink L,int pos)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或者为空\n");
return -1;
}
Plink t=L;
for(int i=0;i<pos;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=Q->next;
free(Q);
Q==NULL;
L->len--;
printf("删除成功\n");
return 0;
}
int rev_link(Plink L)
{
if(L==NULL||L->len==0)
{
printf("单链表不存在或者为空\n");
return -1;
}
Plink t=L->next;
Plink Q=t->next;
while(Q!=NULL)
{
t->next=Q->next;
Q->next = L->next;
L->next = Q;
Q=t->next;
}
return 0;
}
int main()
{
Plink L=malloc(sizeof(Link));
if(L==NULL)
{
printf("申请失败\n");
}
L->len=0;
L->next=NULL;
for(int i=0;i<3;i++)
{
stu a;
printf("请输入第%d个学生信息:\n",i+1);
scanf("%s%d%d",a.name,&a.age,&a.score);
insert_stu(L,a);
}
printf("链表如下:\n");
output_stu(L);
//按照位置插入结点
stu e ={"老王",22,100};
insert_stu_pos(L,2,e);
output_stu(L);
//按照位置删除结点
dele_pos(L,2);
output_stu(L);
//逆置链表
rev_link(L);
printf("\n");
output_stu(L);
return 0;
}