【JS数据结构与算法】单向链表的封装及其方法

目录

一、什么是链表?

二、链表的封装

三、追溯方法append(element)

四、toString()

五、inset(position, element)

六、get(position)

七、indexOf(element)

八、upDate(position, element)

九、removeAt(position)

十、remove(element)

十一、判断链表是否为空

十二、返回链表的长度


一、什么是链表?

        链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

二、链表的封装

function linkedList(){
      
      // 封装一个内部类
      function Node(data){
        this.data = data;
        this.next = null;
      }


      // 属性,声明一个链表头和链表的长度
      this.head = null;
      this.length = 0;
}

三、追溯方法append(element)

向链表尾部添加一个新的项。

linkedList.prototype.append = function(data){

        // 1、创建新节点
        var newNode = new Node(data);

        // 2、判断链表是否为空
        if(this.length == 0){ //2.1 链表为空
          this.head = newNode;
        }else{                 //2.2 链表不为空
          // 找到最后一个节点
          var current = this.head;
          while(current.next){
            current = current.next;
          }

          // 最后的节点的Next指向新的节点
          current.next = newNode;
        }

        // 3、长度要加1
        this.length += 1;
}

四、toString()

由于链表项使用了Node类,就需要重写继承自JavaScript对象默认的toString方法,让其只输出元素的值。

linkedList.prototype.toString = function(){
        // 1、先定义变量
        var current = this.head;
        var listString = '';

        // 将每次遍历的结果组成字符串
        while(current){
          listString += current.data + ' ';

          // 加完一个元素后,指向下一个元素
          current = current.next;
        }

        // 返回字符串
        return listString;
}

append方法与toString方法测试

      // 测试代码
      // 创建linkedList
      var list = new linkedList();

      list.append('a');
      list.append('b');
      list.append('c');
      list.append('d');
      
      alert(list); // a b c d

五、inset(position, element)

向队列的特定位置插入一个新的元素。

这种方法与append不同的是,在任何一个有效的地方插入一个元素,首先需要给定的参数是位置(position)和值(data)

1、利用原型,给整个类添加一个方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值