500 likes | 735 Views
1. Charter 3. โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue. 2. Charter 3. โครงสร้างข้อมูลสแตก (Stack). 3. Charter 3. โครงสร้างข้อมูลสแตก (Stack).
E N D
1 Charter 3 โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue
2 Charter 3 โครงสร้างข้อมูลสแตก (Stack)
3 Charter 3 โครงสร้างข้อมูลสแตก (Stack) ในการใช้งานโครงสร้างข้อมูลที่เปิดปลายเพียงด้านเดียว การดำเนินการกับข้อมูลในโครงสร้างสามารถกระทำได้เพียงปลายข้างหนึ่งเท่านั้น ข้อมูลที่ถูกบรรจุอยู่ในโครงสร้างดังกล่าว ตัวแรกไม่สามารถถูกดึงข้อมูลออกจากโครงสร้างได้ถ้าข้อมูลตัวที่เข้ามาในลำดับหลังยังไม่ถูกดึงออกไปก่อน โครงสร้างข้อมูลที่มีลักษณะดังกล่าวนี้ ไม่สามารถใช้งานโครงสร้างอาร์เรย์ (Array) ทั่วไปได้ จึงมีการใช้โครงสร้างข้อมูลที่เรียกว่า โครงสร้างข้อมูลสแตก (Stack) มาแทน
4 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) โครงสร้างข้อมูลแบบสแตก (Stack) เป็นโครงสร้างข้อมูลแบบรายการเชิงเส้น (Linear List) ที่มีลักษณะที่สำคัญคือ การนำข้อมูลเข้าสู่สแตก (Insertion : บางครั้งอาจเรียกว่า Pushing) และการนำข้อมูลออกจากสแตก (Deletion บางครั้งเรียกว่า Popping) สามารถกระทำได้เพียงปลายด้านเดียวของโครงสร้างเท่านั้น โดยข้อมูลที่เข้าไปเก็บทีหลังจะถูกนำออกมาใช้งานก่อน จะเรียกลักษณะแบบนี้ว่า เข้าหลังออกก่อน (Last In First Out : LIFO)
5 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) โครงสร้างของสแตก
6 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) ลักษณะของสแตกในชีวิตประจำวัน
7 Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) โครงสร้างข้อมูลแบบสแตกสามารถ แทนได้ด้วยโครงสร้างข้อมูลอาร์เรย์ (Array)แต่กำหนดวิธีการเข้าถึงข้อมูลในอาร์เรย์นั้นตามกฏเกณฑ์ของสแตก คือ เข้าหลังออกก่อน (Last In First Out : LIFO) ดังนั้นการเข้าถึงข้อมูลในโครงสร้างสแตกจะต้องอาศัยพอยน์เตอร์ (Pointer) ซึ่งทำหน้าที่ชี้ตำแหน่งของข้อมูลตัวสุดท้ายของสแตก
8 E Pointer D C B A Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) โครงสร้างอาร์เรย์ (Array)
9 Stack[100] Pointer 1 2 99 100 … 1 8 … 2 8 20 … 3 8 20 6 … Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) แสดงโครงสร้างข้อมูลสแตกด้วยอาร์เรย์ Stack[100]
10 Charter 3 การดำเนินการกับโครงสร้างข้อมูลสแตก (Stack) มีอยู่ 3 กระบวนการ คือ 1. การสร้างสแตก 2. การเพิ่มข้อมูลเข้าสแตก (Insertion หรือ Pushing) 3. การลบข้อมูลในสแตก (Deletion หรือ Popping)
11 Charter 3 ค่าที่เกี่ยวข้องกับโครงสร้างข้อมูลสแตก 1. สแตกพอยน์เตอร์ (Stack Pinter: SP)เป็นตัวชี้ข้อมูลค่าที่อยู่บนสุดของสแตก (Top of Stack) 2. พุช (Push)เป็นการกระทำเพื่อนำข้อมูลเข้าสู่สแตก เมื่อสแตกเต็มแล้ว หากมีการนำข้อมูลเข้าสู่สแตกอีกจะเกิดข้อผิดพลาดที่เรียกว่าโอเวอร์โฟลว์ (Over flow) ขึ้น 3. ป๊อบ (Pop)เป็นการกระทำเพื่อนำข้อมูลที่อยู่บนสุดออกมาจากโครงสร้างสแตก เมื่อนำข้อมูลค่าสุดท้ายออกจากสแตกแล้วจะทำให้สแตกว่างเปล่า (Empty) ได้ หากมีการ Pop ค่าข้อมูลอีกจะเกิดข้อผิดพลาดที่เรียกว่าอันเดอร์โฟลว์ (Under flow) ขึ้น
12 Push box Q onto empty stack Q A Push box A onto stack Pop box A from stack Q A Pop box Q from stack Q (Empty) Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Pushing and Popping a stack
13 Push box R onto empty stack R D Push box D onto stack M Push box M onto stack M D Pop box M from stack Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Pushing and Popping a stack (Continue)
14 Q Push box Q onto stack S Push box S onto stack Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Pushing and Popping a stack (Continue)
15 Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Stack frames for subprogram calls
16 Charter 3 โครงสร้างข้อมูลคิว (Queue)
17 Charter 3 โครงสร้างข้อมูลคิว (Queue) โครงสร้างข้อมูลแบบคิว (Queue) จัดเป็นโครงสร้างข้อมูลแบบรายการเชิงเส้น (Liner Structure) ที่มีคุณลักษณะเฉพาะของตัวเอง โดยมีกฏเกณฑ์ของการเพิ่มข้อมูลเข้าที่ปลายด้านหนึ่งของโครงสร้างหรือตรงส่วนท้ายของคิว และลบข้อมูลหรือนำข้อมูลออกที่ปลายอีกด้านหนึ่งหรือตรงส่วนต้นของคิว ซึ่งมีลักษณะดังกล่าวที่มาสามารถพบเห็นได้ในเหตุการณ์ประจำวัน เช่น การเข้าแถวคิวเพื่อทำธุรกรรมในธนาคาร การเข้าแถวเพื่อซื้อตั๋วดูภาพยนต์ ฯลฯ
18 Charter 3 โครงสร้างข้อมูลคิว (Queue) ลักษณะสำคัญของคิว คือ สิ่งที่เข้าไปในแถวคิว (แถวอันดับ) เป็นอันดับ แรกจะได้รับการปฏิบัติหรือถูกกระทำก่อน และจบงานหรือหลุดกระบวนการออก จากแถวคิวเป็นอันดับแรกเช่นกัน จึงเรียกคุณลักษณะโครงสร้างข้อมูลแบบคิวว่า เป็นโครงสร้างแบบ เข้าก่อนออกก่อน (First In First Out : FIFO, First Come First Served : FCFS) จากลักษณะการทำงานดังกล่าว จึงมีการนำโครงสร้างข้อมูลแบบคิวมา ใช้ในงานคอมพิวเตอร์อย่างมากมายในหลายส่วนหลายระบบ ซึ่งมีลักษณะการ ทำงานเหมือนกับคิว เช่น ในระบบปฏิบัติการ (Operating System : OS) ของ คอมพิวเตอร์ในการจัดงานต่าง ๆ เข้าประมวลผล , ในระบบโทรคมนาคม (Communication) , ในระบบการทดลองดาวเทียม (Satellite)
19 Charter 3 การแทนโครงสร้างข้อมูลคิว (Queue) โครงสร้างข้อมูลคิวสามารถแทนได้ด้วยการ กำหนดโครงสร้างอาร์เรย์ (Array) เป็นตัวโครงสร้างของข้อมูลที่อยู่ในคิว และต้องมีการกำหนดตัวชี้ (Pointer ) อีก 2 ตัว เพื่อใช้ในการชี้ตำแหน่งข้อมูล ได้แก่ พอยน์เตอร์ F (Front Pointer)ทำหน้าที่ในการชี้ข้อมูลตำแหน่งแรกสุดของสมาชิกในโครงสร้างข้อมูลคิว และ พอยน์เตอร์ R (Rear Pointer)ทำหน้าที่ในการชี้ตำแหน่งข้อมูลสุดท้ายในโครงสร้าง เมื่อมีข้อมูลใหม่เข้าสู่โครงสร้างคิว จะเข้าทางปลายของโครงสร้างซึ่งพอยน์เตอร์ R ชี้ตำแหน่งอยู่ ทำให้ตำแหน่ง R เปลี่ยนไป และเมื่อมีการลบข้อมูลภายในโครงสร้าง จะกระทำทางด้านต้นหรือโครงสร้างซึ่งพอยน์เตอร์ F ชี้ตำแหน่งอยู่ ทำให้ตำแหน่ง F เปลี่ยนแปลงเช่นเดียวกัน
20 Insert … Data 4 Data 3 Data 2 Data 1 … Delete R F Charter 3 การแทนโครงสร้างข้อมูลคิว (Queue) การแทนโครงสร้างข้อมูลคิวด้วยโครงสร้างอาร์เรย์
21 Charter 3 การดำเนินการโครงสร้างข้อมูลคิว การดำเนินการโครงสร้างข้อมูลคิวแบ่งออกเป็น 3 ลักษณะ ได้แก่ 1. การสร้างข้อมูลโครงสร้างคิว (Queue Creation) 2. การนำข้อมูลเข้าสู่โครงสร้างคิว (Insert Data) 3. การนำข้อมูลออกจากโครงสร้างคิว (Delete Data)
22 อาร์เรย์ขนาด 100 ช่อง 1 2 3 …… 99 100 int queue[100]; int front = 0 , rear = 0; Charter 3 การสร้างข้อมูลโครงสร้างคิว (Queue Creation) เป็นการจัดเตรียมโครงสร้างไว้สำหรับเก็บข้อมูลที่มีลักษณะการประ มวลผลแบบแถวคิว ซึ่งโดยทั่วไปจะเป็นโครงสร้างอาร์เรย์ (Array) มีขั้นตอน ดังนี้ 1. การประกาศอาร์เรย์ที่มีขนาดตามโครงสร้างของคิวตามต้องการ 2. ประกาศตัวชี้ (Pointer) 2 ตัวเพื่อใช้ดำเนินการกับข้อมูลในโครง สร้างคิว คือ ตัวแปร Front Pointer และ Rear Pointer
23 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว เป็นกระบวนการอ่านข้อมูลจากภายนอกเข้าสู่โครงสร้างข้อมูลคิวทางด้านปลายที่พอยน์เตอร์ R ชี้อยู่ เมื่อมีการนำข้อมูลเข้า สู่โครงสร้างคิวเรียบร้อยแล้ว พอยน์เตอร์ R จะเปลี่ยนตำแหน่ง ชี้ไปยังตำแหน่งที่ว่างตำแหน่งถัดไป ข้อควรคำนึงถึง คือ ในขณะที่คิวเต็ม (Full Queues)หรือไม่มีช่องว่างเหลืออยู่ จะไม่สามารถนำข้อมูลเข้าไปเก็บในโครงสร้างคิวได้อีก ซึ่งจะทำให้เกิดปัญหา “Overflow” ขึ้น
24 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว • ขั้นตอนการนำข้อมูลเข้าสู่โครงสร้างคิว มีดังนี้ • 1. เมื่อมีข้อมูลเข้าสู่คิว ให้ตรวจสอบว่าคิวเต็มหรือไม่ • 2. ถ้าคิวไม่เต็มให้เลื่อนตำแหน่งพอยน์เตอร์ R แล้วนำข้อมูลเข้าสู่คิว • 3. ถ้าคิวเต็มไม่ให้มีการรับข้อมูล ตรวจสอบเงื่อนไขว่า ถ้าเป็นข้อมูลตัว • แรกในคิว ให้เปลี่ยนพอยน์เตอร์ F ให้ชี้ค่าแรก
25 1 2 3 4 5 1. เมื่อคิวว่าง (Empty Queue) Empty Empty Empty Empty Empty F = 0 , R = 0 1 2 3 4 5 2. เมื่อนำค่า A เข้าสู่โครงสร้างคิว A Empty Empty Empty Empty F R 1 2 3 4 5 3. เมื่อนำค่า B เข้าสู่โครงสร้างคิว A B Empty Empty Empty F R Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว
26 1 2 3 4 5 4. เมื่อนำค่า C เข้าสู่โครงสร้างคิว A B C Empty Empty F R 1 2 3 4 5 5. เมื่อนำค่า D เข้าสู่โครงสร้างคิว A B C D Empty F R 1 2 3 4 5 6. เมื่อนำค่า E เข้าสู่โครงสร้างคิว ไม่สามารถนำข้อมูลเข้าได้อีก A B C D E F R Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว
27 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว
28 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว เป็นลบข้อมูลออกจากโครงสร้างคิวทางด้านต้นของโครงสร้างคิว โดยมีพอยน์เตอร์ F เป็นพอยน์เตอร์ข้อมูลอยู่ เมื่อมีการลบข้อมูล ออกจากโครงสร้างคิวเรียบร้อยแล้ว พอยน์เตอร์ F จะเลื่อนตำแหน่ง ไปยังตำแหน่งถัดไป ข้อควรคำนึงถึง คือ เมื่อคิวว่าง (Empty queue) หรือไม่มีข้อมูลเหลืออยู่ จะไม่สามารถนำข้อมูลออกจากคิวได้อีก ซึ่ง จะทำให้เกิดปัญหา “underflow” ขึ้น
29 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว ขั้นตอนการนำข้อมูลออกจากโครงสร้างคิว มีดังนี้ 1. ตรวจสอบว่าเป็นคิวว่าง (Empty Queues) หรือไม่ 2. ถ้าคิวไม่ว่างให้นำข้อข้อมูลออกจากคิว พร้อมเลื่อนตำแหน่งพอยน์ เตอร์ F 3. ถ้ามีข้อมูลอยู่เพียงตัวเดียว ให้กำหนดให้พอยน์เตอร์ F และ R เป็น ศูนย์ (0)
30 1 2 3 4 5 1. เมื่อคิวเต็ม (Full Queue) A B C D E F R 1 2 3 4 5 2. เมื่อนำค่า A ออกจากคิว Empty B C D E F R 1 2 3 4 5 3. เมื่อนำค่า B ออกจากคิว Empty Empty C D E R F Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว
31 1 2 3 4 5 4. เมื่อนำค่า C ออกจากคิว Empty Empty Empty D E F R 1 2 3 4 5 5. เมื่อนำค่า ออกจากคิว Empty Empty Empty Empty E F R 1 2 3 4 5 6. เมื่อนำค่า E ออกจากคิว ไม่สามารถนำข้อมูลออกได้อีก Empty Empty Empty Empty Empty F= 0 ,R = 0 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว
32 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว
33 Charter 3 สรุปการใช้งานโครงสร้างข้อมูลคิว จากการดำเนินการกับโครงสร้างคิวจะเห็นได้ว่า โครงสร้างคิวยังไม่มี ประสิทธิภาพเพียงใดนัก เนื่องจากเหตุผลดังนี้ เมื่อมีการเพิ่มข้อมูลจนเต็ม (Full Queue) และมีการลบข้อมูลออกจาก โครงร้างคิวแล้ว พอยน์เตอร์ F จะยังคงอยู่ที่ตำแหน่งเดิม ไม่สามารถเปลี่ยน ไปที่ตำแหน่งเริ่มต้นใหม่ได้จนกว่าจะมีการลบข้อมูลออกจากคิวหมดแล้ว (Empty Queue)จึงจะสามารถกำหนดพอยน์เตอร์ข้อมูล F และ R ให้กลับไปยัง ตำแหน่งเริ่มต้นใหม่ได้ ทำให้เสียพื้นที่ของโครงสร้างคิวในตำแหน่งที่พอยน์ เตอร์ F ผ่านมาไปเนื่องจากต้องรอให้ตำแหน่งของพอยน์เตอร์ F ไปยังตำแหน่ง สุดท้ายก่อน (เมื่อคิวว่าง) จึงจะสามารถใช้พื้นที่ดังกล่าวได้
34 Charter 3 สรุปการใช้งานโครงสร้างข้อมูลคิว จากสาเหตุดังกล่าวมาแล้ว จึงได้มีการพัฒนาโครงสร้างคิวให้มีความยืด หยุ่นมากขึ้น สามารถใช้งานพื้นที่โครงสร้างคิวได้อย่างเต็มประสิทธิภาพ โดยการ นำปลายทางของโครงสร้าง คือ ด้านหน้าของโครงสร้าง (Front) และด้านหลังของ โครงสร้าง (Rear) มาเชื่อมต่อกันในลักษณะวงกลม เรียกว่า คิววงกลม (Circular Queue)
35 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ลักษณะของโครงสร้างข้อมูลคิววงกลม
36 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) รูปแบบของโครงสร้างคิววงกลม มี 2 ลักษณะ คือ 1. การดำเนินการเคลื่อนที่แบบทวนเข็มนาฬิกา (Counterclockwise) 2. การดำเนินการเคลื่อนที่แบบตามเข็มนาฬิกา (Clockwise)
37 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ลักษณะของคิวว่าง (Empty queues) และคิวเต็ม (Full queues)
38 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) จากรูปจะสังเกตุว่า ในขณะที่คิวว่าง (Empty queues) และเมื่อคิวเต็ม (Full queues) จะมีตำแหน่งที่พอยน์เตอร์ F อยู่ติดกับพอยน์เตอร์ R เหมือนกัน ทำให้เกิดปัญหาขึ้นได้ในการตรวจสอบค่าของโครงสร้างคิววงกลม แก้ไขด้วยวิธี การดังนี้ 1. กำหนดค่าตรรกะ (Boolean) ขึ้นมาเพื่อใช้ในการตรวจสอบค่าคิวว่าง (Empty queues) และคิวเต็ม (Full queues) 2. กำหนดตัวนับ (Counter) ขึ้นมาเพื่อนับจำนวนข้อมูลว่ามีอยู่ในโครง สร้างคิวเท่าใด
39 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) • ขั้นตอนการเพิ่มข้อมูลเข้าสู่โครงสร้างคิววงกลม • 1. ตรวจสอบว่าพอยน์เตอร์ R อยู่ที่ตำแหน่งสุดท้ายหรือไม่ ถ้าใช่ให้กำ • หนดให้มาที่ค่าเริ่มต้น ถ้าไม่ใช่ให้เลื่อนตำแหน่งต่อไป • 2. ตรวจสอบว่าคิวเต็มหรือไม่ ถ้าไม่เต็มให้เพิ่มข้อมูล • 3. ตรวจสอบว่าข้อมูลที่เข้ามาเป็นค่าแรกในคิวหรือไม่ ถ้าใช่ให้พอยน์ • เตอร์ F เลื่อนตำแหน่งต่อไป
40 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue)
41 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ขั้นตอนการลบข้อมูลออกจากโครงสร้างคิววงกลม 1.ตรวจสอบว่าโครงสร้างคิวว่าง (Empty Queue) หรือไม่ถ้าไม่ใช่ให้ นำข้อมูลออกจากโครงสร้างคิว 2. ตรวจสอบว่ามีข้อมูลเพียงค่าเดียวหรือไม่ ถ้าใช่ให้พอยน์เตอร์ F และ R มีค่าเป็น 0 3. ตรวจสอบว่าพอยน์เตอร์ F อยู่ที่ตำแหน่งท้ายสุดของโครงสร้างหรือไม่ ถ้าใช่ให้พอยน์เตอร์ F ไป
42 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue)
43 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ตัวอย่างลักษณะงานที่เป็นคิววงกลม
44 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • นิพจน์ INFIX (INFIX Notation) • หมายถึง ประโยคนิพจน์ทางด้านคณิตศาสตร์ทั่วไปที่นิยมเขียนให้รูปของ • นิพจน์ที่มีตัวดำเนินการ (Operator) อยู่ระหว่างตัวกระทำ (Operands) เช่น A+B • ข้อดี • นิพจน์เขียนอยู่ในรูปแบบทั่วไปของสมการทางคณิตศาสตร์ ทำให้เข้าใจง่าย • ข้อเสีย • ลำดับความสำคัญของเครื่องหมาย (Operator) ต่างกันทำให้เกิดความสับ • สนในการคำนวณ
45 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • นิพจน์ POSTFIX (POSTFIX Notation) • หมายถึง ประโยคนิพจน์ทางด้านคณิตศาสตร์ทั่วไปที่เขียนให้รูปของนิพจน์ • ที่มีตัวดำเนินการ (Operator) อยู่หลังตัวกระทำ (Operands) ทั้งหมด เช่น AB+ • ลักษณะที่สำคัญของนิพจน์ POSTFIX คือ • 1. ตัวดำเนินการทุกตัวจะต้องอยู่หลังตัวกระทำสองตัวเสมอ • 2. ตำดำเนินการทุกตัวจะถูกวางให้อยู่ในลำดับที่ถูกต้องในการคำนวณ • 3. ไม่มีเครื่องหมายวงเล็บ ()
46 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix นิพจน์ POSTFIX (POSTFIX Notation) ข้อดี 1. ไม่มีปัญหาในเรื่องของความสำคัญของเครื่องหมายดำเนินการ 2. ลดปัญหาการตรวจดูลำดับการทำงานของตัวดำเนินการ ข้อเสีย 1. ทำความเข้าใจยากและสับสนกับเครื่องหมาย
47 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • ขั้นตอนการแปลงนิพจน์ INFIX เป็นนิพจน์ POSTFIX มี 5 ขั้นตอน • 1. ถ้าข้อมูลเข้า (Input character) เป็นตัวกระทำ (Operand) ให้นำไป • ไว้ที่ส่วนของผลลัพธ์(POSTFIX String) ที่จัดเตรียมไว้ • 2. ถ้าข้อมูลข้าเป็นตัวดำเนินการ (Operator) ให้ทำดังนี้ • 2.1 ถ้าสแตกว่าง (Empty Stack) ให้นำตัวดำเนินการเก็บลงสู่สแตก • 2.2 ถ้าสแตกไม่ว่าง (แสดงว่ามีตัวดำเนินการอยู่ในสแตกก่อนแล้ว) • ให้เปรียบเทียบลำดับความสำคัญของของตัวดำเนินการใหม่กับตัวดำเนินการเก่า • 3. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บเปิด “(“ให้นำเครื่องหมายนี้ไปเก็บ • ลงในสแตก
48 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix 4. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บปิด “)” ให้นำตัวกระทำ (Operand) ออกจากสแตกไปต่อในส่วนที่เป็นผลลัพธ์จนกว่าจะพบเครื่องหมายวงเล็บเปิด แล้วทิ้งเครื่องหมายวงเล็บเปิดและวงเล็บปิดไป 5. ถ้าข้อมูลเข้าหมดแล้ว ให้นำตัวดำเนินการ (Operator) ออกจากสแตก ไปต่อที่ผลลัพธ์จนกว่าจะหมดตามลำดับ