1 / 48

โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue

1. Charter 3. โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue. 2. Charter 3. โครงสร้างข้อมูลสแตก (Stack). 3. Charter 3. โครงสร้างข้อมูลสแตก (Stack).

zinna
Télécharger la présentation

โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 Charter 3 โครงสร้างข้อมูลแบบสแตกและคิว Stack and Queue

  2. 2 Charter 3 โครงสร้างข้อมูลสแตก (Stack)

  3. 3 Charter 3 โครงสร้างข้อมูลสแตก (Stack) ในการใช้งานโครงสร้างข้อมูลที่เปิดปลายเพียงด้านเดียว การดำเนินการกับข้อมูลในโครงสร้างสามารถกระทำได้เพียงปลายข้างหนึ่งเท่านั้น ข้อมูลที่ถูกบรรจุอยู่ในโครงสร้างดังกล่าว ตัวแรกไม่สามารถถูกดึงข้อมูลออกจากโครงสร้างได้ถ้าข้อมูลตัวที่เข้ามาในลำดับหลังยังไม่ถูกดึงออกไปก่อน โครงสร้างข้อมูลที่มีลักษณะดังกล่าวนี้ ไม่สามารถใช้งานโครงสร้างอาร์เรย์ (Array) ทั่วไปได้ จึงมีการใช้โครงสร้างข้อมูลที่เรียกว่า โครงสร้างข้อมูลสแตก (Stack) มาแทน

  4. 4 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) โครงสร้างข้อมูลแบบสแตก (Stack) เป็นโครงสร้างข้อมูลแบบรายการเชิงเส้น (Linear List) ที่มีลักษณะที่สำคัญคือ การนำข้อมูลเข้าสู่สแตก (Insertion : บางครั้งอาจเรียกว่า Pushing) และการนำข้อมูลออกจากสแตก (Deletion บางครั้งเรียกว่า Popping) สามารถกระทำได้เพียงปลายด้านเดียวของโครงสร้างเท่านั้น โดยข้อมูลที่เข้าไปเก็บทีหลังจะถูกนำออกมาใช้งานก่อน จะเรียกลักษณะแบบนี้ว่า เข้าหลังออกก่อน (Last In First Out : LIFO)

  5. 5 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) โครงสร้างของสแตก

  6. 6 Charter 3 ลักษณะของโครงสร้างข้อมูลสแตก (Stack) ลักษณะของสแตกในชีวิตประจำวัน

  7. 7 Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) โครงสร้างข้อมูลแบบสแตกสามารถ แทนได้ด้วยโครงสร้างข้อมูลอาร์เรย์ (Array)แต่กำหนดวิธีการเข้าถึงข้อมูลในอาร์เรย์นั้นตามกฏเกณฑ์ของสแตก คือ เข้าหลังออกก่อน (Last In First Out : LIFO) ดังนั้นการเข้าถึงข้อมูลในโครงสร้างสแตกจะต้องอาศัยพอยน์เตอร์ (Pointer) ซึ่งทำหน้าที่ชี้ตำแหน่งของข้อมูลตัวสุดท้ายของสแตก

  8. 8 E Pointer D C B A Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) โครงสร้างอาร์เรย์ (Array)

  9. 9 Stack[100] Pointer 1 2 99 100 … 1 8 … 2 8 20 … 3 8 20 6 … Charter 3 การแทนโครงสร้างข้อมูลสแตก (Stack) แสดงโครงสร้างข้อมูลสแตกด้วยอาร์เรย์ Stack[100]

  10. 10 Charter 3 การดำเนินการกับโครงสร้างข้อมูลสแตก (Stack) มีอยู่ 3 กระบวนการ คือ 1. การสร้างสแตก 2. การเพิ่มข้อมูลเข้าสแตก (Insertion หรือ Pushing) 3. การลบข้อมูลในสแตก (Deletion หรือ Popping)

  11. 11 Charter 3 ค่าที่เกี่ยวข้องกับโครงสร้างข้อมูลสแตก 1. สแตกพอยน์เตอร์ (Stack Pinter: SP)เป็นตัวชี้ข้อมูลค่าที่อยู่บนสุดของสแตก (Top of Stack) 2. พุช (Push)เป็นการกระทำเพื่อนำข้อมูลเข้าสู่สแตก เมื่อสแตกเต็มแล้ว หากมีการนำข้อมูลเข้าสู่สแตกอีกจะเกิดข้อผิดพลาดที่เรียกว่าโอเวอร์โฟลว์ (Over flow) ขึ้น 3. ป๊อบ (Pop)เป็นการกระทำเพื่อนำข้อมูลที่อยู่บนสุดออกมาจากโครงสร้างสแตก เมื่อนำข้อมูลค่าสุดท้ายออกจากสแตกแล้วจะทำให้สแตกว่างเปล่า (Empty) ได้ หากมีการ Pop ค่าข้อมูลอีกจะเกิดข้อผิดพลาดที่เรียกว่าอันเดอร์โฟลว์ (Under flow) ขึ้น

  12. 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. 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. 14 Q Push box Q onto stack S Push box S onto stack Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Pushing and Popping a stack (Continue)

  15. 15 Charter 3 ลักษณะการทำงานของโครงสร้างข้อมูลสแตก (Stack) Stack frames for subprogram calls

  16. 16 Charter 3 โครงสร้างข้อมูลคิว (Queue)

  17. 17 Charter 3 โครงสร้างข้อมูลคิว (Queue) โครงสร้างข้อมูลแบบคิว (Queue) จัดเป็นโครงสร้างข้อมูลแบบรายการเชิงเส้น (Liner Structure) ที่มีคุณลักษณะเฉพาะของตัวเอง โดยมีกฏเกณฑ์ของการเพิ่มข้อมูลเข้าที่ปลายด้านหนึ่งของโครงสร้างหรือตรงส่วนท้ายของคิว และลบข้อมูลหรือนำข้อมูลออกที่ปลายอีกด้านหนึ่งหรือตรงส่วนต้นของคิว ซึ่งมีลักษณะดังกล่าวที่มาสามารถพบเห็นได้ในเหตุการณ์ประจำวัน เช่น การเข้าแถวคิวเพื่อทำธุรกรรมในธนาคาร การเข้าแถวเพื่อซื้อตั๋วดูภาพยนต์ ฯลฯ

  18. 18 Charter 3 โครงสร้างข้อมูลคิว (Queue) ลักษณะสำคัญของคิว คือ สิ่งที่เข้าไปในแถวคิว (แถวอันดับ) เป็นอันดับ แรกจะได้รับการปฏิบัติหรือถูกกระทำก่อน และจบงานหรือหลุดกระบวนการออก จากแถวคิวเป็นอันดับแรกเช่นกัน จึงเรียกคุณลักษณะโครงสร้างข้อมูลแบบคิวว่า เป็นโครงสร้างแบบ เข้าก่อนออกก่อน (First In First Out : FIFO, First Come First Served : FCFS) จากลักษณะการทำงานดังกล่าว จึงมีการนำโครงสร้างข้อมูลแบบคิวมา ใช้ในงานคอมพิวเตอร์อย่างมากมายในหลายส่วนหลายระบบ ซึ่งมีลักษณะการ ทำงานเหมือนกับคิว เช่น ในระบบปฏิบัติการ (Operating System : OS) ของ คอมพิวเตอร์ในการจัดงานต่าง ๆ เข้าประมวลผล , ในระบบโทรคมนาคม (Communication) , ในระบบการทดลองดาวเทียม (Satellite)

  19. 19 Charter 3 การแทนโครงสร้างข้อมูลคิว (Queue) โครงสร้างข้อมูลคิวสามารถแทนได้ด้วยการ กำหนดโครงสร้างอาร์เรย์ (Array) เป็นตัวโครงสร้างของข้อมูลที่อยู่ในคิว และต้องมีการกำหนดตัวชี้ (Pointer ) อีก 2 ตัว เพื่อใช้ในการชี้ตำแหน่งข้อมูล ได้แก่ พอยน์เตอร์ F (Front Pointer)ทำหน้าที่ในการชี้ข้อมูลตำแหน่งแรกสุดของสมาชิกในโครงสร้างข้อมูลคิว และ พอยน์เตอร์ R (Rear Pointer)ทำหน้าที่ในการชี้ตำแหน่งข้อมูลสุดท้ายในโครงสร้าง เมื่อมีข้อมูลใหม่เข้าสู่โครงสร้างคิว จะเข้าทางปลายของโครงสร้างซึ่งพอยน์เตอร์ R ชี้ตำแหน่งอยู่ ทำให้ตำแหน่ง R เปลี่ยนไป และเมื่อมีการลบข้อมูลภายในโครงสร้าง จะกระทำทางด้านต้นหรือโครงสร้างซึ่งพอยน์เตอร์ F ชี้ตำแหน่งอยู่ ทำให้ตำแหน่ง F เปลี่ยนแปลงเช่นเดียวกัน

  20. 20 Insert … Data 4 Data 3 Data 2 Data 1 … Delete R F Charter 3 การแทนโครงสร้างข้อมูลคิว (Queue) การแทนโครงสร้างข้อมูลคิวด้วยโครงสร้างอาร์เรย์

  21. 21 Charter 3 การดำเนินการโครงสร้างข้อมูลคิว การดำเนินการโครงสร้างข้อมูลคิวแบ่งออกเป็น 3 ลักษณะ ได้แก่ 1. การสร้างข้อมูลโครงสร้างคิว (Queue Creation) 2. การนำข้อมูลเข้าสู่โครงสร้างคิว (Insert Data) 3. การนำข้อมูลออกจากโครงสร้างคิว (Delete Data)

  22. 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. 23 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว เป็นกระบวนการอ่านข้อมูลจากภายนอกเข้าสู่โครงสร้างข้อมูลคิวทางด้านปลายที่พอยน์เตอร์ R ชี้อยู่ เมื่อมีการนำข้อมูลเข้า สู่โครงสร้างคิวเรียบร้อยแล้ว พอยน์เตอร์ R จะเปลี่ยนตำแหน่ง ชี้ไปยังตำแหน่งที่ว่างตำแหน่งถัดไป ข้อควรคำนึงถึง คือ ในขณะที่คิวเต็ม (Full Queues)หรือไม่มีช่องว่างเหลืออยู่ จะไม่สามารถนำข้อมูลเข้าไปเก็บในโครงสร้างคิวได้อีก ซึ่งจะทำให้เกิดปัญหา “Overflow” ขึ้น

  24. 24 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว • ขั้นตอนการนำข้อมูลเข้าสู่โครงสร้างคิว มีดังนี้ • 1. เมื่อมีข้อมูลเข้าสู่คิว ให้ตรวจสอบว่าคิวเต็มหรือไม่ • 2. ถ้าคิวไม่เต็มให้เลื่อนตำแหน่งพอยน์เตอร์ R แล้วนำข้อมูลเข้าสู่คิว • 3. ถ้าคิวเต็มไม่ให้มีการรับข้อมูล ตรวจสอบเงื่อนไขว่า ถ้าเป็นข้อมูลตัว • แรกในคิว ให้เปลี่ยนพอยน์เตอร์ F ให้ชี้ค่าแรก

  25. 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. 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. 27 Charter 3 การนำข้อมูลเข้าสู่โครงสร้างข้อมูลคิว

  28. 28 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว เป็นลบข้อมูลออกจากโครงสร้างคิวทางด้านต้นของโครงสร้างคิว โดยมีพอยน์เตอร์ F เป็นพอยน์เตอร์ข้อมูลอยู่ เมื่อมีการลบข้อมูล ออกจากโครงสร้างคิวเรียบร้อยแล้ว พอยน์เตอร์ F จะเลื่อนตำแหน่ง ไปยังตำแหน่งถัดไป ข้อควรคำนึงถึง คือ เมื่อคิวว่าง (Empty queue) หรือไม่มีข้อมูลเหลืออยู่ จะไม่สามารถนำข้อมูลออกจากคิวได้อีก ซึ่ง จะทำให้เกิดปัญหา “underflow” ขึ้น

  29. 29 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว ขั้นตอนการนำข้อมูลออกจากโครงสร้างคิว มีดังนี้ 1. ตรวจสอบว่าเป็นคิวว่าง (Empty Queues) หรือไม่ 2. ถ้าคิวไม่ว่างให้นำข้อข้อมูลออกจากคิว พร้อมเลื่อนตำแหน่งพอยน์ เตอร์ F 3. ถ้ามีข้อมูลอยู่เพียงตัวเดียว ให้กำหนดให้พอยน์เตอร์ F และ R เป็น ศูนย์ (0)

  30. 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. 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. 32 Charter 3 การนำข้อมูลออกจากโครงสร้างข้อมูลคิว

  33. 33 Charter 3 สรุปการใช้งานโครงสร้างข้อมูลคิว จากการดำเนินการกับโครงสร้างคิวจะเห็นได้ว่า โครงสร้างคิวยังไม่มี ประสิทธิภาพเพียงใดนัก เนื่องจากเหตุผลดังนี้ เมื่อมีการเพิ่มข้อมูลจนเต็ม (Full Queue) และมีการลบข้อมูลออกจาก โครงร้างคิวแล้ว พอยน์เตอร์ F จะยังคงอยู่ที่ตำแหน่งเดิม ไม่สามารถเปลี่ยน ไปที่ตำแหน่งเริ่มต้นใหม่ได้จนกว่าจะมีการลบข้อมูลออกจากคิวหมดแล้ว (Empty Queue)จึงจะสามารถกำหนดพอยน์เตอร์ข้อมูล F และ R ให้กลับไปยัง ตำแหน่งเริ่มต้นใหม่ได้ ทำให้เสียพื้นที่ของโครงสร้างคิวในตำแหน่งที่พอยน์ เตอร์ F ผ่านมาไปเนื่องจากต้องรอให้ตำแหน่งของพอยน์เตอร์ F ไปยังตำแหน่ง สุดท้ายก่อน (เมื่อคิวว่าง) จึงจะสามารถใช้พื้นที่ดังกล่าวได้

  34. 34 Charter 3 สรุปการใช้งานโครงสร้างข้อมูลคิว จากสาเหตุดังกล่าวมาแล้ว จึงได้มีการพัฒนาโครงสร้างคิวให้มีความยืด หยุ่นมากขึ้น สามารถใช้งานพื้นที่โครงสร้างคิวได้อย่างเต็มประสิทธิภาพ โดยการ นำปลายทางของโครงสร้าง คือ ด้านหน้าของโครงสร้าง (Front) และด้านหลังของ โครงสร้าง (Rear) มาเชื่อมต่อกันในลักษณะวงกลม เรียกว่า คิววงกลม (Circular Queue)

  35. 35 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ลักษณะของโครงสร้างข้อมูลคิววงกลม

  36. 36 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) รูปแบบของโครงสร้างคิววงกลม มี 2 ลักษณะ คือ 1. การดำเนินการเคลื่อนที่แบบทวนเข็มนาฬิกา (Counterclockwise) 2. การดำเนินการเคลื่อนที่แบบตามเข็มนาฬิกา (Clockwise)

  37. 37 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ลักษณะของคิวว่าง (Empty queues) และคิวเต็ม (Full queues)

  38. 38 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) จากรูปจะสังเกตุว่า ในขณะที่คิวว่าง (Empty queues) และเมื่อคิวเต็ม (Full queues) จะมีตำแหน่งที่พอยน์เตอร์ F อยู่ติดกับพอยน์เตอร์ R เหมือนกัน ทำให้เกิดปัญหาขึ้นได้ในการตรวจสอบค่าของโครงสร้างคิววงกลม แก้ไขด้วยวิธี การดังนี้ 1. กำหนดค่าตรรกะ (Boolean) ขึ้นมาเพื่อใช้ในการตรวจสอบค่าคิวว่าง (Empty queues) และคิวเต็ม (Full queues) 2. กำหนดตัวนับ (Counter) ขึ้นมาเพื่อนับจำนวนข้อมูลว่ามีอยู่ในโครง สร้างคิวเท่าใด

  39. 39 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) • ขั้นตอนการเพิ่มข้อมูลเข้าสู่โครงสร้างคิววงกลม • 1. ตรวจสอบว่าพอยน์เตอร์ R อยู่ที่ตำแหน่งสุดท้ายหรือไม่ ถ้าใช่ให้กำ • หนดให้มาที่ค่าเริ่มต้น ถ้าไม่ใช่ให้เลื่อนตำแหน่งต่อไป • 2. ตรวจสอบว่าคิวเต็มหรือไม่ ถ้าไม่เต็มให้เพิ่มข้อมูล • 3. ตรวจสอบว่าข้อมูลที่เข้ามาเป็นค่าแรกในคิวหรือไม่ ถ้าใช่ให้พอยน์ • เตอร์ F เลื่อนตำแหน่งต่อไป

  40. 40 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue)

  41. 41 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ขั้นตอนการลบข้อมูลออกจากโครงสร้างคิววงกลม 1.ตรวจสอบว่าโครงสร้างคิวว่าง (Empty Queue) หรือไม่ถ้าไม่ใช่ให้ นำข้อมูลออกจากโครงสร้างคิว 2. ตรวจสอบว่ามีข้อมูลเพียงค่าเดียวหรือไม่ ถ้าใช่ให้พอยน์เตอร์ F และ R มีค่าเป็น 0 3. ตรวจสอบว่าพอยน์เตอร์ F อยู่ที่ตำแหน่งท้ายสุดของโครงสร้างหรือไม่ ถ้าใช่ให้พอยน์เตอร์ F ไป

  42. 42 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue)

  43. 43 Charter 3 โครงสร้างข้อมูลคิววงกลม (Circular Queue) ตัวอย่างลักษณะงานที่เป็นคิววงกลม

  44. 44 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • นิพจน์ INFIX (INFIX Notation) • หมายถึง ประโยคนิพจน์ทางด้านคณิตศาสตร์ทั่วไปที่นิยมเขียนให้รูปของ • นิพจน์ที่มีตัวดำเนินการ (Operator) อยู่ระหว่างตัวกระทำ (Operands) เช่น A+B • ข้อดี • นิพจน์เขียนอยู่ในรูปแบบทั่วไปของสมการทางคณิตศาสตร์ ทำให้เข้าใจง่าย • ข้อเสีย • ลำดับความสำคัญของเครื่องหมาย (Operator) ต่างกันทำให้เกิดความสับ • สนในการคำนวณ

  45. 45 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • นิพจน์ POSTFIX (POSTFIX Notation) • หมายถึง ประโยคนิพจน์ทางด้านคณิตศาสตร์ทั่วไปที่เขียนให้รูปของนิพจน์ • ที่มีตัวดำเนินการ (Operator) อยู่หลังตัวกระทำ (Operands) ทั้งหมด เช่น AB+ • ลักษณะที่สำคัญของนิพจน์ POSTFIX คือ • 1. ตัวดำเนินการทุกตัวจะต้องอยู่หลังตัวกระทำสองตัวเสมอ • 2. ตำดำเนินการทุกตัวจะถูกวางให้อยู่ในลำดับที่ถูกต้องในการคำนวณ • 3. ไม่มีเครื่องหมายวงเล็บ ()

  46. 46 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix นิพจน์ POSTFIX (POSTFIX Notation) ข้อดี 1. ไม่มีปัญหาในเรื่องของความสำคัญของเครื่องหมายดำเนินการ 2. ลดปัญหาการตรวจดูลำดับการทำงานของตัวดำเนินการ ข้อเสีย 1. ทำความเข้าใจยากและสับสนกับเครื่องหมาย

  47. 47 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix • ขั้นตอนการแปลงนิพจน์ INFIX เป็นนิพจน์ POSTFIX มี 5 ขั้นตอน • 1. ถ้าข้อมูลเข้า (Input character) เป็นตัวกระทำ (Operand) ให้นำไป • ไว้ที่ส่วนของผลลัพธ์(POSTFIX String) ที่จัดเตรียมไว้ • 2. ถ้าข้อมูลข้าเป็นตัวดำเนินการ (Operator) ให้ทำดังนี้ • 2.1 ถ้าสแตกว่าง (Empty Stack) ให้นำตัวดำเนินการเก็บลงสู่สแตก • 2.2 ถ้าสแตกไม่ว่าง (แสดงว่ามีตัวดำเนินการอยู่ในสแตกก่อนแล้ว) • ให้เปรียบเทียบลำดับความสำคัญของของตัวดำเนินการใหม่กับตัวดำเนินการเก่า • 3. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บเปิด “(“ให้นำเครื่องหมายนี้ไปเก็บ • ลงในสแตก

  48. 48 Charter 3 การแปลงนิพจน์ Infix ให้เป็น Postfix 4. ถ้าข้อมูลเข้าเป็นเครื่องหมายวงเล็บปิด “)” ให้นำตัวกระทำ (Operand) ออกจากสแตกไปต่อในส่วนที่เป็นผลลัพธ์จนกว่าจะพบเครื่องหมายวงเล็บเปิด แล้วทิ้งเครื่องหมายวงเล็บเปิดและวงเล็บปิดไป 5. ถ้าข้อมูลเข้าหมดแล้ว ให้นำตัวดำเนินการ (Operator) ออกจากสแตก ไปต่อที่ผลลัพธ์จนกว่าจะหมดตามลำดับ

More Related