LOGO Lists Data Structure LAUKHWAN NGAMPRASIT การจัดเก็บข้อมูลในหน่ วยความจาหลัก Static memory allocation เช่น การประกาศตัวแปร int a, b; char s[10], c; static float f; Dynamic memory allocation เช่น การใช้
Download
Report
Transcript LOGO Lists Data Structure LAUKHWAN NGAMPRASIT การจัดเก็บข้อมูลในหน่ วยความจาหลัก Static memory allocation เช่น การประกาศตัวแปร int a, b; char s[10], c; static float f; Dynamic memory allocation เช่น การใช้
LOGO
Lists
Data Structure
LAUKHWAN NGAMPRASIT
1
การจัดเก็บข้อมูลในหน่ วยความจาหลัก
Static memory allocation
เช่น การประกาศตัวแปร int a, b;
char s[10], c;
static float f;
Dynamic memory allocation
เช่น การใช้ pointer และมีการจองเนื้ อที่ในหน่ วยความจาด้วยคาสัง่
malloc();
int *p ;
p = (int *)malloc(sizeof(int)*2) ;
2
LOGO
Lists
เป็ นโครงสร้างข้อมูลแบบ Linear
สามารถ implement ได้ 2 แบบ
1. แบบ Static
implement ด้วย array
2. แบบ Dynamic
implement ด้วย linked list
Basic Operations
- Insertion
- Deletion
- Find
3
- Initial
- isEmpty
- isLast
LOGO
Lists : แบบ Static
Array
-5 0 9 6 3
4
LOGO
Lists : แบบ Dynamic
Linked list
Linked List เป็ นการนาเอาโครงสร้างที่เรียกว่าโหนด มาต่อเชื่อมกัน
เป็ นลูกโซ่ ช่วยให้การจัดเก็บมีความยืดหยุ่นมากขึน้ เราสามารถทา
การเพิ่มโหนดได้โดยไม่ต้องคานึ งถึงขีดจากัดเหมือนกันการเก็บข้อมูล
แบบ array
Linked list คล้ายๆ กับขบวนรถไฟ ตรงที่ว่าการที่จะเกิดเป็ นขบวน
รถไฟได้จะต้องมีการนาโบกี้รถไฟหลายๆ โบกี้มาต่อกัน ขบวนจะสัน้
หรือยาวก็ขึน้ อยู่กบั โบกี้เหล่านี้ หากผูโ้ ดยสารโบกี้แรกๆ ต้องการที่จะ
ไปยังโบกี้สดุ ท้ายก็ต้องเดินผ่านโบกี้อื่นๆ ระหว่างทางด้วย
5
LOGO
การทางาน
การสร้างลิสต์ว่าง
การทดสอบว่าลิสต์ว่างหรือไม่
การท่องไปในลิสต์หรือส่วนของลิสต์ โดยการเข้าถึงสมาชิก
และประมวลผลสมาชิกแบบลาดับ
การเพิ่มสมาชิกใหม่ลงในลิสต์
การลบสมาชิกออกจากลิสต์
6
LOGO
ลักษณะของลิงค์ลิสต์
node
Data
12
59
7
24
Link
แสดงโครงสร้างข้อมูล Linked-List
7
LOGO
คุณสมบัติของลิสต์
ภายในแต่ละโหนดจะแบ่งออกเป็ นอย่างน้ อย 2 ฟิลด์ คือข้อมูลและแอดเดรสหรือที่
อยู่ของโหนดถัดไป
ลิงค์ลิสต์เป็ นการนาข้อมูลแต่ละโหนดมาจัดเรียงต่อกันเป็ นลิสต์ โดยสิ่งที่เป็ น
ตัวกาหนดลาดับก็คือ ฟิลด์แอดเดรสของแต่ละโหนด
การเข้าถึงลิงค์ลิสต์จะต้องชี้ pointer ไปโหนดแรกเสมอ
ฟิลด์แอดเดรสของโหนดสุดท้ายจะต้องกาหนดให้เป็ น null ซึ่งเป็ นการกาหนดให้จบ
ลิงค์ลิสต์
ลิงค์ลิสต์ที่ไม่มีโหนดอยู่ภายในเรียกว่า ลิสต์ว่าง (Empty List หรือ null List)
12
8
59
7
24
LOGO
สัญลักษณ์ที่แสดงว่าเป็ นโหนดสุดท้าย
Null
(a)
(b)
(d)
(e)
///
(c)
9
LOGO
การประกาศโครงสร้างโหนดของลิงค์ลิสต์
struct node
{ int info;
struct node *next;
};
typedef struct node *ptrnode;
typedef ptrnode position,list;
10
LOGO
การสร้างลิงค์ลิสต์
ตัวชี้ของโหนดสุดท้ายของรายการมีค่าเป็ น
null ดังนัน้ จึงเป็ นการง่ายที่จะสร้างรายการว่าง
ขึน้ มาใหม่ โดยการกาหนดค่าเริ่มต้นให้เป็ น
null
11
LOGO
5 20 12
TMP
header
L
P
12
list
L;
position
TMP->info
= 5;
P->nextTMP;
= TMP;
position
P; node *)malloc(sizeof(struct node));
TMP
=(struct
TMP->info
= 20;
P->next
=node
TMP;
position
TMP;
L
=
(struct
*)malloc(sizeof(struct node));
TMP->next = P->next;
TMP
=(struct
node *)malloc(sizeof(struct node));
L->next
= NULL;
TMP->next
= P->next;
P = L;
LOGO
การเข้ าถึง (Access) ข้ อมูลในโหนด
การเข้ าถึงโหนดใดๆ จะต้ องเริ่มต้ นเข้ าทางพอยเตอร์ ทชี่ ี้อยู่โหนดแรกเสมอ แล้วไล่
ไปตามลิง้ ค์ ทชี่ ี้บอกว่ าโหนดถัดไปอยู่ ณ ทีใ่ ด
การเข้ าถึงโหนดใดๆ มีจุดประสงค์ เพือ่ นาข้ อมูลทีม่ นั เก็บไว้ ไปประมวลผล ไม่ ว่าจะ
เป็ น บวก ลบ คูณ หาร หรือนาออกไปพิมพ์ หรือแสดงทางหน้ าจอ รวมทั้งเพือ่ ทา
การ เพิม่ ลบ แทรกโหนดด้ วย
7
13
14
24
59
LOGO
การแทรกโหนด
tmp
5
โหนดใหม่ทจ
ี่ ะแทรก
p
....
14
3
8
....
LOGO
การแทรกโหนด (ต่ อ)
tmpnext = pnext;
คือขัน
้ ตอนการต่อสว่ นนี้
tmp
5
p
....
15
3
8
....
LOGO
การแทรกโหนด (ต่ อ)
tmp
ขัน
้ ต่อมาทาดังนี้
pnext= tmp
ื่ มโยงดังนี้
จะเกิดการเชอ
5
p
ื่ มโยงตรงนีห
การเชอ
้ ายไป
....
16
3
8
....
LOGO
การแทรกโหนด (ต่ อ)
....
p
tmp
3
5
8
....
การแทรกโหนดสาเร็ จ
17
LOGO
การลบโหนด
p
c
p
c
temp
seek
d
h
temp
seek
d
h
p
c
d
h
m
k
b
m
k
b
temp
seek
m
k
b
ทาการค้ นหาโหนดทีต่ ้ องการลบ
18
LOGO
การลบโหนด (ต่ อ)
temp
m
seek
k
b
tmp->next = seek->next;
temp
seek
m
b
free(seek);
19
LOGO
ลิสต์ เชื่อมโยงแบบวงกลม (Circular list)
เป็ นการนาเอา Singly linked list มาทาให้ เป็ นวงกลม โดยการให้ Pointer ของ
โหนดสุ ดท้ ายชี้กลับไปยังโหนดแรก
การเข้ าถึงข้ อมูลจะไม่ มจี ุดจบ แต่ จะวนซ้าผ่านมายังโหนดเดิมได้
P
โหนดล่าสุด = โหนดสุดท้าย
20
LOGO
ลิสต์ เชื่อมโยงสองทาง (Doubly linked list)
มีคุณสมบัตคิ ล้ ายลิสต์ เชื่อมโยงทางเดียว เพียงแต่ การเข้ าถึงข้ อมูลสามารถ
ทาได้ 2 ทิศทาง คือ จากซ้ ายไปขวาหรือจากขวาไปซ้ าย
21
LLINK
LLINK
LLINK
LLINK
data
data
data
data
RLINK
RLINK
RLINK
RLINK
LOGO
Do
Don’ t
22
LOGO