数据结构与算法---动态链表(2)链栈,双端链栈,单向循环链表

本文详细介绍了数据结构中的链式存储,包括链栈的实现,双端链栈的概念及操作,以及单向循环链表的创建与操作。内容涵盖链栈的进栈、弹栈、查看栈顶元素和清空,以及单向循环链表的插入、删除、查找和修改元素等操作。通过实例解析了各种链表结构的逻辑和代码实现。
摘要由CSDN通过智能技术生成
  1. 栈的链式存储结构—基于链表实现
    其原理和顺序栈是一样的
    在这里插入图片描述在这里插入图片描述
  2. 双端链栈
    我们让左边的头指针直接连到右边的头指针
    在这里插入图片描述所以单纯的链表就无法实现,我们要重新来写他的底层实现
    双端链栈同样是由结点组成的,所以也有结点内部类
    在这里插入图片描述由上图我们可以看到双端链有自己的左结点,右结点,同样也有自己的size
    在这里插入图片描述得到有效个数–分左右进行(总的个数等于左右两变有效元素之和)
    在这里插入图片描述判空–分左右两边进行
    在这里插入图片描述如上图,左边为空则表明他的下一跳是right,而右边为空则是右边的下一跳为空
    在这里插入图片描述进栈–分左右
    左边:先将要进来的元素e用结点n来封装起来,然后将元素赋给结点n的数据域,让左节点的下一跳直接赋给n的下一跳,在把n的地址赋给左结点的下一跳(右边同理)
    最后如果左边的数量小于右边的数量,则元素进左边,反之同理。
    在这里插入图片描述弹栈–分左右
    在这里插入图片描述1.先判断是否为空
    2.记录需要弹栈的元素
    3.将左结点的下一跳的下一跳赋给左结点的下一跳,左边有效个数减减,最后返回元素(右边同理)
    在这里插入图片描述查看栈顶元素–分左右
    在这里插入图片描述清空–分左右
    在这里插入图片描述
  3. 单项循环链表
    将单链表中尾结点的指针有空改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表(采用真实头结点来解决
    只有一个元素时的状况
    在这里插入图片描述尾插一个元素–将尾的下一跳赋给新元素的下一跳,新元素的地址给当前尾的下一跳,然后尾往后移。
    在这里插入图片描述此时在头插一个元素–让尾的下一跳指向新元素,将新元素的下一跳指向头,然后头指向新元素在这里插入图片描述删除头元素-让尾巴的下一跳指向头的下一跳,头向后移
    在这里插入图片描述删除尾元素–找尾的前一个,让当前尾的下一跳赋给前一个元素的下一跳,尾再往前移
    在这里插入图片描述它同样是基于列表实现的,右Node这个内部类
    在这里插入图片描述初始化成员变量
    采用真实头结点,所以在最开始的时候元素为零,head和rear的值都为空在这里插入图片描述添加元素
    1.首先判断收入的角标是否合理
    2.用节点将元素封装,判断此时链表的状态
    3.空表状态—元素进来之后,头和尾都指向新元素,尾的下一跳指向头
    头插—让尾的下一跳指向新元素,将新元素的下一跳指向头,然后头指向新元素
    尾插—找尾的前一个,让当前尾的下一跳赋给前一个元素的下一跳,尾再往前移
    中间情况—在角标为三的位置插入元素
    在这里插入图片描述首先我们从头开始遍历,找到他的前一个元素,然后将角标2的下一跳给新元素的下一跳,将新元素的地址给角标2的下一跳。
    实现代码如下:
    在这里插入图片描述在这里插入图片描述得到角标处的元素
    1.首先判断链表是否为空
    2.角标是否合理
    3.根据角标的位置来特殊处理
    在这里插入图片描述修改指定角标的元素
    1.判断是否为空
    2.判断角标是否越界
    3.若能找到,则直接修改数据域为e
    在这里插入图片描述查找是否有e这个元素
    在这里插入图片描述删除指定角标处的元素
    1.判断是否为空
    2.判断是否角标越界
    3.特殊情况如果只剩最后一个元素,则头和尾就都为空然后size–;
    4.如果删尾(index = = size-1)–找尾的前一个,让当前尾的下一跳赋给前一个元素的下一跳,尾再往前移
    5.删头----让尾巴的下一跳指向头的下一跳,头向后移
    6.删除中间–找到他的前一个元素,让删除元素的下一跳给他前一个元素的下一跳
    在这里插入图片描述在这里插入图片描述删除特定的元素
    在这里插入图片描述清空
    在这里插入图片描述迭代器
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值