รายการ(List) [1]
อาจารย์สุวิชยะ รัตตะรมย์
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร
หัวข้อวันนี้
2
ADT : Value Definition
3
ADT : Operation Definition
4
Implementation of List�(Static memory allocation)
5
6
Example ให้ list1 เป็นลิสต์ของข้อมูลซึ่งเรียงจากน้อยไปหามากซึ่งสร้างจากอาร์เรย์ขนาด 8 ช่อง และมีข้อมูลในลิสต์ ดังนี้
7
2
4
6
8
9
2
4
6
8
9
2
3
4
6
8
9
ข้อมูลตัวใหม่
2
3
4
6
8
9
3
4
6
8
9
ลิงค์ลิสต์ (Linked List)
8
9
โครงสร้างของลิงค์ลิสต์
10
11
ตัวแปร pointer ที่ชี้ตำแหน่ง node แรกในลิงค์ลิสต์
ณ โหนดสุดท้ายตัวชี้จะชี้ไปที่ NULL
12
ตัวอย่างลักษณะการจัดเก็บลิงค์ลิสต์ในหน่วยความจำ
Header
NULL
NULL
การประกาศโครงสร้างข้อมูลชนิดลิงค์ลิสต์
13
typedef struct list
{
char id[10] ;
int mark ;
struct list *next;
}node;
data
*next
ข้อมูล ตัวชี้ไปยังโหนดถัดไป
การประกาศตัวแปรเพื่อใช้งาน
14
1. typedef struct list
2. {
3. char id[10] ;
4. int mark ;
5. struct list *next;
6. }node;
7. node *head ;
8. head = (node *)malloc(sizeof(node));
*next
mark
id
head
15
16
1. typedef struct list
2. {
3. char id[10] ;
4. int mark ;
5. struct list *next;
6. }node;
7. node *head ;
8. if ((head = (node *)malloc(sizeof(node))) == NULL)
9. {
10. print(“Not enough memory”);
11. exit(1);
12. }
ตัวอย่างเพิ่มเติมเพื่อเช็คกรณีจองหน่วยความจำไม่สำเร็จ
17
…
node *head ;
head = newnode() ;
*next
mark
id
head
การกำหนดค่าให้กับข้อมูล
18
คำสั่ง | ภาพของหน่วยความจำ |
strcpy(head->id, “46xx”) ; | |
head->mark = 30 ; | |
head->next = NULL ; | |
*next
mark
46xx
head
*next
30
46xx
head
30
46xx
head
วิธีการเชื่อมโยง node เข้าด้วยกัน
19
*next
1
head
*next
2
p
*next
3
q
วิธีการเชื่อมโยง node เข้าด้วยกัน
20
1
*next
2
p
head
1
2
p
head
3
q
1
2
p
head
*next
3
q
21
Basic operation of linked list
22
traverse �(การท่องไปในลิงค์ลิสต์)
23
การท่องไปในลิงค์ลิสต์ (traverse)
24
p = head;
while( p->next != NULL)
{
p = p->next;
}
data
head
data
data
p
Insert �(การเพิ่มข้อมูลในลิงค์ลิสต์)
25
26
ลิงค์ลิสต์ที่ข้อมูลไม่มีการเรียงลำดับ : แทรกหน้าสุด
27
ลิงค์ลิสต์ที่ข้อมูลไม่มีการเรียงลำดับ : แทรกหน้าสุด
28
...
head = NULL;
ins_front(&head);
ลิงค์ลิสต์ที่ข้อมูลไม่มีการเรียงลำดับ : แทรกหลังสุด
29
ลิงค์ลิสต์ที่ข้อมูลไม่มีการเรียงลำดับ : แทรกหลังสุด
30
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ
31
2
head
5
8
1
9
3
6
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ
32
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ : วิธีการท่อง
สร้าง pointer (travel), (previous) ใช้ในการท่องลิงค์ลิสต์
กำหนดให้ travel ชี้ไปที่เดียวกับ head
while (travel->data < s->data) && (travel->next != NULL)
กำหนดให้ previous ชี้ไปที่เดียวกับ travel
travel = travel->next
33
t
p
1
head
3
5
6
8
s
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ : การใส่ข้อมูล
1. กรณีโหนดใหม่มีค่ามากสุด (ต่อท้ายสุด)
34
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ : การใส่ข้อมูล
2. กรณีโหนดใหม่มีค่าน้อยสุด (ต่อหน้าสุด)
35
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ : การใส่ข้อมูล
3. กรณีโหนดใหม่แทรกระหว่างโหนดใดๆ
36
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ
37
ลิงค์ลิสต์ที่ข้อมูลมีการเรียงลำดับ
38
39