亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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.49028c.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网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品美女久久| 中文字幕无线精品亚洲乱码一区| 亚洲人成电影网站| 久久久久北条麻妃免费看| 国产极品jizzhd欧美| 欧美性精品220| 日韩av网站导航| 最近2019年手机中文字幕| 欧美激情一级欧美精品| 欧美成人精品一区| 午夜伦理精品一区| 成人免费视频在线观看超级碰| 欧美黑人xxx| 欧美精品电影在线| 欧美电影免费在线观看| www国产精品视频| 亚洲天堂一区二区三区| 狠狠躁18三区二区一区| 欧美丰满少妇xxxxx| 成人免费观看49www在线观看| 一本色道久久综合亚洲精品小说| 久久精品99久久久香蕉| 国产日韩在线亚洲字幕中文| 亚洲国产精品久久91精品| 6080yy精品一区二区三区| 欧洲亚洲妇女av| 91系列在线观看| 91亚洲精品一区二区| 日韩综合视频在线观看| 久久久噜噜噜久噜久久| 欧美福利视频在线| www.欧美三级电影.com| 久久精品美女视频网站| 最新日韩中文字幕| 欧美大荫蒂xxx| 久久久国产在线视频| 欧美激情2020午夜免费观看| 亚洲欧美在线免费观看| 日韩视频在线观看免费| 国产精品一香蕉国产线看观看| 亚洲精品久久久久久下一站| 日韩在线观看av| 丝袜美腿精品国产二区| 国内精品视频一区| 日韩中文字幕不卡视频| 久热精品在线视频| 日韩免费观看网站| 91精品国产777在线观看| 日韩欧美国产黄色| 国产精品黄色av| y97精品国产97久久久久久| 国产在线视频91| 精品久久久久久亚洲精品| 一区二区三区视频免费在线观看| 国产亚洲精品久久| 欧美精品一区二区三区国产精品| 欧美精品18videosex性欧美| 一区二区三区视频在线| 57pao国产精品一区| 欧美一级成年大片在线观看| 精品五月天久久| 97色在线视频观看| 国产精品爽爽爽爽爽爽在线观看| 色噜噜狠狠狠综合曰曰曰88av| 91沈先生作品| 国模精品视频一区二区三区| 中文字幕亚洲欧美日韩在线不卡| 国产福利精品在线| 69精品小视频| 国产精品欧美激情| 九九精品视频在线| 日本成人黄色片| 欧美视频一二三| 亚洲香蕉成视频在线观看| 亚洲一区亚洲二区| 国产日韩在线看| 国产精品日本精品| 亚洲天堂av高清| 欧美麻豆久久久久久中文| 中文字幕在线观看日韩| 日韩欧美中文免费| 国产日韩在线视频| 国产ts人妖一区二区三区| 97欧美精品一区二区三区| 亚洲系列中文字幕| 亚洲欧美一区二区三区在线| 国产小视频国产精品| 日韩一级黄色av| 亚洲精选一区二区| 日韩在线视频网| 一本一本久久a久久精品综合小说| 一区三区二区视频| 国产精品一区二区三区久久| 57pao精品| 青草青草久热精品视频在线观看| 日本高清久久天堂| 亚洲国产欧美精品| 国产精品扒开腿做爽爽爽的视频| 清纯唯美日韩制服另类| 国产精品久久久久久久久久久新郎| 欧美黑人一区二区三区| 91牛牛免费视频| 亚洲天堂第一页| 亚洲a级在线播放观看| 亚洲成人网在线| 免费91麻豆精品国产自产在线观看| 亚洲成人黄色在线观看| 中文字幕精品网| 亚洲天堂av综合网| 国产亚洲欧美日韩一区二区| 91精品国产91久久久久福利| 一本色道久久88亚洲综合88| 91精品视频观看| 国产69久久精品成人看| 欧洲美女7788成人免费视频| 亚洲影视九九影院在线观看| 国产精品久久久久久久午夜| 国内精品一区二区三区四区| 国产z一区二区三区| 欧美最顶级的aⅴ艳星| 久久视频在线播放| 久久久久一本一区二区青青蜜月| 欧美成人午夜免费视在线看片| 日韩不卡中文字幕| 亚洲成人亚洲激情| 91av中文字幕| 国产精品极品尤物在线观看| 欧美日韩精品在线| 91黑丝在线观看| 久久久久久网址| 91在线视频导航| 欧美日韩国产中文精品字幕自在自线| 久久国产天堂福利天堂| 国内精品国产三级国产在线专| 欧美精品久久久久| 亚洲护士老师的毛茸茸最新章节| 色综合久综合久久综合久鬼88| 2018日韩中文字幕| 中文字幕在线看视频国产欧美在线看完整| 亚洲性生活视频| 成人午夜在线影院| 欧美成人网在线| 中文日韩在线视频| 91干在线观看| 亚洲福利在线视频| 亚洲国产一区二区三区四区| 国产激情综合五月久久| 欧美又大粗又爽又黄大片视频| 国产一区二区美女视频| 日韩精品高清在线观看| 在线丨暗呦小u女国产精品| 亚洲香蕉成人av网站在线观看| 国产精品视频永久免费播放| 国产亚洲精品成人av久久ww| 97超碰色婷婷| 91免费福利视频| 国产主播喷水一区二区| 91精品久久久久久久久中文字幕| 成人美女av在线直播| 欧美疯狂xxxx大交乱88av| 成人啪啪免费看| 欧美国产在线视频| 亚洲人成在线免费观看| 中文字幕精品久久|