ลิงค์ลิสต์ (Linked List) หรือรายการ คือ ชุดของข้อมูลที่มีการจัดเก็บข้อมูลแบบเชื่อมต่อกันเป็นเชิงเส้น แต่ละข้อมูลเรียกว่า อีลิเมนต์ (Element) หรือสมาชิก (Member) ซึ่งสมาชิกประกอบด้วย ข้อมูล (Data) และลิงค์ (Link) โดยลิงค์ของข้อมูลหนึ่งจะเชื่อมไปยังอีกข้อมูลหนึ่ง ทำให้เกิดสายการเชื่อมโยงข้อมูลที่เรียงต่อกันแบบรายการ และข้อมูลอาจประกอบด้วยหลายเขตข้อมูล
[3]p.
<script> /* 1 create new blank list */ var list=new List(); /* 2 add A B C D */ for(var i=65;i<=68;i++){ list.add(i); document.write(String.fromCharCode(i)); }; /* 3 Main process */ list.delete(65); list.each(); // BCD list.insertAsFirst(65); list.insertAfter(68,69); list.each(); // ABCDE document.write(list.item(2).data); // 66 /* 4 Function have 8 methods */ function List() { /* a) create blank node */ List.makeNode = function() { return {data: null, next: null}; }; /* b) start,end point to null */ this.start = null; this.end = null; /* c) create new node */ this.add = function(data) { if (this.start === null) { this.start = List.makeNode(); this.end = this.start; } else { this.end.next = List.makeNode(); this.end = this.end.next; } ; this.end.data = data; }; /* d) delete a node , find it */ this.delete = function(data) { var current = this.start; var previous = this.start; while (current !== null) { if (data === current.data) { if (current === this.start) { this.start = current.next; return; } if (current === this.end) this.end = previous; previous.next = current.next; return; } previous = current; current = current.next; } }; /* e) add before first node */ this.insertAsFirst = function(data) { var temp = List.makeNode(); temp.next = this.start; this.start = temp; temp.data = data; }; /* f) add after a node */ this.insertAfter = function(t, data) { var current = this.start; while (current !== null) { if (current.data === t) { var temp = List.makeNode(); temp.data = data; temp.next = current.next; if (current === this.end) this.end = temp; current.next = temp; return; } current = current.next; } }; /* g) retrieve node value by seq index */ this.item = function(i) { var current = this.start; while (current !== null) { i--; if (i === 0) return current; current = current.next; } return null; }; /* h) write each node on document */ this.each = function(f) { document.writeln("<br/>"); var current = this.start; while (current !== null) { document.write(String.fromCharCode(current.data)); current = current.next; } }; } </script>
Output ----------------- ABCD BCD ABCDE66 Sample code ----------------- /* 1 data type */ var node1 = { data:null, next:null }; /* 2 assign value */ node1.data="tom"; /* 3 data type */ var node2={ data:null, next:null }; /* 4 link 2 node */ node2.data = "jack"; node1.next = node2; /* 5 diagram */ node1 [data]-> data1 [next]-> node2 [data]-> data2 [next]-> null /* 6 write each node */ while (node !== null) { write(node.data); node = node.next; }