การเขียน โปรแกรมสร้าง Link List ด้วยภาษา C
Link List เป็นการจัดการกับ ข้อมูล ไม่ว่าจะเพื่อ เก็บใว้ใน memory ชั่วคราว หรือเพื่อ เตรียมข้อมูล เพื่อเก็บลง text file
ผมเอง มี code ตัวนี้อยู่มานานแล้วแต่ไม่ค่อยได้เอามาใช้ เพราะส่วนใหญ่ ถ้าจะเก็บข้อมูลจะพึ่ง Database มากกว่า แต่เมื่อ ได้มาคลุกคลี กับ การเก็บลง text file เลยต้อง รื้อ code Link List สมัย เรียน ขึ้นมาดู เมื่อนำมาปัดฝุ่นใช้ใหม่ เลยมีความคิดว่า อยากจะให้ คนอื่นได้ ผลประโยชน์ ในเรื่องนี้ด้วย
ขั้นแรก เราต้องสร้าง structure เพื่อความสะดวก ในการใช้ pointer เรียก ข้อมูลขึ้นมาใช้
struct node{
int data;
struct node *next;
//pointer next เป็นตัวบอกว่า node ถัดไป อยู่ที่ address ไหน
}datanode;
กำหนดค่าเริ่มต้นของ pointer
struct node *first;
struct node *TempNode;
first = (struct node *)
calloc(sizeof(datanode),1);
// ให้ first เป็นตำแหน่งเริ่มต้นของ Link list
TempNode=first;
ทำการสร้าง Link List โดยในที่นี้ จะให้ ตัวแปรชื่อ datainput เป็นตัวแปรที่รับข้อมูลเข้ามา ไม่ว่าจะ input จาก keyboard หรือ แหล่งอื่นตามที่คุณต้องการ
if (TempNode==first) // เป็นข้อมูล แรก ใน Link List
{
TempNode->data=datainput;
nodetmp=(struct node *) calloc(sizeof(datanode),1);
TempNode->next=nodetmp;
TempNode=nodetmp;
}else if (TempNode!=first) // ถ้าไม่ได้เป็นข้อมูลแรกใน Link List
{
TempNode->data=datainput;
nodetmp = (struct node *) calloc(sizeof(datanode),1);
TempNode->next=nodetmp;
}
การท่องไปใน Link List ( Link List traversal)
nodetmp=first;
while (nodetmp!=NULL) {
printf ("%dn",nodetmp->data);
// จะ print หรือว่า นำ data ไปใช้ทำอะไร ก็ตามสะดวกเลยครับ
nodetmp=nodetmp->next;
}
การลบ node ก็ไม่มีอะไรมากเลย ครับ แค่เปลี่ย pointer ของ node ก่อนที่จะลบ ไปชี้ node->next ของตัวที่จะลบ ถ้าไม่เข้าใจ ดูจากตัวอย่างดีกว่าครับ
pre->next=nodedel->next;
ผมสมมุติให้ pointer pre คือ node ก่อน ตัวที่ต้องการจะลบ ส่วน nodedel คือ node ที่เราต้องการจะลบ ส่วนการ insert หรือการ แทรก ใน Link List ขั้นแรก เราก็ต้องหา node ที่เราจะทำการ แทรก คล้ายๆ กับ การลบ แหละครับ ผมก็จะสมมุติ ว่า pointer pre เป็น node ที่ เราจะแทรกข้อมูลไป ต่อจาก node นี้ โดยที่มี new เป็น address ของ ข้อมูลใหม่ที่เราต้องการทำไปแทรกใน Link List
new = (struct node *) calloc(sizeof(datanode),1);
new->data=datainput;
new->next=pre->next;
pre->next=new;