首頁  >  文章  >  web前端  >  js單向鍊錶的具體實作實例_javascript技巧

js單向鍊錶的具體實作實例_javascript技巧

WBOY
WBOY原創
2016-05-16 17:31:531066瀏覽

複製程式碼 程式碼如下:

function linkNode(_key, _value)
{
    ///
    /// 鍊錶類別的節點類別
  > this.Key = _key;
    this.Value = _value;
    this.next = null;
}
function Link()
{
    ///
    /// 建立一個鍊錶類別
    ///

    this.root = new linkNode(null, null); //root永遠是空節點
   ;
}
Link.prototype =
{
    count: 0,
    value: function (_key)        ///

        ///
        /// 對應的value的值        while (Boolean(i = i.next))
        {
            return i.Value;
        }
    },
    add: function (_key, _value)
    {
        ///
///
        /// key的值
        /// "Object">
        /// value的值
        ///
      
        ///
        var i = this.root;
                if (i.Key == _key)
                return i.Value = _value;
        }            this.root.next = node ;
        else
            this.end.next = node;
           return _value;
    },
    insert: function (_key, node)
    {
        ///
        /// 从链表类的某节点之后插入新节点node.
        ///

        ///
        /// 在键值等于_key的元素之后插入
        ///
        ///
        /// 要插入的元素
        ///
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.Key == _key)
            {
                var tmp = i.next;
                i.next = node;
                node.next = tmp;
                break;
            }
        }
    },
    insertBefore: function (_key, node)
    {
        ///
        /// 从链表类的某节点之后插入新节点node.
        ///

        ///
        /// 在键值等于_key的元素之后插入
        ///
        ///
        /// 要插入的元素 www.jb51.net
        ///
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.next.Key == _key)
            {
                var tmp = i.next;
                i.next = node;
                node.next = tmp;
                break;
            }
        }
    },
    remove: function (_key)
    {
        ///
        /// 从链表类中移除一个key
        ///

        ///
        /// key的值
        ///
        var i = this.root;
        do
        {
            if (i.next.Key == _key)
            {
                if (i.next.next == null)
                    this.end = i;
                i.next = i.next.next;

                this.count--;
                  } while (Boolean(i = i.next))
    },
    exists: function (_key)
{
        ///


        /// 檢視鍊錶類別是否有一個key
     String">
        /// key的值
        ///
              var i = this.root;
        while (Boolean(i = i.next))
           
        return false;
    },
    removeAll: function ()
    {
        ///
            this.root = new linkNode(null , null);
        this.end = this.root;
        this.count = 0;
   },        {
            return "";
         if (typeof o == "string")
            return """ o.replace( /(["\])/g, "\$1").replace(/(n)/g, "\n").replace(/(r)/g, "\r").replace(/( t)/g, "\t") """;
        if (typeof o == "object")
        {                for ( var i in o)
                    r.push(""" i "":" this.Obj2str(o in() "}";
            }
            else
       i = 0; i                     r.push(this.Obj2str( "[" r.join() "]";
            }
           .replace(/":/g, '":""' );
    },
    getJSON: function ()
    {
        ///
        /// 转换成JSON字符串
        ///

        ///
        ///

        //内部方法,用于递归
        var me = this;
        var getChild = function (node)
        {
            var str = "";
            str += "{\"Key\":\"" + node.Key + "\",\"Value\":" + me.Obj2str(node.Value);
            if (node.next != null)
                str += ",\"next\":" + getChild(node.next);
            else
                str += ",\"next\":\"null\"";
            str += "}";
            return str;
        };
        var link = "{\"root\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":";
        if (this.count == 0)//如果空表
        {
            return "{\"root\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":\"null\"},\"end\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":\"null\"},\"count\":\"0\"}";
        }
        link += getChild(this.root.next) + "}";
        //加上end
        link += ",\"end\":{\"Key\":\"" + this.end.Key + "\",\"Value\":" + me.Obj2str(this.end.Value) + ",\"next\":\"null\"";
        link += "},\"count\":\"" + this.count + "\"}";
        return link;
    },
    getArrayJSON: function ()
    {
        ///
        /// 转所有节点的value换成JSON字符串,数组格式
        ///

        ///
        ///

        var link = "{\"link\":[";
        var i = this.root;
        while (Boolean(i = i.next))
        {
            link += this.Obj2str(i.Value) + ",";
        }
        link = link.substr(0, link.length - 1);
        link += "]}";
        return link;
    },
    sort: function (fn)
    {
        ///
        /// 对链表进行排序
        ///

        ///
        /// 比较两个链表元素大小的方法,当返回真时,此方法的参数所指的节点将往下沉
        ///
        if (fn != null)
        {

var i = this.root;
while (Boolean(i = i.next))
{
var j = this.root;
while (ブール(j = j.next ))
{
if (j.next != null)
{
if (fn.call(this 、 j))
{
var Key = j.Key;
var Value = j.Value;
j.Key = j.next.Key;
j.Value = j .next.Value;
j.next.Key = キー;
j.next.Value = Value;
}
}
}
this.end = i;
}

}
else
{

}
}
};

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn