Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
CE 311 Data Structure and Algorithm
Chakkaphong [email protected]
Assignment
• Two choices– Minimum Spanning Tree– Shortest Path
ตวัอย่าง City Network
Network Storage Structure
• Adjacency Matrix
• Adjacency List
Assignment
• Choose your own choice by today• Choose your own algorithm (no
duplications- FCFS) by 16 Sep 2016• Choose your own programming language
(GUI-based)• Can submit to both CE311 and CE312• Submit a report, source code, and .exe file
by 4 Nov 2016• Oral presentation on 18 and 25 Nov 2016
Assignment
• Group of three people will be assigned based on the name list
บทที ่4โครงสร้างข้อมูลสแตก
(Stack)
สแตก (Stack)
• สแตกเป็นโครงสร้างขอ้มูลเชิงเส้นที่มีขอ้กาํหนดวา่การเพิ่มหรือลบ
ขอ้มูลจะตอ้งทาํที่จุดเดียวเรียกวา่ Top
• สแตกเป็นโครงสร้างขอ้มูลแบบเขา้ทีหลงัออกก่อน (Last-In
First-Out : LIFO)
ตวัอย่างของสแตก
Stack Operation
1. Push
2. Pop
3. Stack Top
1. Pushการใส่หรือเพิ่มขอ้มูลลงในสแตกที่ตาํแหน่ง Top
2. Popการนาํขอ้มูลที่ตาํแหน่ง Top ออกจากสแตกหรือการลบขอ้มูลที่ตาํแหน่ง Top
3. Stack Topการขอดูขอ้มูลที่ตาํแหน่ง Top ของสแตก
Stack Implementation
สแตกเป็นโครงสร้างขอ้มูลที่ผูใ้ชจ้ะตอ้งสร้างขึ้นมาเอง โดยสามารถ
สร้างจากโครงสร้างขอ้มูลดงัต่อไปนี้
1. อาร์เรย์
2. ลิงคล์ิสต์
1. อาร์เรย์
2. ลงิค์ลสิต์
(1)(2)
ตวัอย่างการ Push
(1)
(2)
ตวัอย่างการ Pop
Stack Application
1. Reversing Data
2. Parsing Data
3. Postponing Data Usage
4. Backtracking Step
หมายถึง การเรียงลาํดบัขอ้มูลยอ้นหลงั
เช่น
{ 1 2 3 4 }
{ 4 3 2 1 }
1. Reversing Data
{ 1 2 3 4 }Push
1Stack
1.1 Reverse List
{ 1 2 3 4 }
21
Push
Stack
{ 1 2 3 4 }
23
1
Push
Stack
{ 1 2 3 4 }
234
1
Push
Stack
23
1
{ 4 }Pop
Stack
21
{ 4 3 }Pop
Stack
1
{ 4 3 2 }Pop
Stack
{ 4 3 2 1 }Pop
Stack
= Empty =
2 | 14 เศษ 0
Push
1.2 Convert Decimal to Binary
0Stack
7
2 | 2 | 14
เศษ 0เศษ 1
1
Push
0Stack
73
2 | 2 | 14
1
เศษ 0เศษ 1เศษ 1 1
11
2 |
Push
0Stack
73
11 1
Pop
0Stack
2 | 2 | 14
1
เศษ 0เศษ 1เศษ 1
2 |73
1
1 1Pop
0Stack
2 | 2 | 14
1
เศษ 0เศษ 1เศษ 1
2 |73
1 1 1Pop
0Stack
2 | 2 | 14
1
เศษ 0เศษ 1เศษ 1
2 |73
1 1 1 0Pop
Stack
2 | 2 | 14
1
เศษ 0เศษ 1เศษ 1
2 |73
= Empty =
2. Parsing Data
• หมายถึง การแยกขอ้มูลออกเป็นส่วน ๆ ที่ไม่เกี่ยวขอ้งกนัเพื่อใช้
ประมวลผลต่อไป
• เช่น คอมไพเลอร์แยก Source Program เป็นส่วน ๆ ไดแ้ก่ คาํ
สงวน ตวัแปร คาํสัง่
ถ้าเจอ (Push
Stack
ถ้าเจอ )Pop
Stack
2.1 Parse Parenthesis
เป็นการตรวจสอบวา่วงเลบ็ครบคู่หรือไม่
ทาํไดโ้ดย
ตวัอย่างที ่1 ( ( A + B ) / C )
( ( A + B ) / C ) Empty
( A + B ) / C ) (
A + B ) / C ) ( (
/ C ) (
Empty Empty
** MATCHED **
ตวัอย่างที ่2 ( ( A + B ) / C
( ( A + B ) / C Empty
( A + B ) / C (
A + B ) / C ( (
/ C (
Empty (
** Opening parenthesis NOT MATCHED **
ตวัอย่างที ่3 ( A + B ) / C )
( A + B ) / C ) Empty
A + B ) / C ) (
/ C ) Empty
) Empty
** Closing parenthesis NOT MATCHED **
3. Postponement
หมายถึง การหน่วงขอ้มูลไวช้ัว่ขณะ เพื่อรอการประมวลผลใน
ช่วงเวลาที่เหมาะสม
ทาํด้วยมอื:
1. ใส่วงเลบ็เพื่อกาํหนดลาํดบัการประมวลผล
2. เปลี่ยน (A @ B) เป็น (A B @) ทีละวงเลบ็
โดยทาํจากวงเลบ็ในสุดก่อน
3. ดึงวงเลบ็ออกทั้งหมด
3.1 Infix to Postfix
ตวัอย่างที ่1 A + B * C
( A + (B*C) )
( A + (BC*) )
( A (BC*)+)
A B C * +
ตวัอย่างที ่2 A + B * C - D / E
( ( A + (B*C) ) - (D/E) )
( ( A + (BC*) ) - (DE/) )
( ( A (BC*) +) (DE/) -)
A B C * + D E / -
จงเปลี่ยนนิพจน ์Infix ต่อไปนี้เป็น Postfix โดยทาํด้วยมอื
1. D - B + C
2. A * B + C * D
3. (A+B) * C - D * F + C
4. (A - 2 * (B + C) - D * E) * F
5. (A+B) * C + D + E * F - G
แบบฝึกหัด
1. พิจารณา Token ทีละตวั
- ถา้เป็น Operand ใหส้่งไป Output
- ถา้เป็น ( ให ้Push ลง Stack
- ถา้เป็น ) ให ้Pop ไป Output จนกวา่จะเป็น (
- ถา้เป็น Operator ให ้Pop ไป Output จนกวา่ Priority (Token) จะมากกวา่ Priority(StackTop) แลว้จึง Push ลง Stack
2. เมื่อครบทุก Token แลว้ให ้Pop ไปที่ Output จนหมด
ทาํโดยใช้สแตก: Priority 2: * , /1: + , -0: (
ตวัอย่างที ่1 A + B * C - D / E
A+B*C-D/E Empty Empty +B*C-D/E Empty A
B*C-D/E + A*C-D/E + A B C-D/E + * A B-D/E + * A B CD/E - A B C * +
/E - A B C * + DE - / A B C * + D
Empty - / A B C * + D EEmpty Empty A B C * + D E / -
ตวัอย่างที ่2 A * B - (C + D) + E
A*B-(C+D)+E Empty Empty *B-(C+D)+E Empty AB-(C+D)+E * A-(C+D)+E * A B(C+D)+E - A B *C+D)+E - ( A B *+D)+E - ( A B * C
D)+E - ( + A B * C)+E - ( + A B * C D+E - A B * C D +
E + A B * C D + -Empty + A B * C D + - EEmpty Empty A B * C D + - E +
จงเปลี่ยนนิพจน ์Infix ต่อไปนี้เป็น Postfix โดยใช้สแตก
1. D - B + C
2. A * B + C * D
3. (A+B) * C - D * F + C
4. (A - 2 * (B + C) - D * E) * F
5. (A+B) * C + D + E * F - G
แบบฝึกหัด
1. พิจารณาทีละ Token
- ถา้เป็น Operand ให ้Push ลง Stack
- ถา้เป็น Operator ให้
- Pop ตวัแรกใส่ B และ Pop ตวัที่ 2 ใส่ A
- ประมวลผล A @ B
- Push ผลลพัธ์ลง Stack
2. เมื่อครบทุก Token จะไดผ้ลลพัธ์อยูใ่น Stack
3.2 Evaluate Postfix
ตวัอย่าง การคาํนวณหาค่าของนิพจน์ Postfix
จงหาผลลพัธ์ของนิพจน์ Postfix ต่อไปนี้
1. 2 3 * 4 - 5 +
2. 2 3 4 + * 5 -
แบบฝึกหัด
4. Backtracking Step
หมายถึง การยอ้นกลบัไปยงัสถานะก่อนหนา้
4.1 Finding Goal
เป็นการคน้หาเส้นทางการเดินทางเพื่อไปสู่ยงัเป้าหมาย (Goal) ที่ตอ้งการ
ตวัอย่าง การเกบ็เส้นทางการเดินทางไวใ้นสแตก
Q & A