链表中节点类型的创建
struct STU//此类型的名称
{
int number;
float score;
struct STU *next;//数据类型中的指针域
};
主函数的步骤
1.创建链表
struct STU st,*p,*head,*tail,*s;
p=(struct STU *)malloc(sizeof (struct STU));
head=p;
tail=p;
创建链表时初始化指针;
2.输入次链表每个节点中的数据
for(i=0;i<n;i++)
{
p=(struct STU *)malloc(sizeof (struct STU));
printf("请输入%d个同学的信息:",i+1);
scanf("%d %f",&p->number,&p->score);
tail->next=p;
tail=p;
}
tail->next=NULL;
3.进行次函数插入和删除的调用
p=head->next;//(初始化作用 将上方调用的p指针回归到头结点的地址域)
insert(p,head);//(插入位置p指针之后的一个结点)
delete_a(p,head);//(删除p指针所指向的结点)
下面看次函数的编写(不考虑超出链表等报错情况)
删除函数
void delete_a(STU *p,STU *head)
{
int i=1,j=3;
struct STU *s;
s=head->next;
while(i<(j-1))
{
s=s->next;
i++;
}
i=1;//(i在第一个while语句已经使用过,有值)
while(i<j)
{
p=p->next;
i++;
}
//p=s->next;
s->next=p->next;//(删除p指针所指向的结点,所以先把要删除结点的next域赋值给前一个结点)
free(p);
p=head->next;
}
插入函数
void insert(STU *p,STU *head)
{
int j=1,i=3;
struct STU *s;
while(j<i)
{
p=p->next;
j++;
}
s=(struct STU *)malloc(sizeof (struct STU));
scanf("%d %f",&s->number,&s->score);
s->next=p->next;
p->next=s;
p=head->next;
}
注意:看清函数调用使用得指针,每次完成操作之后,需要对次指针完成初始化;