分享

javascript链表 List类

 quasiceo 2013-02-21

javascript链表 List类

javascript链表类似java的List,

这是一个javascript实现的链表,功能与java中的list差不多,很简单也很好用。

/**
* 简单链表
* @return
*/
function CGLinkedList()
{

function Entry(next, data)
{
   this.next = next
   this.data = data
}

/**
* 内不类, 迭代器
* @param node
* @return
*/
function Iterator(node)
{
   this.cousor = node
   this.hasNext = function ()
   {
    return (this.cousor.next != null);
   }
   this.next = function ()
   {
    var rt = this.cousor.next
    this.cousor = this.cousor.next
    return rt.data
   }
}


this.head = new Entry(null, null)

/**
* 列表节点个数
*/
this.size = function ()
{
   var size = 0
   if (this.head == null)
   {
    return size
   }
   var p = this.head.next
   for(; p!=null; p = p.next)
    size++;
   return size;
}



this.clear = function ()
{
   this.head = null
}



this.getNode = function (idx)
{
   var pos = -1;
   var p = this.head
   while (p != null && pos < idx) {
    p = p.next;
    pos ++;
   }
   return p;
}

/**
* 返回指定索引出的节点对象
*/
this.get = function (idx)
{
   return this.getNode(idx).data
}

/**
* 项列表添加一个元素
*/
this.add = function (data)
{
   this.insert(this.size(), data)
}

/**
* 在指定索引出添加一个元素
*/
this.insert = function (idx, data)
{
   var p = this.getNode(idx-1); /*注意查询idx-1*/
   if (p == null){
    return
   }
   var node = new Entry(p.next, data)
   p.next = node
}

/**
* 删除指定位置处的元素
*/
this.remove = function (idx)
{
   var prenode = this.getNode(idx - 1)
   var node = this.getNode(idx)
   if (prenode == null || node == null)
   {
    return null
   }
   prenode.next = node.next
   return node.data
}

/**
* 迭代遍历器
*/
this.iterator = function ()
{
   return new Iterator(this.head)
}


this.swap = function (a, b)
{
   var av = this.getNode(a)
   var bv = this.getNode(b)
   var tmp = av.data
   av.data = bv.data
   bv.data = tmp
}

}
/*********************************************************************************************************************/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多