JavaScript数据结构之单链表和循环链表实例分享

互联网 18-1-5
本文主要介绍了JavaScript数据结构之单链表、循环链表,详细的介绍了JavaScript如何实现单链表、循环链表,有兴趣的可以了解一下,希望能帮助到大家。

进入正题,关于链表的数据结构知识,这里简单介绍下:

链表的优点和缺点同样明显。和线性表相比,链表在添加和删除节点上的效率更高,因为其只需要修改指针信息即可完成操作,而不像线性表(数组)那样需要移动元素。同样的,链表的长度在理论上也是无限的(在存储器容量范围内),并可以动态变化长度,相比线性表优势很大。 相应的,由于线性表无法随机访问节点,只能通过指针顺着链表进行遍历查询来访问,故其访问数据元素的效率比较低。

这里面封装了的常用方法及描述:

方法描述
append(element) 向链表尾部添加结点element
insert(position,element) 向位置position处插入结点element
removeAt(position) 按照索引值position删除结点
remove(element) 搜索并删除给定结点element
remove() 删除链表中最后一个结点
indexOf(element)查找并返回给定结点element的索引值
isEmpty() 判断链表是否为空
size() 获取链表长度
toString() 转换为字符串输出
getHead()获取头结点
getTail() 获取尾结点

对于各常用方法的算法描述在这里就不写了,相信大家都可以轻易读懂并理解,毕竟都是非常基础的知识了。

function LinkedList(){    /*节点定义*/    var Node = function(element){     this.element = element; //存放节点内容     this.next = null; //指针    }       var length = 0, //存放链表长度     head = null; //头指针       this.append = function(element){     var node = new Node(element),      current; //操作所用指针        if (!head){      head = node;     }else {      current = head;         while(current.next){       current = current.next;      }         current.next = node;     }        length++;     return true;    };       this.insert = function(position, element){     if (position >= 0 && position <= length) {      var node = new Node(element),       current = head,       previous,       index = 0;         if(position === 0){       node.next = current;       head = node;      }else{       while(index++ < position){        previous = current;        current = current.next;       }       node.next = current;       previous.next = node;      }         length++;      return true;     }else{      return false;     }     };       this.removeAt = function(position){     if(position > -1 && position < length){      var current = head,       previous,       index = 0;         if (position === 0) {          head = current.next;         }else{          while (index++ < position){        previous = current;        current = current.next;       }          previous.next = current.next;      };         length--;      return current.element;     }else{      return null;     }    };       this.remove = function(element){     var current = head,      previous;        if(element === current.element){      head = current.next;      length--;      return true;     }     previous = current;     current = current.next;        while(current){      if(element === current.element){       previous.next = current.next;       length--;       return true;      }else{       previous = current;       current = current.next;      }     }     return false;    };       this.remove = function(){     if(length < 1){      return false;     }        var current = head,     previous;        if(length == 1){      head = null;      length--;      return current.element;     }            while(current.next !== null){      previous = current;      current = current.next;     }        previous.next = null;     length--;     return current.element;    };       this.indexOf = function(element){     var current = head,      index = 0;        while(current){      if(element === current.element){       return index;      }      index++;      current = current.next;     }        return false;    };       this.isEmpty = function(){     return length === 0;    };       this.size = function(){     return length;    };       this.toString = function(){     var current = head,      string = '';        while(current){      string += current.element;      current = current.next;     }     return string;    };        this.getHead = function(){     return head;    }       }
function CircularLinkedList(){    var Node = function(element){     this.element = element;     this.next = null;    }       var length = 0,     head = null;       this.append = function(element){     var node = new Node(element),      current;        if (!head) {      head = node;      node.next = head;     }else{      current = head;         while(current.next !== head){       current = current.next;      }         current.next = node;      node.next = head;     };        length++;     return true;    };       this.insert = function(position, element){     if(position > -1 && position < length){      var node = new Node(element),       index = 0,       current = head,       previous;            if (position === 0) {          node.next = head;       head = node;         }else{          while(index++ < position){        previous = current;        current = current.next;       }          previous.next = node;       node.next = current;         };         length++;      return true;     }else{      return false;     }    };       this.removeAt = function(position){     if(position > -1 && position < length){      var current = head,       previous,       index = 0;         if (position === 0) {          head = current.next;         }else{          while (index++ < position){        previous = current;        current = current.next;       }          previous.next = current.next;      };         length--;      return current.element;     }else{      return null;     }    };       this.remove = function (element){     var current = head,      previous,      indexCheck = 0;        while(current && indexCheck < length){      if(current.element === element){       if(indexCheck == 0){        head = current.next;        length--;        return true;       }else{        previous.next = current.next;        length--;        return true;       }      }else{       previous = current;       current = current.next;       indexCheck++;      }     }     return false;    };       this.remove = function(){     if(length === 0){      return false;     }        var current = head,      previous,      indexCheck = 0;        if(length === 1){      head = null;      length--;      return current.element;     }        while(indexCheck++ < length){      previous = current;      current = current.next;     }     previous.next = head;     length--;     return current.element;    };       this.indexOf = function(element){     var current = head,      index = 0;        while(current && index < length){      if(current.element === element){       return index;      }else{       index++;       current = current.next;      }     }     return false;    };          this.isEmpty = function(){     return length === 0;    };       this.size = function(){     return length;    };       this.toString = function(){     var current = head,      string = '',      indexCheck = 0;        while(current && indexCheck < length){      string += current.element;      current = current.next;      indexCheck++;     }        return string;    };       }

相关推荐:

JavaScript数据结构中双向链表的使用定义的示例

JavaScript数据结构中优先队列与循环队列

JavaScript数据结构之二叉查找树的定义与表示方法详解

以上就是JavaScript数据结构之单链表和循环链表实例分享的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: js
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信小程序实现动态设置页面标题方法分享

相关资讯