一个Javascript链表

王朝html/css/js·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

function Entry(next, data)

{

this.next = next

this.data = data

}

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

}

}

function LinkedList()

{

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

}

}

范例:

<script>

function Item(name, value)

{

this.name = name

this.value = value

}

function sample()

{

var item1 = new Item("a", "1")

var item2 = new Item("b", "2")

var list = new LinkedList();

list.add(item1)

list.add(item2)

for(var itr = list.iterator(); itr.hasNext(); )

{

var itm = itr.next();

alert("name:" + itm.name + "\t value:" + itm.value)

}

}

</script>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航