ก่อนอื่นต้องกำหนดค่าเริ่มต้นให้พอยเตอร์ชื่อ Root เก็บค่า null root ทำหน้าที่เป็นพอยเตอร์ชี้ที่หัวลิสต์เสมอ สาเหตุที่เริ่มแรกต้องกำหนด root เป็น null ก็เพราะเดิมทีลิสต์ว่างเปล่า จึงยังไม่มีโหนดใดๆปรากฏอยู่ในลิสต์เรย์
|
ขั้นตอนวิธี |
ภาพของลิงค์ลิสต์ |
|||||||||
|
1.กำหนดค่าเริ่มต้นให้ root เป็น NULLด้วยคำสั่ง
Root = NULL |
root |
|||||||||
|
2. สร้างโหนดใหม่เพื่ออ่านข้อมูลตัวแรกจากแป้นพิมพ์เข้าไปเก็บในโหนดที่สร้างใหม่จากนั้นให้นำไปแทรกด้านหน้าทางลิสต์ด้วยคำสั่ง
P = new Ptr ; Scanf (“%s
”,p -> name) ; P ->next = root ; Root = p ; |
P = new Ptr ;
P scanf(“%s ”,p -> name) ;
Anong
Anong
root |
|||||||||
|
3.สร้างโหนดใหม่ แล้วอ่านข้อมูลตัวถัดไปเข้าไปเก็บในโหมดที่สร้างใหม่ จากนั้นให้นำไปแทรกที่ด้านหน้า . . . |
Malee p . . . |
ทำเช่นนี้ไปเรื่อยๆ จนกว่าจะอ่านข้อมูลหมด ท้ายที่สุดลิงค์ลิสต์ที่สร้างจากข้อมูลที่ป้อนทางแป้นพิมพ์ มีลักษณะดังนี้
|
|
|
Yupa |
|
|
|
Malee |
|
|
|
Anong |
|
|
|
Suda |
root
ตัวอย่าง การเขียนฟังก์ชันชื่อ insFront เพื่ออ่านรหัสและชื่อของนักศึกษาจากแป้นพิมพ์เข้าเก็บในแต่ละโหนดของลิสต์ แต่ละโหนดที่นำมาเชื่อมต่อเป็นลิสต์จะใช้วิธีการเชื่อมโยงทีด้านหน้าของลิสต์เสมอ
Void insFront (Ptr **root)
{
Ptr *p;
Int id;
*root = null;
/*เริ่มแรกกำหนดให้rootมีค่าNULL เพราะลิงค์ลิสต์ยังว่างเปล่า*/
while (scanf(“%d ”,&id) !=EOF) )
{
p=new Ptr ; /*สร้างโหนดใหม่*/
p - >id = id ; /*เก็บรหัสในฟิลด์ id*/
gets (p - >name) ; /*อ่านชื่อเก็บในฟิลด์ name*/
p -> next = *root ; /*เอาโหนดต่อหน้าหน้าลิสต์*/
* root = p; /*ต่อเสร็จเลื่อนrootชี้หน้าสุดของลิสต์*/
}
} /*insFront*/