本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址。

写在前面

好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了。但幸运的是,你会JavaScript啊。我想说学好数据结构和基本算法并非是要我们必须要去书写,算法的工作有专业的职位专业的人来做,但是如果你希望走的更高,这些是必不可少的,比如你学习Redis,如果hashmap等相关结构的话,也只能停留在使用的层次上,永远和优化不能挂钩。我也是个一瓶子不满半瓶子晃悠,和希望快速成长的伙伴们共同加深印象,共同提高吧。

如果你对JavaScript OOP还不太了解的话,请移步这两篇分享:http://www.cnblogs.com/tdws/p/5947693.html    http://www.cnblogs.com/tdws/p/5944254.html

如果你希望学习redis的话,可以看下这个链接 http://www.cnblogs.com/tdws/tag/NoSql/

进入正题

链表是一种动态的数据结构,不同于数组的是,链表分配内存空间的灵活性,它不会像数组一样被分配一块连续的内存。当你想在数组的任意位置,插入一个新值的时候,必须对数组中的各个元素进行相应的位置移动才能达到目标,开销显然是很大的。然而链表的灵活性在于它的每个元素节点分为两部分,一部分是存储元素本身,另一部分是指向下一个节点元素的引用,也可以称为指针,当你要插入数据时,把上一个节点的向下指针指向新数据节点,新数据节点的向下指针指向原有数据。但是链表不像数组那样可以直接通过索引立刻定位,只能通过遍历。

图画的可能是乱了点,就是想突出一下,链表分配内存的动态性,你随时随地,都可以增加和删除,并且内存的不连续性和无索引性。我暂时给链表类定义如下几个方法

一个append追加元素,一个removeAt移除指定位置元素,一个insert在指定位置插入元素,toString输出元素,一个indexOf寻找指定元素的索引。先上代码吧:

    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);        //构造新的元素节点var current;if (head === null) {             //头节点为空时  当前结点作为头节点head = node;} else {current = head;              while (current.next) {          //遍历,直到节点的next为null时停止循环,当前节点为尾节点current = current.next;}current.next = node;            //将尾节点指向新的元素,新元素作为尾节点}           length++;                    //更新链表长度};this.removeAt = function (position) {if (position > -1 && position < length) {var current = head;var index = 0;var previous;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.insert = function (position, element) {if (position > -1 && position <= length) {        //校验边界var node = new Node(element);        current = head;var index = 0;var previous;if (position == 0) {                    //作为头节点,将新节点的next指向原有的头节点。node.next = current;head = node;                        //新节点赋值给头节点} else {while (index++ < position) {previous = current;current = current.next;}                                //遍历结束得到当前position所在的current节点,和上一个节点previous.next = node;                    //上一个节点的next指向新节点  新节点指向当前结点,可以参照上图来看node.next = current;}length++;return true;} else {return false;}};this.toString = function () {var current = head;var string = '';while (current) {string += ',' + current.element;current = current.next;}return string;};this.indexOf = function (element) {var current = head;var index = -1;while (current) {if (element === current.element) {            //从头节点开始遍历return index;}index++;current = current.next;}return -1;};this.getLength = function () {return length;}}

写在最后

接下来将将分享双向LinkedList和hashMap以便谈及redis数据类型以及一些基本算法。

如果我的点滴分享对您有点滴帮助。欢迎你为自己点赞,也为我点赞。也欢迎点击红色按钮长期关注,我将持续分享。

用JavaScript来实现链表LinkedList相关推荐

  1. 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue

    一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner;public class Main {public static class ...

  2. Java链表—— LinkedList

    ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低. 链表LinkedList和动态数组ArrayList 以下情况使用 ArrayList : 频 ...

  3. java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素

    Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...

  4. 4.链表LinkedList

    链表LinkedList 链表简介 链表是有序的列表,它在内存中的存储 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个 ...

  5. 3 链表(LinkedList)

    3 链表(LinkedList) 3.1 链表介绍 链表是以节点的方式来存储数据的 每一个节点包含data域和next域,next域存储的是下一个节点的内存地址 链表的各个节点在内存中并不一定是连续存 ...

  6. 【javascript】数据结构-链表

    // 创建一个链表 function LinkedList(){// 创建一个Node辅助类,表示需要加入列表的项,它包含一个element属性,即表示需要加入到列表中的值,next属性表示指向下一个 ...

  7. 链表用java实现简单单链表linkedlist

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 每个结点包括两个部分: 1是存储数据元素的数据域data 2是存储下一个结点地址的指针域p. 相 ...

  8. Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)

    在链表(LinkedList)的开头和结尾添加元素 import java.util.LinkedList;public class Main {public static void main(Str ...

  9. Python数据结构实战——单向链表(LinkedList)

    文章目录 1.定义结点类 2.定义链表类 2.1.打印整个链表 2.2.获取链表长度 2.3.链表头部插入元素 2.4.链表尾部插入元素 2.5.链表任意位置插入元素 2.6.链表任意位置删除元素 2 ...

最新文章

  1. 与其羡慕他人精彩,还不如设法活出自我
  2. python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作
  3. Jenkins自动化部署容器
  4. 使用Visual Studio 2013开发Python Django
  5. 通过镜像快速搭建本地yum源
  6. (原創) 這學期C++完美的Ending (C/C++) (日記)
  7. CAD制图初学入门如何提高CAD绘图效率?
  8. Spring源码解析(一)
  9. Ps图片文字处理与python多张图片合成
  10. SonarQube task ‘xxx‘ status is ‘PENDING‘
  11. coreldraw x7 分布_CDR X7新增功能有哪些,CDR X7新功能介绍
  12. Qt实现思维导图功能(一)
  13. 阿里巴巴2011公开赛1004 Level up HDU 3954 线段树
  14. yum是干什么的_yum 安装是什么
  15. 小白都能看得懂的ZBrush基础教学
  16. 解析压敏电阻与TVS管的性能对比,谁能更胜一筹?
  17. php 时间加法函数_PHP中时间加减函数strtotime用法分析
  18. Web开发项目 # 2048小游戏
  19. 第九天 PC端网页特效(轮播图制作)
  20. 前端那些你必须了解的知识点

热门文章

  1. HEOI2018游记
  2. 1、时间、FHS 学习笔记
  3. jQuery 图片高亮显示
  4. git 提交 merge请求 WIP
  5. mysql提示performance_schema缺表
  6. Windows 2008 远程登陆时提示要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限...
  7. 【转载】如果你身边有程序员的朋友,请善待他们
  8. 文件翻译002片:Process Monitor帮助文档(Part 2)
  9. linux 配置 java 环境变量
  10. 使用microsoft EnterpriseLibrary连接不同数据库简单应用 .