麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

js單向鏈表的具體實現實例

2019-11-20 22:38:06
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

function linkNode(_key, _value)
{
    /// <summary>
    /// 鏈表類的節點類
    /// </summary>
    this.Key = _key;
    this.Value = _value;
    this.next = null;
}
function Link()
{
    /// <summary>
    /// 創建一個鏈表類
    /// </summary>
    this.root = new linkNode(null, null); //root永遠是個空節點
    this.end = this.root;
}
Link.prototype =
{
    count: 0,
    value: function (_key)
    {
        /// <summary>
        /// 根據key的值來獲取value值
        /// </summary>
        /// <param name="_key" type="String">
        /// key的值
        /// </param>
        /// <returns type="Object">
        /// 對應的value的值
        /// </returns>
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.Key == _key)
                return i.Value;
        }
    },
    add: function (_key, _value)
    {
        /// <summary>
        /// 往鏈表的尾部中加入一個節點
        /// </summary>
        /// <param name="_key" type="String">
        /// key的值
        /// </param>
        /// <param name="_value" type="Object">
        /// value的值
        /// </param>
        /// <returns type="Object">
        /// 返回新增加的value的值
        /// </returns>
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.Key == _key)
                return i.Value = _value;
        }
        var node = new linkNode(_key, _value);
        if (this.count == 0)
            this.root.next = node;
        else
            this.end.next = node;
        this.end = node;
        this.count++;
        return _value;
    },
    insert: function (_key, node)
    {
        /// <summary>
        /// 從鏈表類的某節點之后插入新節點node.
        /// </summary>
        /// <param name="_key" type="String">
        /// 在鍵值等于_key的元素之后插入
        /// </param>
        /// <param name="node" type="Object">
        /// 要插入的元素
        /// </param>
        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)
    {
        /// <summary>
        /// 從鏈表類的某節點之后插入新節點node.
        /// </summary>
        /// <param name="_key" type="String">
        /// 在鍵值等于_key的元素之后插入
        /// </param>
        /// <param name="node" type="Object">
        /// 要插入的元素 www.companysz.com
        /// </param>
        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)
    {
        /// <summary>
        /// 從鏈表類中移除一個key
        /// </summary>
        /// <param name="_key" type="String">
        /// key的值
        /// </param>
        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--;
                return;
            }
        } while (Boolean(i = i.next))
    },
    exists: function (_key)
    {
        /// <summary>
        /// 檢查鏈表類中是否存在一個key
        /// </summary>
        /// <param name="_key" type="String">
        /// key的值
        /// </param>
        /// <returns type="Boolean">
        /// </returns>
        var i = this.root;
        while (Boolean(i = i.next))
            if (i.Key == _key)
                return true;
        return false;
    },
    removeAll: function ()
    {
        /// <summary>
        /// 清空鏈表類
        /// </summary>
        this.root = new linkNode(null, null);
        this.end = this.root;
        this.count = 0;
    },
    Obj2str: function (o)
    {
        if (o == undefined)
        {
            return "";
        }
        var r = [];
        if (typeof o == "string")
            return "/"" + o.replace(/([/"http://])/g, "http://$1").replace(/(/n)/g, "http://n").replace(/(/r)/g, "http://r").replace(/(/t)/g, "http://t") + "/"";
        if (typeof o == "object")
        {
            if (!o.sort)
            {
                for (var i in o)
                    r.push("/"" + i + "/":" + this.Obj2str(o[i]));
                r = "{" + r.join() + "}";
            }
            else
            {
                for (var i = 0; i < o.length; i++)
                    r.push(this.Obj2str(o[i]))
                r = "[" + r.join() + "]";
            }
            return r;
        }
        return o.toString().replace(//"/:/g, '":""');
    },
    getJSON: function ()
    {
        /// <summary>
        /// 轉換成JSON字符串
        /// </summary>
        /// <returns type="String">
        /// </returns>
        //內部方法,用于遞歸
        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 ()
    {
        /// <summary>
        /// 轉所有節點的value換成JSON字符串,數組格式
        /// </summary>
        /// <returns type="String">
        /// </returns>
        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)
    {
        /// <summary>
        /// 對鏈表進行排序
        /// </summary>
        /// <param name="fn" type="Function">
        /// 比較兩個鏈表元素大小的方法,當返回真時,此方法的參數所指的節點將往下沉
        /// </param>
        if (fn != null)
        {

            var i = this.root;
            while (Boolean(i = i.next))
            {
                var j = this.root;
                while (Boolean(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 = Key;
                            j.next.Value = Value;
                        }
                    }
                }
                this.end = i;
            }

        }
        else
        {

        }
    }
};

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚色 | 国产一级一区二区 | 一级免费| 国产一级一区二区三区 | 亚洲网站免费看 | 成人福利在线播放 | 亚洲成人伊人 | 久久精品av | 日本a在线观看 | 青青操精品 | 日本一区二区高清不卡 | 狠狠干91| 欧美精品国产综合久久 | 黄色网址你懂的 | 九九热久久免费视频 | 精品成人久久久 | 一级性色| 国产91久久精品 | www.17c亚洲蜜桃 | 日韩一级片一区二区三区 | 久久3| 亚洲网站在线观看 | 免费看黄色一级片 | 操皮视频 | 欧美一级在线免费 | 在线日韩av电影 | 一级成人黄色片 | 成人在线观看污 | av在线免费观看播放 | 91福利在线观看 | 久久狠狠高潮亚洲精品 | 日韩剧情片 | 色蜜桃av | 亚洲尻逼视频 | 久久久久久亚洲国产精品 | 久久91精品国产91久久yfo | 一级免费黄色免费片 | 色播视频在线播放 | 日韩视频在线观看免费 | 国产精品久久久久久久久久 | 国产成人午夜高潮毛片 |