โครงสร้างข้อมูลลิ้งค์ลิสต์


โครงสร้างข้อมูลลิ้งค์ลิสต์

วิธีแก้ปัญหาในการย้ายข้อมูลที่พบในการจัดเก็บที่มีรูปแบบเรียงตามลำดับ(Sequential)เปลี่ยนมาใช้รูปแบบไม่เรียงตามลำดับ (Non-sequential)ซึ่งรูปแบบการเรียงตามลำดับจะมีสมาชิกเรียงต่อเนื่องติดกันในทางตรรกะ (Logical) และทางกายภาพ(Physical) เป็นแบบเดียวกัน แต่รูปแบบไม่เรียงตามลำดับสมาชิกต่อเนื่องติดกันในทางตรรกะ ส่วนทางกายภาพไม่จำเป็นต้องเหมือนกัน โดยในทางตรรกะจะแสดงด้วยแต่ละสมาชิกมีการชี้ (Point) ต้อไปยังสมาชิกตัวถัดไป สมาชิกทุกตัวในรายการจึงถูกเชื่อมต่อ (Link) เข้าด้วยกัน ดังรูปที่ 6.1 เป็นรายการเชื่อมต่อหรือเรียกว่าลิ้งค์ลิสต์ (Linked List) มีสมาชิก N ตัว แต่ละสมาชิกเรียกว่าโหนด (Node)

จากรูปที่ 6.1 มีตัวแปรพอยน์เตอร์ First ชี้ไปยังโหนดแรกของรายการ แต่ละโหมดมีตัวเชื่อมเป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไปโดยโหนดสุดท้ายมีค่าเป็น NULL แสดงให้ทราบว่าไม่ได้ชี้ไปยังโหมดถัดไป แต่ละโหนดเป็นโครงสร้างข้อมูลเรคคอร์ด ประกอบด้วยสองส่วน คือ
1.ส่วนเก็บข้อมูล (Info) ใช้เก็บข้อมูลข่าวสารที่มีโครงสร้างข้อมูลเบื้องต้นหรือเรียบง่าย
2.ส่วนการเชื่อมต่อ (Next) เป็นตัวชี้หรือพอยน์เตอร์เก็บค่าแอดเดรสใช้อ้างไปยังโหนดถัดไปในหน่วยความจำ

สำหรับในทางกายภาพของลิ้งค์ลิสต์ แต่ละดหนดไม่จำเป็นต้องอยู่ติดกัน อาจกระจัดกระจายไปยู่ส่วนไหนก็ได้ในหน่วยความจำโดยมีตัวเชื่อมชี้ไปยังตัวตำแหน่งของโหนดถัดไป

ดังที่กล่าวในตอนต้นโครงสร้างสแตกและคิวมีการใช้อาร์เรย์ในการเก็บค่า สมาชิกทุกตัวจึงถูกจำกัดให้เป็นชนิดเดียวกัน(Homogenous) ซึ่งแก้ไขโดยเปลี่ยนมาใช้ลิ้งค์ลิสต์ที่มีโครงสร้างข้อมูลต่างกันได้ นอกจากนี้ยังมีผลดีในการปฏิบัติการแทรกข้อมูลหรือลบข้อมูล เพียงแต่ย้ายการชี้ของตัวแปรพอยน์เตอร์เท่านั้น ทำให้สมาชิกอื่นไม่มีผลกระทบ แต่ในกรณีค่าใช้จ่ายแล้วลิงค์ลิสต์จะสูงกว่าที่ต้องใช้พื้นที่เผิ่มมากขึ้นสำหรับส่วนการเชื่อมต่อเพื่อชี้ไปยังโหนดถัดไป และการค้นหาโหนดที่ต้องการใช้เวลามากเนื่องจากเป็นการค้นหาเรียงตามลำดับ (Sequential Search) ได้โหนดเดียวโดยเริ่มต้นที่โหนดแรกเสมอ

Linked List

ลิงค์ลิสต์
ลิงค์ลิสต์ (Link list) คือ ข้อมูลที่ถูกนำมาจัดเก็บเรียงกันในลักษณะต่อเนื่องคล้ายกับเป็นเส้นตรง (Linear) โดยข้อมูลแต่ละชุดที่นำมาจัดเรียงจะถูกเรียกว่า โหนด (Nodes) ดังนั้น ในแต่ละโหนดจะต้องประกอบ ด้วยข้อมูล 2 ส่วน คือ ส่วนแรกจะเป็นส่วนสารสนเทศ (Information’s Part) ซึ่งจะใช้เก็บรายละเอียดของข้อมูลที่ใช้งานจริง และส่วนที่สองจะเป็นลิงค์ฟิลด์ ซึ่งจะใช้เก็บตำแหน่งที่อยู่ของโหนดตัวต่อไปที่อยู่ในลิสต์

จะเห็นว่าในแต่ละโหนดจะมีข้อมูลอยู่ 2ส่วน คือ ส่วนที่อยู่ทางซ้ายคือส่วนสารสนเทศ และส่วนที่อยู่ทางขวาคือลิงค์ฟิลด์ จะเห็นว่าลิงค์ฟิลด์จะชี้ไปยังโหนดต่อไปเสมอ แต่ในโหนดสุดท้าย ลิงค์ฟิลด์จะไม่มีการชี้ไปยังโหนดอื่นอีก นั่นคือ ลิงค์ฟิลด์จะมีค่าพิเศษค่าหนึ่งเพื่อแสดงว่าหมดข้อมูลแล้วเรียกว่า NULL Pointer ซึ่งจะไม่มีค่าตำแหน่งข้อมูลที่เป็นไปได้เก็บอยู่ จากรูป จะเห็นว่าเรายังต้องมีตัวชี้ตำแหน่งเริ่มต้นของลิงค์ลิสต์อีกตัวหนึ่งด้วย