数据结构与算法 — 初识链表、链表的常见操作及实现

本文介绍了链表的基本概念,对比了链表与数组的优缺点。详细讲解了链表的封装,包括Node类的设计,以及链表的常用操作如append、insert、get、indexOf、update、removeAt、remove、isEmpty、size和toString方法的实现细节。
摘要由CSDN通过智能技术生成

目录

一、初识链表

二、封装链表结构

三、链表常见操作及实现

  1.链表中常见的操作

  2.append()方法

  3.toString()方法

  4.insert()方法

  5.get()方法

  6.indexOf()方法

  7.update()方法

  8.removeAt()方法

  9.remove()方法 

  10.isEmpty()方法

  11.size()方法


一、初识链表

        链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同。

        数组的创建通常需要申请一段连续的内存空间(一整块的内存),并且大小是固定的,所以当当前数组不能满足容量需求时,需要扩容(一般情况下是申请一个更大的数组,比如2倍大的数组,然后将原数组中的元素复制过去)。而且在数组开头或中间位置插入数据的成本是很高的,需要进行大量的位移。

        要存储多个元素,另一个选择就是链表。链表中的元素在内存中不必是连续的空间。链表的每一个元素由一个存储元素本身的节点一个指向下一个元素的引用组成。

 

相对于数组,链表有一些优点

  • 内存空间不是必须连续的,可以充分利用计算机的内存,实现灵活的内存动态管理
  • 链表不必在创建时就确定大小,并且大小可以无限延伸下去
  • 链表在插入删除数据时,时间复杂度可以达到O(1),相对数组效率高很多

相对于数组,链表也有一些缺点: 

  • 链表访问任何一个位置的元素时,都需要从头开始访问,无法跳过第一个元素访问任何一个元素
  • 无法通过下标直接访问元素,需要从头一个个访问,直到找到对应的元素

链表结构如下图所示:

二、封装链表结构

        //封装链表类
        function LinkedList() {
            //内部的类:节点类
            function Node(data) {
                this.data = data
                this.next = null
            }

            //属性
            this.head = null
            this.length = 0
        }

封装LinkedList的类,用于表示链表结构。该类中有一个Node类,用于封装每一个节点上的信息(和优先级队列的封装一样)。链表中保存两个属性,一个是链表的长度,一个是链表中第一个节点。 

三、链表常见操作及实现

  1.链表中常见的操作

  • append (element): 向列表尾部添加一个新的项
  • insert (position, element):向列表的特定位置插入一个新的项。
  • get (position): 获取对应位置的元素
  • indexOf (element):返回元素在列表中的索引,如果列表中没有该元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值