ลิงค์ลิสต์ (Linked List)
ลิงค์ลิสต์ (Linked List)

ลิงค์ลิสต์ (Linked List) หรือรายการ คือ ชุดของข้อมูลที่มีการจัดเก็บข้อมูลแบบเชื่อมต่อกันเป็นเชิงเส้น แต่ละข้อมูลเรียกว่า อีลิเมนต์ (Element) หรือสมาชิก (Member) ซึ่งสมาชิกประกอบด้วย ข้อมูล (Data) และลิงค์ (Link) โดยลิงค์ของข้อมูลหนึ่งจะเชื่อมไปยังอีกข้อมูลหนึ่ง ทำให้เกิดสายการเชื่อมโยงข้อมูลที่เรียงต่อกันแบบรายการ และข้อมูลอาจประกอบด้วยหลายเขตข้อมูล

ตัวอย่าง
[3]p.

ตัวอย่าง
Script from : http://i-programmer.info
<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;
}		   
Tryit.asp?filename=tryhtml_basic
เอกสารฉบับเต็ม (Full Text)

รศ.ดร.สมชาย ประสิทธิ์จูตระกูล

Bruno R. Preiss

Mark Allen Weiss

William H. Ford

DB: พัฒณืรพี

Michael Mcmillan
เอกสารอ้างอิง (Reference)
[1] นิรุธ อำนวยศิลป์, "โครงสร้างข้อมูล : การเขียนโปรแกรมและการประยุกต์", บริษัท ดวงกมลสมัย จำกัด., กรุงเทพฯ, 2548.
[2] Guy J.Hale, Richard J.Easton, "Applied Daa Structures Using Pascal", D.C.Heath and Company. Canada. 2530.
[3] โอภาส เอี่ยมสิริวงศ์, "โครงสร้างข้อมูล (Data Structures) เพื่อการออกแบบโปรแกรมคอมพิวเตอร์", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2549.
[4] วิวัฒน์ อภิสิทธิ์ภิญโญ, อมร มุสิกสาร, "โครงสร้างข้อมูล (Data Structures)", บริษัท เอ-บุ๊ค ดิสทริบิวชั่น จำกัด., กรุงเทพฯ, 2548.
[5] เนรมิต ชุมสาย ณ อยุธยา, "เรียนรู้โครงสร้างข้อมูลและอัลกอริทึมด้วย Java", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2550.
[6] ขนิษฐา นามี, "โครงสร้างข้อมูลและอัลกอริทึม", บริษัท ไอดีซี อินโฟ ดิสทริบิวเตอร์ เซ็นเตอร์ จำกัด., กรุงเทพฯ, 2548.
[7] Michael McMillan, "Data Structures and Algorithms with JavaScript", O’Reilly Media, Inc., USA., 2014.
[8] Loiane Groner, "Learning JavaScript Data Structures and Algorithms", Packt Publishing, 2014.

http://goo.gl/72BPC