美文网首页
js写数据结构(1)单向链表

js写数据结构(1)单向链表

作者: strong9527 | 来源:发表于2016-08-31 21:04 被阅读70次

最近看到了一本书名字叫《学习Javascrit数据结构与算法》

看着手痒痒,把LinkedList类的定义拿出来,自己实现了接口方法。

本篇文章是数据结构的第一篇

单向链表的实现

自己只是简单测试,有错误请指出。

下面是书中给的构造函数的定义。


function LinkedList() {
    var Node = function(element){ 
      this.element = element;
      this.next = null;
    };
    var length = 0; 
    var head = null; // 此链表是没有头节点的列表。
    this.append = function(element){};
    this.insert = function(position, element){};
    this.removeAt = function(position){};
    this.remove = function(element){};
    this.indexOf = function(element){};
    this.isEmpty = function() {};
    this.size = function() {};
    this.toString = function(){};
    this.print = function(){};
}

接口说明:

  • append(element) :向列表尾部添加一个新的项。

  • insert(position, element) :向列表的特定位置插入一个新的项

  • remove(element) :从列表中移除一项。

  • indexOf(element) :返回元素在列表中的索引。如果列表中没有该元素则返回 -1

  • removeAt(position) :从列表的特定位置移除一项。

  • isEmpty() 如果链表中不包含任何元素返回 true 如果链表长度大于0则返回 false

  • size() :返回链表包含的元素个数。与数组的 length 属性类似。

  • toString() :由于列表项使用了 Node 类,就需要重写继承自JavaScript对象默认的

toString 方法,让其只输出元素的值。

function LinkedList() {
    var Node = function(element){ 
      this.element = element;
      this.next = null;
    };
    var length = 0; 
    var head = null; // 此链表是没有头节点的列表。
    this.append = function(element){
        var node = new Node(element);
        if( head == null ){
            head = node;
            length++;
        }else{
            var e = head ;
            for( var i = 0 ; i < length-1; i++ ){
                e = e.next;
            }
            e.next = node;
            length++;
        }
    };
    this.insert = function(position, element){  
        //position start at 0,not 1;
        var node = new Node(element);
        var e = head ;
        if( position == 0 ){
            node.next = e;
            head = node;
            length++;
            return;
        }
        else if( position <= length  ){  
            for( var i = 0 ; i < position - 1 ; i++ ){
                e = head.next;
            }
            node.next = e.next;
            e.next = node;
            length++;
            return;
        }
        else if( position > length ){
            console.log("所选位置超越链表长度,无法添加");
            return false;
        }
    };
    this.removeAt = function(position){
        if( position < 0 || position >= length ){
            console.log("position为非法数字,请输入正确数字。");
            return false;
        }
        else if( position == 0 ){
            head = head.next;
            length--;
        }else{
            var e = head;
            for( var i = 0 ; i < position - 1 ; i++ ){
                e = e.next;
            }
            e.next = e.next.next;
        }
    };
    this.remove = function(element){
        //删除指定内容
      var e = head;
      var j = 0;
      var index = this.indexOf(element);
      this.removeAt(index);
    };
    this.indexOf = function(element){
        var e = head;
        for( var i = 0 ; i < length; i++ ){
            if( e.element == element ){
                return i;
            }
            e = e.next;
        }
    };
    this.isEmpty = function() {
        if( length > 0 ){
            return false;
        }else{
            return true;
        }
    };
    this.size = function() {
        return length;
    };
    this.toString = function(){
        var e = head;
        while(true){
            console.log(e.element);
            e = e.next;
            if( e == null ){
                break;
            }
        }
    };
    this.print = function(position){   //返回指定位置元素
        var e = head;
        if( position < 0 || position > length){
            console.log("position为非法数字,请输入正确数字。");
            return false;
        }
        for( var i = 0 ; i < length ; i++){
            if( i == position){
                return e.element;
            }
        }
        e = e.next;
    };
}




相关文章

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • 2019-12-04 Java-LinkedList源码解读

    @TOC 1、链表数据结构 链表分为单向链表和双向链表,他们的区别在于,单向链表只能单向寻址,而双向链表可以双向寻...

  • js写数据结构(1)单向链表

    最近看到了一本书名字叫《学习Javascrit数据结构与算法》 看着手痒痒,把LinkedList类的定义拿出来,...

  • 单向链表的基本操作

    参考 一步一步写算法(之单向链表) 1. 单向链表的数据结构 2. 创建链表 3. 增加节点 4. 删除节点

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 用Java写单向链表

    数据结构—单向链表 为了巩固自己的基础知识,这次就用 Java 来写一个单向链表。问:什么是单向链表?首先链表是数...

  • 数据结构:单链表与双链表

    数据结构:单链表与双链表 如下图: 单向链表: 1,只能单向访问。从头到尾进行遍历,也就是说只能前进,不能后退。 ...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • 线性表-单向循环链表

    单向循环链表 单向循环链表示意图如下: 数据结构定义(同普通链表) 单向循环链表初始化与赋值 在上面循环遍历查找尾...

  • 数据结构——Golang实现单链表

    转载请注明出处:数据结构——Golang实现单链表 1. 单链表 1.1. 定义 单向链表(单链表)是链表的一种,...

网友评论

      本文标题:js写数据结构(1)单向链表

      本文链接:https://www.haomeiwen.com/subject/utkcettx.html