数据库DAY4-链表

本文介绍了如何在单链表中实现任意位置的删除、修改和查找操作。删除操作通过找到目标位置的前一个节点来断开链表;修改操作是定位到指定位置的节点并更新其数据域;查找操作则是输出给定位置节点的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1单链表任意位置删除
思路:
判断头结点是否存在
判断删除位置是否合法
找到pos-1位置起名字p
删除p结点后面的结点

main.c
// 按任意位置删除
    printf("\n请输入要删除的位置:");
    scanf("%d", &pos);
    delete_by_pos(L, pos);
    printf("按任意位置删除后的数据\n");
    Out(L);
test.c
// 按任意位置删除
int delete_by_pos(Linklist L, int pos)
{
    // 1.判断头节点是否存在
    // 2.判断链表是否为空
    if (L == NULL || L->len == 0)
    {
        printf("删除失败\n");
        return -1;
    }

    // 找到pos-1位置起名字p
    Linklist p = L;

    for (int i = 0; i < pos - 1; i++)
    {
        p = p->next; // 移动p的位置
    }

    // 删除p结点后面的结点
    Linklist N = p->next;
    p->next = N->next;
    free(N);
    N = NULL; // 防止野指针
    L->len--;
    return 0;
}
2单链表任意位置修改
思路:
判断头结点是否存在
判断修改位置是否合法找到pos位置起名字p
修改p结点的数据域【赋值】

main.c
  // 按任意位置修改
    printf("\n请输入要修改值的下标:");
    scanf("%d", &pos);
    printf("请输入要修改的值:");
    scanf("%s", e);
    revamp_by_pos(L, pos, e);
    printf("按任意位置修改后的数据\n");
    Out(L);
test.c
// 按任意位置修改
int revamp_by_pos(Linklist L, int pos, datetype e)
{
    // 1.判断头节点是否存在
    // 2.判断链表是否为空
    if (L == NULL || L->len == 0)
    {
        printf("修改失败\n");
        return -1;
    }

    // 找到pos位置起名字p
    Linklist p = L;
    for (int i = 0; i < pos; i++)
    {
        p = p->next;
    }

    // 修改p结点的数据域【赋值】
    strcpy(p->date, e);

    return 0;
}

3单链表任意位置查找
思路:
判断头结点是否存在
判断查找位置是否合法找到pos位置起名字p
查找p结点的数据域【输出】
main.c
    // 按任意位置搜索
    printf("\n请输入想要查找的下标:");
    scanf("%d", &pos);
    find_by_pos(L, pos);
    // printf("%d下标对应的值是%d", pos, flag);

test.c
// 按任意位置搜索
int find_by_pos(Linklist L, int pos)
{
    // 1.判断头节点是否存在
    // 2.判断链表是否为空
    if (L == NULL || L->len == 0)
    {
        printf("查找失败\n");
        return -1;
    }

    // 找到pos位置起名字p
    Linklist p = L;
    for (int i = 0; i < pos; i++)
    {
        p = p->next;
    }

    // 查找p结点的数据域【输出】
    printf("%d下标对应的值是%s\n", pos, p->date);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值