`
blueion
  • 浏览: 40471 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JavaScript的Double Link List

阅读更多

双向链表:

 

 

 

doubleLink = function(){	
		this.head = null;
   		this.feild = null;
  		this.size= 0;
    	this.head = {};
        //return a empty double link list
   		this.head.next = this.head;
    	this.head.before = this.head;
    };
    
    doubleLink.prototype.isBefore =  function(a, b){
		//is a before b?
        var listItem = a;
        while (listItem != b) {
            listItem = listItem.next;
            if (listItem == this.head) {
                return false;
            }
        }
        return true;
    };
    
    doubleLink.prototype.insert = function(/*Object*/item,/*Object*/ targetItem,/*Boolen*/ before){

        if (!targetItem) {
            var listItem = this.head.next;
            if (listItem == this.head) {
                //insert first node
                this.head.next = item;
                this.head.before = item;
                item.before = this.head;
                item.next = this.head;
            }
            else {
                //insert node at the last position
                listItem = this.head.before;
                
                listItem.next = item;
                item.before = listItem;
                this.head.before = item;
                item.next = this.head;
            }
        }
        else {
            if (!before) {
                //insert after targetItem
                item.next = targetItem.next;
                item.next.before = item;
                targetItem.next = item;
                item.before = targetItem;
                
            }
            else {
                //insert before targetItem
                item.before = targetItem.before;
                item.before.next = item;
                targetItem.before = item;
                item.next = targetItem;
                
            }
        }
        this.size++;

    };
    doubleLink.prototype.remove = function(/*Object*/item){
    
        item.before.next = item.next;
        item.next.before = item.before;
        item.next = null;
		item.before = null;
        this.size--;
    };
    doubleLink.prototype.removeAll = function(){
        var listItem = this.head.next;
        while (listItem != this.head) {
			listItem.before = null;
            listItem = listItem.next;
			listItem.before.next = null;
        }
		listItem.before.next=null;
		this.head.next=this.head;
		this.head.before=this.head;
        this.size = 0;
    };
    
    doubleLink.prototype.size = function(){
        return this.size;
    };
	
    doubleLink.prototype.showAll = function(){
		//just for test.
        var position = 0;
        var str = '';
        var listItem = this.head.next;
        while (listItem != null) {
            str += position + ':' + listItem.node.id + ';';
            listItem = listItem.next;
            position++;
        }
        console.info('show all:' + str);
    };

//test double linklist

	 function start(){
	 	var ss0={};
		var ss1={};
		var ss2={};
		var ss3={};
		var list = new doubleLink();
		list.insert(ss0);
		list.insert(ss2);
		list.insert(ss3);
		list.insert(ss1);
		console.info(list.isBefore(ss3,ss1));
	 }
 
分享到:
评论

相关推荐

    blockchain_and_double_link_list:学习区块链和双链表

    区块链和双链表 学习区块链和双链表 谢谢michielmulders我通过michielmulders在这个中学到了区块链,还有一个不错的博客,我推荐这个

    Ajax+hibernate+struts实现无刷新的分页

    var link = $("<a href='javascript:void(0)' class='page-link' data-page-no='" + i + "'>" + i + "</a>"); if (i === currentPage) { link.addClass("active"); } pagination.append(link); } } ``` ### ...

    简单翻页代码

    .content_list{padding-bottom:30px!important;height:606px!important;} ``` 这里定义了背景色、字体大小等样式规则。 ### 总结 以上是对“简单翻页代码”的相关内容进行的详细分析。从文档类型定义到具体的HTML...

    LotusDomino学习笔记(400页涵盖代理和公式使用)

    1. 选取视图的列的内容 @Trim @DbColumn 6 2. 隐藏判断常用的命令 6 3. 判断当前用户是否是“某个组”的成员,然后来显示和隐藏 6 4. 在Lotus Domino 中显示图 6 ...122. Stop double form submissions 308

    Lotus Domino WEB详细 学习笔记

    Lotus Domino WEB 开发技术积累-DOC(313页) 1. 选取视图的列的内容 @Trim @DbColumn 6 2. 隐藏判断常用的命令 6 ...3. 判断当前用户是否是“某个组”的成员,然后来显示和...122. Stop double form submissions 308

    struts2图片上传并生成缩略图,展示缩略图点击显示大图

    List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { file = item.getFile(); fileContentType = item.getContentType(); fileFileName = item...

    mvc datagrid 支持分页功能

    <link href="~/Content/easyui/themes/material/easyui.css" rel="stylesheet" /> ~/Scripts/jquery.min.js"> ~/Scripts/easyui.min.js"> 数据表格" class="easyui-datagrid" style="width:100%;height:450px...

    CSS种针对浏览器兼容问题的解决方法

    list-style: none; margin: 0; padding: 0; } ``` #### 7. 透明度设置 在设置元素的透明度时,IE 和 Firefox 有不同的语法: ```css /* IE */ filter: progid:DXImageTransform.Microsoft.Alpha(style=0, ...

    LotusDomino学习笔记.doc

    Checkboxes in a list box - **实现方法**: 在列表框中添加复选框,并使用脚本来处理用户的输入。 #### 48. Formatting a Notes view in HTML table for WEB - **格式化方法**: 通过自定义视图的列公式或使用...

    JS学习笔记相关代码-测试代码

    javascript中(function($){...})(jQuery)写法是指的是是匿名函数。 function(arg){...}这也定义了一个匿名函数,参数为arg。 测试样例参见test/AnonymousFunction.html .navbar-fixed-top使导航条固定在顶部 Index...

    UE(官方下载)

    You can use the dialog to navigate to each instance by double-clicking on one of the result lines... Scripting Access to the Clipboard How to access the Clipboard using the integrated scripting ...

    BobBuilder_app

    Pages in a b+tree are usually implemented as a list or array of child pointers and so while finding and inserting a value is a O(log k) operation the process actually has to move children around in ...

    Selenium Python Bindings 2017年 新版 原版

    `DesiredCapabilities` 可以用来设置浏览器的特性,如是否启用 JavaScript、是否无头模式等: ```python capabilities = DesiredCapabilities.CHROME.copy() capabilities['acceptInsecureCerts'] = True ``` **...

    css开发字典

    - 在CSS中,`this`关键字可以表示当前元素,但更多是在JavaScript中使用。 **Inline(行内)** - 显示模式之一,元素与其他元素在同一行显示。 - 可以通过`display: inline`属性实现。 **Hidden(隐藏)** - 使...

    css-dictionary(CSS常用英语词汇详解)

    虽然不是CSS专用词汇,但在JavaScript等编程语言中使用广泛。 - **Fixed**: 固定定位。CSS中的`position:fixed`属性用于固定元素在视口中的位置,即使页面滚动也不会移动。 - **Four**: 四个。数量词,可用于描述CSS...

    IT java 面试题库

    `5.84d`是一个双精度(double)浮点数常量,而`float`类型的变量应该赋值为单精度(float)浮点数。正确的写法应该是`float t = (float) 5.84d;` 或者 `float t = 5.84f;`。 #### 三、运算符和表达式 1. **switch语句...

Global site tag (gtag.js) - Google Analytics