单链表的插入和删除

链表中节点类型的创建

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;
}
 

注意:看清函数调用使用得指针,每次完成操作之后,需要对次指针完成初始化;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值