โครงสร้างข้อมูลและอัลกอริทึม - รายการที่เชื่อมโยง
รายการที่เชื่อมโยงคือลำดับของโครงสร้างข้อมูลซึ่งเชื่อมต่อกันผ่านลิงก์
Linked List คือลำดับของลิงก์ที่มีรายการต่างๆ แต่ละลิงค์มีการเชื่อมต่อไปยังลิงค์อื่น รายการที่เชื่อมโยงเป็นโครงสร้างข้อมูลที่ใช้มากที่สุดเป็นอันดับสองรองจากอาร์เรย์ ต่อไปนี้เป็นคำศัพท์สำคัญในการทำความเข้าใจแนวคิดของรายการที่เชื่อมโยง
Link - ลิงก์ของรายการที่เชื่อมโยงแต่ละรายการสามารถจัดเก็บข้อมูลที่เรียกว่าองค์ประกอบได้
Next - แต่ละลิงก์ของรายการที่เชื่อมโยงมีลิงก์ไปยังลิงก์ถัดไปที่เรียกว่าถัดไป
LinkedList - รายการที่เชื่อมโยงมีลิงก์การเชื่อมต่อไปยังลิงก์แรกที่เรียกว่า First
การแสดงรายการที่เชื่อมโยง
รายการที่เชื่อมโยงสามารถมองเห็นเป็นห่วงโซ่ของโหนดโดยที่ทุกโหนดชี้ไปยังโหนดถัดไป
ตามภาพประกอบด้านบนประเด็นสำคัญที่ต้องพิจารณาต่อไปนี้
รายการที่เชื่อมโยงมีองค์ประกอบลิงก์ที่เรียกว่าก่อน
แต่ละลิงค์มีฟิลด์ข้อมูลและฟิลด์ลิงค์ที่เรียกว่าถัดไป
แต่ละลิงค์เชื่อมโยงกับลิงค์ถัดไปโดยใช้ลิงค์ถัดไป
ลิงค์สุดท้ายมีลิงก์เป็นโมฆะเพื่อทำเครื่องหมายจุดสิ้นสุดของรายการ
ประเภทของรายการที่เชื่อมโยง
ต่อไปนี้เป็นรายการเชื่อมโยงประเภทต่างๆ
Simple Linked List - การนำทางรายการเป็นไปข้างหน้าเท่านั้น
Doubly Linked List - รายการสามารถเลื่อนไปข้างหน้าและข้างหลังได้
Circular Linked List - รายการสุดท้ายมีลิงก์ขององค์ประกอบแรกเป็นรายการถัดไปและองค์ประกอบแรกมีลิงก์ไปยังองค์ประกอบสุดท้ายเหมือนก่อนหน้า
การทำงานขั้นพื้นฐาน
ต่อไปนี้เป็นการดำเนินการพื้นฐานที่รายการสนับสนุน
Insertion - เพิ่มองค์ประกอบที่จุดเริ่มต้นของรายการ
Deletion - ลบองค์ประกอบที่จุดเริ่มต้นของรายการ
Display - แสดงรายการทั้งหมด
Search - ค้นหาองค์ประกอบโดยใช้คีย์ที่กำหนด
Delete - ลบองค์ประกอบโดยใช้คีย์ที่กำหนด
การดำเนินการแทรก
การเพิ่มโหนดใหม่ในรายการที่เชื่อมโยงเป็นกิจกรรมที่มากกว่าหนึ่งขั้นตอน เราจะเรียนรู้สิ่งนี้ด้วยไดอะแกรมที่นี่ ขั้นแรกให้สร้างโหนดโดยใช้โครงสร้างเดียวกันและค้นหาตำแหน่งที่จะต้องแทรก
ลองนึกภาพว่าเรากำลังแทรกโหนด B (NewNode) ระหว่าง A (LeftNode) และ C(โหนดขวา) จากนั้นชี้ B. ไปที่ C -
NewNode.next −> RightNode;
ควรมีลักษณะดังนี้ -
ตอนนี้โหนดถัดไปทางด้านซ้ายควรชี้ไปที่โหนดใหม่
LeftNode.next −> NewNode;
สิ่งนี้จะทำให้โหนดใหม่อยู่ตรงกลางของทั้งสอง รายการใหม่ควรมีลักษณะดังนี้ -
ควรทำตามขั้นตอนที่คล้ายกันหากมีการแทรกโหนดที่จุดเริ่มต้นของรายการ ในขณะที่แทรกไว้ที่ส่วนท้ายโหนดสุดท้ายที่สองของรายการควรชี้ไปที่โหนดใหม่และโหนดใหม่จะชี้ไปที่ NULL
การดำเนินการลบ
การลบยังเป็นกระบวนการมากกว่าหนึ่งขั้นตอน เราจะเรียนรู้ด้วยการแสดงภาพ ขั้นแรกค้นหาโหนดเป้าหมายที่จะลบออกโดยใช้อัลกอริทึมการค้นหา
โหนดด้านซ้าย (ก่อนหน้า) ของโหนดเป้าหมายควรชี้ไปที่โหนดถัดไปของโหนดเป้าหมาย -
LeftNode.next −> TargetNode.next;
การดำเนินการนี้จะลบลิงก์ที่ชี้ไปยังโหนดเป้าหมาย ตอนนี้ใช้รหัสต่อไปนี้เราจะลบสิ่งที่โหนดเป้าหมายชี้ไป
TargetNode.next −> NULL;
เราจำเป็นต้องใช้โหนดที่ถูกลบ เราสามารถเก็บสิ่งนั้นไว้ในหน่วยความจำไม่เช่นนั้นเราก็สามารถยกเลิกการจัดสรรหน่วยความจำและลบโหนดเป้าหมายได้ทั้งหมด
ย้อนกลับการทำงาน
การดำเนินการนี้เป็นไปอย่างละเอียด เราจำเป็นต้องทำให้โหนดสุดท้ายชี้โดยโหนดหัวและย้อนกลับรายการที่เชื่อมโยงทั้งหมด
ขั้นแรกเราสำรวจไปยังจุดสิ้นสุดของรายการ มันควรจะชี้ไปที่ NULL ตอนนี้เราจะทำให้มันชี้ไปที่โหนดก่อนหน้า -
เราต้องแน่ใจว่าโหนดสุดท้ายไม่ใช่โหนดสุดท้าย ดังนั้นเราจะมี temp node ซึ่งดูเหมือนว่า head node ที่ชี้ไปยังโหนดสุดท้าย ตอนนี้เราจะทำให้โหนดด้านซ้ายทั้งหมดชี้ไปที่โหนดก่อนหน้าทีละโหนด
ยกเว้นโหนด (โหนดแรก) ที่ชี้โดยโหนดส่วนหัวโหนดทั้งหมดควรชี้ไปที่รุ่นก่อนทำให้เป็นผู้สืบทอดใหม่ โหนดแรกจะชี้ไปที่ NULL
เราจะทำให้โหนดหัวชี้ไปยังโหนดแรกใหม่โดยใช้โหนดชั่วคราว
ตอนนี้รายการที่เชื่อมโยงจะกลับรายการ หากต้องการดูการดำเนินรายการที่เชื่อมโยงในการเขียนโปรแกรมภาษา C โปรดคลิกที่นี่