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
การแทรกโหนด (ต่ อ)
tmpnext = pnext;
คือขัน
้ ตอนการต่อสว่ นนี้
tmp
5
p
....
15
3
8
....
LOGO
การแทรกโหนด (ต่ อ)
tmp
ขัน
้ ต่อมาทาดังนี้
pnext= 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