`

数据结构与算法-循环链表(js实现)

阅读更多

循环链表和单向链表很相似,唯一的区别是,循环链表的尾节点是指向头节点的,例如下面这样的结构

可以将其理解为一个环形结构,没有头没有尾,很适合做一些无限循环的东西,比如轮播图

循环链表的代码实现

我们只需要在单向链表的基础上稍加改造即可完成循环链表的实现(点击进入单向链表的实现详解)

 

    /************节点*************/
    function Node(element) {
        this.element = element;//当前节点的数据
        this.next = null;//下一个节点数据
    }

    /*************************链表*****************************/
    function LList() {
        this.head = new Node("head");//头节点
        this.head.next=this.head;//注意这里
    }
    LList.prototype={
        //查找某一节点
        find:function (item) {
            var currNode = this.head;
            while (currNode.element != item) {
                currNode = currNode.next;
                if (currNode==this.head)return null;
            }
            return currNode;
        },
        //查找尾节点
        findLast:function(){
            var currNode = this.head;
            while (!(currNode.next == this.head)) {
                currNode = currNode.next;
            }
            return currNode;
        },
        //向某一元素后面插入新节点
        insert:function(newElement,item){
            var newNode = new Node(newElement);
            var current = this.find(item)||this.findLast();//默认插入到尾部
            newNode.next = current.next;
            current.next = newNode;
        },
        //查找某一节点的前一个节点(前驱)
        findPrevious:function(item){
            var currNode = this.head;
            while (!(currNode.next == this.head) &&(currNode.next.element != item)) {
                currNode = currNode.next;
            }
            return currNode;
        },
        //删除某一个节点
        remove:function(item){
            var prevNode = this.findPrevious(item);
            if (!(prevNode.next == this.head)) {//不能删除头
                prevNode.next = prevNode.next.next;
            }
        },
        //修改某一节点的数据
        edit:function(item,newItem){
            var element=this.find(item);
            element.element=newItem;
        },
        //在控制台打印出所有节点(为了方便预览)
        display:function(){
            var currNode = this.head;
            while (!(currNode.next == this.head)) {
                console.log(currNode.next.element);
                currNode = currNode.next;
            }
        }
    }
测试
   插入四个节点

 

var lkk=new LList;
lkk.insert("likek");
lkk.insert("zhangsan");
lkk.insert("lisi","zhangsan");//指定插入位置
lkk.insert("haha");
  查看当前所有节点的情况
lkk.display();
/*likek
zhangsan
lisi
haha*/
 删除节点
lkk.remove("zhangsan");
lkk.display();
/*likek
lisi
haha*/
  • 大小: 22.9 KB
  • 大小: 21.1 KB
分享到:
评论

相关推荐

    JavaScript数据结构之单链表和循环链表

    在深入了解JavaScript中的单链表和循环链表的实现之前,我们需要先了解数据结构的基本概念。数据结构是计算机存储、组织数据的方式,它有助于更高效地访问和修改数据。数据结构分为线性和非线性两大类,而链表属于非...

    数据结构与算法(Java版-英文)

    《数据结构与算法(Java版-英文)》一书由Robert Lafore撰写,是一本针对数据结构和算法的深入解析指南,特别适用于那些已经掌握基本编程技能并希望进一步提升自己在数据处理方面能力的读者。本书采用Java语言作为...

    Java-C-JS数据结构与算法合集

    《Java-C-JS数据结构与算法合集》是针对编程领域的三大主流语言——Java、C和JavaScript,深入探讨数据结构与算法的宝贵资源。数据结构是计算机存储、组织数据的方式,而算法是解决问题的精确步骤,它们是软件开发的...

    JavaScript版 数据结构与算法

    原理讲解 8-2 循环队列-代码实操 8-3 任务队列-原理讲解 8-4 任务队列-代码实操 第9章 数据结构之“链表”链表是一个有序的线性数据结构,对于它而言排序和循环是最基本的两项技能,这个章节从零是实现链表结构到...

    数据结构与算法javascript描述

    《数据结构与算法JavaScript描述》是一本深入探讨计算机科学核心概念——数据结构和算法的书籍,特别使用JavaScript作为实现语言。这本书是图灵程序设计丛书中的一部,旨在帮助读者理解并掌握如何用动态且直观的方式...

    数据结构与算法javascript学习代码实现.zip

    这份“数据结构与算法javascript学习代码实现.zip”压缩包,显然是为了帮助大学生或自学者深入理解数据结构并实践相关的算法。 首先,我们要了解数据结构是什么。数据结构是指一组数据的存储结构,它可以是数组、...

    数据结构-使用javascript讲解数据结构之链表.zip

    本资料包“数据结构-使用javascript讲解数据结构之链表.zip”将深入探讨链表的概念、实现以及其在JavaScript中的应用。 链表不同于数组,数组是连续的内存空间,而链表的元素在内存中是非连续存储的。每个元素称为...

    数据结构和算法解释并用JavaScript实现

    amejiarosario-dsa.js-data-structures-algorithms-javascript-4685f4c这个压缩包很可能包含了上述数据结构和算法的JavaScript实现源码,供学习者参考和实践。通过阅读和理解这些代码,开发者可以加深对数据结构和...

    10.数据结构与算法javascript1

    数据结构与算法是计算机科学的基础,对于任何编程语言来说,理解和掌握它们都是至关重要的,特别是对于JavaScript这样的通用语言,由于其在服务器端编程中的广泛应用,理解数据结构与算法更是不可或缺。本书《数据...

    通过JavaScript来封装实现常见的数据结构与算法.zip

    这个压缩包文件“通过JavaScript来封装实现常见的数据结构与算法.zip”显然是一个学习资源,它可能包含了多种常见数据结构(如数组、链表、栈、队列、树等)以及算法(如排序、搜索、图算法等)的JavaScript实现。...

    数据结构与算法JavaScript描述 1

    在数据结构方面,JavaScript的数组和对象(关联数组)是最基础的数据结构,而链表、栈、队列、树等复杂数据结构可以通过这些基础结构来实现。在算法部分,排序(如冒泡排序、快速排序)、查找(如线性查找、二分查找...

    JavaScript数据结构之双向链表和双向循环链表的实现

    在JavaScript中,数据结构是构建复杂程序的基础,其中双向链表和双向循环链表是两种重要的线性数据结构。本文将深入探讨这两种链表的实现原理,并通过代码示例进行详细解析。 首先,双向链表(Doubly Linked List)...

    有序链表合并算法动态演示系统的毕业设计文档及系统 JAVA

    有序链表合并算法是计算机科学中的一个重要概念,特别是在数据结构和算法分析中。这个算法的主要目的是将两个或多个已排序的链表合并成一个单一的、有序的链表。在本毕业设计中,该算法被动态地演示,使得学生能够更...

    从 0 到 1 学习 JavaScript 数据结构与算法.zip

    JavaScript 数据结构与算法是编程学习中的重要组成部分,尤其对于提升编程效率和代码质量至关重要。在JavaScript这门动态类型的脚本语言中,理解并熟练运用数据结构和算法能帮助开发者更好地解决复杂问题。在这个"从...

    JavaScript中数据结构与算法(三):链表

    链表是一种重要的数据结构,它在计算机科学中广泛应用于各种算法和数据结构的实现。相对于数组,链表在处理动态数据变化时具有显著优势。在JavaScript中,由于数组的优化,如快速的push、pop、shift和unshift等操作...

    数据结构与算法.rar

    数据结构与算法是计算机科学的基础,对于任何编程领域,尤其是前端开发来说,它们都是不可或缺的知识。数据结构是指在计算机中组织和存储数据的方式,而算法则是解决特定问题的步骤或指令集。理解并掌握这些概念可以...

    数据结构与算法(JAVA语言版)-2.docx

    ### 数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**: - Java语言规定所有变量在使用之前必须明确其类型。Java具备八种基本的数据类型,分为四类...

    JS算法数据结构精华集

    本资源包"JavaScript-Algorithms-master"就是针对这一需求,收集了一系列用 JavaScript 实现的算法和数据结构实例,旨在帮助开发者巩固基础,提升技能。 **一、数据结构** 数据结构是组织和存储数据的方式,它决定...

Global site tag (gtag.js) - Google Analytics