单链表的九种基本操作(2021.5)

本文介绍了单链表的九种基本操作,包括定义单链表节点、初始化头结点、数据插入(头插法和尾插法)、遍历、获取表长、判断链表是否为空、查找元素、删除指定值结点和删除指定位置结点。详细阐述了每种操作的实现步骤和注意事项,特别强调了内存管理和尾指针的更新。
摘要由CSDN通过智能技术生成

1. 定义单链表结点Node:

    单链表的结点由数据域和指针域共同构成, 数据域负责存储当前结点的数据信息, 指针域负责存储其直接后继结点在内存中的地址信息.

/* 单链表结点的定义 */
struct Node
{
    short data;
    struct Node* next;
};

2. 初始化头结点:

[注]通过malloc函数申请内存空间不一定会成功, 要根据其返回值判断是否申请到需要的内存空间. 如果malloc函数返回一个非NULL的地址信息, 那么说明内存空间申请成功, 该地址就是已申请内存空间的起始地址; 如果malloc函数返回NULL, 那么说明没有申请到内存空间, 此时程序应另作处理. 另外, 在创建好头结点后, 令链表尾指针rear指向头结点, 即rear = head, 设置尾指针rear可极大地方便我们获取表尾元素的信息.

/* 创建头结点 */
short InitLinkList(struct Node* &head, struct Node* &rear)
{
    head = (struct Node*)malloc(sizeof(struct Node));
    if(head != NULL)
    {
        /* 头结点申请成功 */
        printf("头结点申请成功.\n");
        head -> data = 0;
        head -> next = NULL;
        rear = head;
        return 1;
    }
    else
    {
        printf("头结点申请失败.\n");
        return -1;
    }
}

3. 数据的插入(分为头插法和尾插法):

(1)尾插法:

    这里默认程序已创建好头结点. 申请一个新结点, 若结点申请成功, 先填充该结点的数据域, 之后令表尾结点的指针域存储新结点的地址信息, 接着令新结点的指针域为NULL(标识该结点目前为表尾结点), 最后令尾指针rear指向新的表尾结点(也就是新申请的这个结点), 并向主调函数返回1以示一切顺利. 如果结点申请失败, 直接向主调函数返回-1以示异常. 

/* 单链表的尾插法 */
short RearInsert(struct Node* &rear)
{
    struct Node *p = (struct Node*)malloc(sizeof(struct Node));
    if(p != NULL)
    {
        /* 结点空间申请成功 */
        scanf("%hd", &(p ->data));
        rear -> next = p;
        p -> next = NULL;
        rear = p;
        return 1;
    }
    else
    {
        /* 结点空间申请失败 */
        return -1;
    }
}

(2)头插法:  

    这里默认程序已创建好头结点. 首先令指针p指向表首结点, 再申请新结点并用指针N指向它. 接着如果结点申请成功, 在表非空的前提下, 令新结点的指针域存储原先表首结点的地址信息, 之后将头结点的指针域中的信息改为这个新申请结点的地址, 最后将数据信息填入新结点的数据域中, 并向

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值