#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int num;
float score;
struct student *next;
}q;
q *creat(int n)///指针类型
{
int i;
q *head,*node,*end;
head=(q*)malloc(sizeof(q));///给head分配空间
end=head; ///头指针=尾指针
for(i=0;i<n;i++)
{
node=(q*)malloc(sizeof(q));///给node分配空间
scanf("%d %f",&node->num,&node->score);
end->next=node;///连接
end=node;///尾部指针指向这个节点
}
end->next=NULL;
return head;///返回头指针地址
}
void change(q *list,int n,char a)///第n个节点的a值
{
q *t=list;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}///i=n时停止循环,此时t指向的是第n个节点
if(t!=NULL&&a=='n')
{
puts("要修改的值:");
scanf("%d",&t->num);
}
else if(t!=NULL&&a=='s')
{
puts("要修改的值:");
scanf("%f",&t->score);
}
else puts("节点不存在\n");
}
void delet(q *list,int n)
{
q *t=list,*in;
int i=0;
while(i<n&&t!=NULL)
{
in=t;
t=t->next;///t=n,in是n的上一个指针
i++;
}
if(t!=NULL)
{
in->next=t->next;///将in与n的下一个节点相连(跳过n)
free(t);///释放n节点的空间
}
else puts("节点不存在\n");
}
void insert(q *list,int n)///第n个节点之后插入
{
q *t=list,*in;
int i=0;
while(i<n&&t!=NULL)
{
t=t->next;
i++;
}
if(t!=NULL)
{
in=(q*)malloc(sizeof(q));
puts("要插入的值:");
scanf("%d",&in->num);
scanf("%f",&in->score);
in->next=t->next;///将in与n的下一个节点相连(跳过n)
t->next=in;
}
else puts("节点不存在\n");
}
int main()
{
q *p,*head;
p=creat(3);
head=p;
while(p->next !=NULL)///注意头指针没有任何数值
{
p=p->next;
printf("%d %5.1f\n",p->num,p->score);
}
putchar(10);
p=head;
change(p,1,'s');
while(p->next !=NULL)///注意头指针没有任何数值
{
p=p->next;
printf("%d %5.1f\n",p->num,p->score);
}
putchar(10);
p=head;
delet(p,1);
while(p->next !=NULL)///注意头指针没有任何数值
{
p=p->next;
printf("%d %5.1f\n",p->num,p->score);
}
putchar(10);
p=head;
insert(p,2);
while(p->next !=NULL)///注意头指针没有任何数值
{
p=p->next;
printf("%d %5.1f\n",p->num,p->score);
}
putchar(10);
return 0;
}
来源:CSDN
作者:夷则九
链接:https://blog.csdn.net/weixin_45719073/article/details/103709633