源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

js单向链表的具体实现实例

  • 时间:2021-06-28 21:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:js单向链表的具体实现实例
[u]复制代码[/u] 代码如下:
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.1sucai.cn         /// </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(/([\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\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         {         }     } };
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部