--- title: (สำรอง) ฝึก PE โครงสร้างข้อมูลอัลกอริทึม วันที่ 9 ส.ค. 2022 นาโน subtitle: date: วันศุกร์ที่ 26 สิงหาคม 2565 เวลา 09.09 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์สุธาสินี) ทำไมเป็นอย่างนั้นล่ะได้ยินครูนะ คราวที่แล้วนะคะ เราพูดถึงในเรื่องของ เหมือนล่ามไม่ได้ยินเลย อ๋อ ค่ะ คราวที่แล้วเราพูดถึงเรื่อง list นะคะ list ตัวนี้นะ แล้วเราก็ทำข้อสอบไปแล้วนะคะ เรื่อง ลิสต์ ได้ไหมคะ ได้ยินไหมคะ ยังไม่ได้ยิน คราวที่แล้วนะคะ เราพูดถึงเรื่อง สิสต์ ทุกคนจำได้นะคะ อันนี้คือลิสต์นะ ที่ครูยกตัวอย่างมาให้ ลิสต์ตัวนี้มีขนาดเท่าไหร่ มีขนาดเท่าไหร่ ขนาด คือ มีจำนวนเท่าไหร่ มี 5 คนอื่นมีเท่าไหร่คะ 5 โอเค 5 นะคะ ลิสต์ที่เราเห็นในหน้าจอตรงนี้ จะมีอยู่ 5 ตัวถูกไหมคะ มีข้อมูลอยู่ 5 ตัว มี 1 มี 2 มี 3 มี 4 แล้วก็มี 5 มีทั้งหมด 5 ตัวนะคะ คราวนี้เรารู้ได้อย่างไรว่ามันคือลิสต์ เห็นก้ามปูเปิด-ก้ามปูปิดไหมคะ ตัวนี้เป็นสัญลักษณ์ที่บอกว่า การเก็บข้อมูลลักษณะแบบนี้มีชื่อเรียกว่า "ลิสต์" นะคะ จะเก็บค่าของข้อมูล ในลิสต์ index ก็คือหมายเลขถูกไหมคะ คือ หมายเลขของข้อมูลนี่ เราเริ่มต้นที่หมายเลขอะไรเอ่ย พอเราวาดเป็นช่องใช่ไหมคะ ในลิสต์นี่ ถ้าเราลองวาดการจัดเก็บนะ ก็จะเป็น 1 แล้วก็จะเก็บข้อมูลลงไปในช่องแบบนี้นะคะ หมายเลขช่องหรือว่า Index ตัวแรก เราจะเริ่มต้นที่เท่าไหร่คะ ตรงไหน ตรงนี้ index เราจะเริ่มที่เราไรเอ่ย 0 นะ ใช่ไหมคะ 1 2 3 แล้วก็ 4 ก็คือหมายเลขช่อง ถ้าเราวาดรูปเป็นรูปสี่เหลี่ยม ในการจัดเก็บข้อมูล แล้วเวลาครูเข้าถึงข้อมูลที่อยู่ในลิสต์ ตอนนี้ครูตั้งชื่อลิสต์ตัวนี้มีชื่อว่า x x index 3 ตอบเท่ากับเท่าไหร่เอ่ย index เป็น 3 ตัวนี้ตอบ 4 ใช่ตรงนี้ต้องตอบว่า 4 นะคะ ทุกคนจำได้นะแล้วถ้า x เราต้องการหลาย ๆ ค่า 2 จนถึง 4 จะตอบเท่ากับเท่าไหร่คะ 3 กับ... 3 กับอะไรเอ่ย 4 ใช่ไหม คือ 3 กับ 4 นะ มันเริ่มต้นที่ 2 ใช่ไหมคะ ก็คือเริ่มทีตัวนี้ ถึง 4 แล้วก็ลดลงมา 1 ช่อง ก็จะได้ข้อมูลตัวนี้ ก็คือ 3 กับ 4 คราวนี้ แล้วเราเอาลิสต์มาทำอะไรนะคะ เราเก็บข้อมูลที่อยู่ในรูปแบบลิสต์ แล้วเราเอามาใช้ทำอะไรนะคะ วันนี้เราจะพูดถึงโครงสร้างอีกแบบหนึ่ง ที่มีชื่อว่า stack นะ stack นะคะ stack ตัวนี้ จะใช้วิธีการเก็บข้อมูลแบบลิสต์นะคะ แล้วลักษณะแบบไหนที่เราจะเรียกว่า "stack" นะคะ ดูด้วยกัน เขาบอกว่า Stack ก็คือการที่เราใส่ข้อมูลเข้าไป แล้วก็ดึงออกมานะคะ แล้วข้อมูลที่ถูกใส่เข้าไปใน Stack ก่อน จะถูกเอาออกมาใช้ทีหลัง อันนี้ คือ วิธีการเก็บข้อมูลแบบ stack หรือที่เรียกสั้น ๆ ว่า "เข้าทีหลังออกก่อน" "เข้าก่อนออกทีหลัง" ความหมายเหมือนกัน ยกตัวอย่างเช่น ทุกคนเคยไปที่ร้านก๋วยเตี๋ยวไหมคะ ทุกคนเคยไปร้านก๋วยเตี๋ยวนะ แล้วเห็นถ้วยก๋วยเตี๋ยว ก่อนที่เขาจะเอามาใส่เส้น ใส่เครื่องปรุง ใส่หมูให้เรา ชามก๋วยเตี๋ยวมันเรียงขึ้นไปแบบนี้ ใช่ไหมคะ เวลาแม่ค้าเขาจะเอาชามก๋วยเตี๋ยวมาใส่ให้เรา เขาจะเอาชามที่อยู่ข้างบน หรือชามที่อยู่ข้างล่าง เอาชามข้างบนหรือข้างล่างคะ เขาเอาข้างบนมาทำให้เรา แล้วเวลาเขาล้างจานเสร็จแล้วนี่ เวลาเขาเอามาวางซ้อนนี่ เอาซ้อนข้างล่างหรือซ้อนข้างบน ซ้อนข้างบนใช่ไหมคะ เพราะฉะนั้น จานที่อยู่บนสุดจะถูกเอาออกมาใช้ก่อน และจานที่อยู่บนสุดนะคะ จะถูกเอาเข้ามาเก็บทีหลัง อันนี้คือรูปแบบของ Stack เช่น นะคะ เช่น ๆ สมมติ ครูมีกระดาษ 1 แผ่นนะ ครูมีกระดาษอยู่ 1 แผ่น ทุกคนดูนะคะ ครูจะใส่กระดาษแผ่นที่ 2 เห็นไหมคะ ครูซ้อนกระดาษแผ่นที่ 2 อยู่ข้างบนนะ ครูใส่ ครูใส่กระดาษแผ่นที่ 3 เข้าไปนะคะ แล้วครูก็ใส่กระดาษแผ่นที่ 4 เข้าไปในมือครู เวลาครูจะเอาออกมาใช้ ครูจะเอาตัวล่างสุดหรือตัวบนสุดออกไปใช้ ตัวบนสุด ถูกไหมคะ ครูไม่พยายามจะดึงตัวล่างสุดออกมานะคะ แต่ครูจะหยิบตัวบนสุดอกไปใช้ ซึ่งตัวบนสุดนี่ คือ กระดาษแผ่นที่เราใส่ไปล่าสุดนะคะ เราสามารถสรุปได้แบบนี้นะ ข้อมูลที่เข้ามาใน Stack ตัวแรกจะอยู่ด้านล่างสุด ข้อมูลที่หย่อนลงไปใน Stack ตัวแรก จะอยู่ด้านล่างสุดเลยนะคะ ตัวถัดไปก็จะซ้อนขึ้นมาเรื่อย ๆ ข้อมูลที่เข้าไปใน Stack เป็นตัวสุดท้าย จะอยู่บนสุดนะคะ แล้วเวลาเราเอาข้อมูลใน Stack ออกมาใช้งาน ข้อมูลที่เข้าไปเป็นตัวล่าสุดหรือตัวลำดับสุดท้าย จะถูกดึงออกมาใช้งานก่อน ตัวไหนที่เข้าไปตัวแรกจะถูกเอามาใช้งานเป็นตัวสุดท้ายนะคะ เพราะมันอยู่ล่างสุด เวลาดึงออกมาใช้ มันก็ใช้ยาก เราต้องใช้ตัวบน ค่อย ๆ ดึงตัวบนออกไปก่อน คราวนี้เวลาเราเอาข้อมูลใส่ใน Stack เราพูดถึง Stack ก็เหมือนภาชนะนะ ตอนนี้ ทุกดคนมอง Stack เป็นช่องแบบนี้ เป็นช่องสี่เหลี่ยม เป็นช่องในแนวตั้ง ถ้าเราพูดถึง Stack นะ ดูรูปนี้ก่อน อย่างนี้ มันจะอยู่ในแนวนอนหรือแนวตั้งก็ได้ มันจะอยู่ในแนวนอนหรือแนวตั้งก็ได้ ถ้าพูดถึง Stack ก็คือเป็นชั้น เป็นชั้น เลื่อนขึ้นไปเรื่อย ๆ นะคะ ใน Stack เราทำอะไรได้บ้าง เราใส่ข้อมูลลงไป เราดึงข้อมูลออกมา คราวนี้ stack ถ้ามันไม่มีข้อมูลอะไรเลย เราเรียกว่า "Stack ว่าง" คือ มันมีค่าว่าง ๆ ไม่มีตัวเลข ไม่มีตัวอักษรอะไรเลยนะ อันนี้คือ Stack ว่าง ถ้าเราจะใส่ข้อมูลลงไปใน Stackเราจะมีคำสั่งที่ชื่อว่า Push คือ คำสั่งตัวนี้นะคะ คำสั่ง Push ก็คือใส่ข้อมูลลงไปใน Stack ถ้าต้องการเอาข้อมูลออกจาก Stack เราใช้คำสั่ง Pop นะคะ มีอยู่ 2 ตัว ที่ทุกคนต้องรู้จักเมื่อพูดถึง Stack คือ Push กับ Pop Push คือใส่ ถูกไหม เอาข้อมูลเข้าไปเก็บ ก็คือเอาส่วน Pop ก็คือเอาออกนะคะ Pop คือ เอาออกคราวนี้มาดูตัวอย่างนะคะ มีแต่ Push กับ Pop 2 ตัว เราเริ่มต้น Stack ไม่มีอะไรเลย เป็นค่าว่าง ๆ ถูกไหมคะ เป็น Stack ว่าง ครูบอกว่าครู Push คำสั่ง Push Push ค่าอะไร ค่า a เมื่อไรก็ตามที่ใช้คำสั่ง Push ต้องบอกด้วยว่าจะใส่ค่าอะไรด้วยนะคะ เรา Push ค่า a ลงไป เห็นไหม มันก็อยู่ด้านล่างสุดนะคะ ถัดมาถ้าครูใส่คำสั่งตัวบนก่อน Push b ก็ใส่ b ลงมา เห็นไหมคะ ถัดจาก a ก็คือ b Push c ก็อยู่ถัดขึ้นไป และ Push (D) อยู่บนสุดนะคะ เรียงตรามลำดับของการใส่ข้อมูลเข้าไป คราวนี้อยากจะเอาออกบ้างเอาข้อมูลออกจาก Stack ไปใช้งาน จะใช้คำสั่ง Pop Pop นะ Pop แล้วตามด้วยวงเล็บเปิด วงเล็บปิด ไม่ต้องใส่ค่าอะไร เพราะเราจะไปดึงค่าที่อยู่ใน Stack ออกมา เราสั่งคำสั่ง Pop เราเอาข้อมูลบนสุดนะคะ Pop ให้เอาข้อมูลบนสุดที่อยู่ใน Stack ดึงออกมา เพราะฉะนั้น เดิมเป็นแบบนี้ ถูกไหม ครูใช้คำสั่ง Pop อะไรออกมาเอ่ย ตัว D Dog จะออกมา เพราะว่า D Dog อยู่บนสุดนะคะ ถัดมา ครู Push Push คือ ใส่เข้าไป ไม่มี D Dog แล้วนะ ครู Push e เห็นไหมคะ เวลา Push ต้องบอกด้วย ว่าเราใส่ค่าอะไรแล้วก็ใส่ตัว e วงเล็บปิด ครู Push ค่า e ลงไป E จะอยู่ด้านบน C เสร็จแล้ว Push อีกครั้งหนึ่ง f ก็จะอยู่บนสุดนะคะ ถัดมา ครู Pop Pop คือ เอาออก เอาอะไรออก ก็บนสุด คืออะไรคะ เอา F ออก เพราะฉะนั้น ข้อมูลจะเหลืออยู่ 4 ตัว ก็คือ a, b, c แล้วก็ e โอเค ถัดมา เราแทน Stack ด้วยอะไร นะคะ อย่างที่ครูบอกว่าลิสต์จะถูกเอามาใช้แทนนะคะ การจัดเก็บข้อมูลใน Stack เราพูดถึง Stack แล้วมันเก็บแบบไหน เราก็ใช้ลิสต์นั่นล่ะในการเก็บข้อมูล ลิสต์นะคะ เราสามารถวาดเป็นแนวตั้งหรือแนวนอนก็ได้นะ สามารถวาดเป็นแนวตั้งหรือแนวนอนก็ได้ ข้อมูลที่ใส่เข้ามาตัวแรกนะคะ จะอยู่ที่ index 0 ก็คือข้อมูลตัวแรก ไล่ไปเรื่อย ๆ จนถึงข้อมูลตัวสุดท้าย Stack ที่ครูให้มานี่ ที่เก็บอยู่ในรูปแบบที่เป็นลิสต์นี่ มันมีช่องว่าไหมคะ มันมีที่ว่างให้ใส่ได้อีกไหม Stack รูปนี้มีอยู่ 4 ช่องด้วยกัน ทุกช่องมีค่าไหมคะ ทุกช่องมีค่านะ มันเต็มหรือยังคะ มันมีที่ว่างให้ใส่ไหมคะ มันมีที่ว่างให้ใส่อีกไหมึะ ไม่มีแล้ว อย่างนี้เรียกว่า Stack เต็มแล้วนะคะ คือ ไม่มีช่องว่างให้เราใส่ข้อมูลตัวใหม่ได้แล้วนะคะ อย่างนี้ เรียกว่า "Stack มันเต็มแล้ว" คราวนี้ เรามี 2 คำสั่งที่พูดถึงนะ Push กับ Pop นะคะ Push ก็คือใส่ข้อมูลลงไปใน Stack เช่น ครูมี Stack อย่างนี้ใช่ไหม มันมีที่ว่างให้ครูใส่ข้อมูลได้ไหมคะ มีนะ มันมีที่ว่างให้ครูใส่ข้อมูลได้นะคะ ครูก็เลยสั่งคำสั่ง Push 3 ก็คือเอาข้อมูล 3 นี่ ไปหย่อนลงใน Stack มันจะเอามาใส่ช่องนี้ ช่องที่ 1 หรือช่องที่ 2 ค่ะ ช่องที่ 1 ถูกไหม ก็ไล่ลำดับลงมาเรื่อย ๆ มันอยู่ช่องนี้แล้ว ข้อมูลล่าสุดอยู่ช่องนี้ เพราะฉะนั้น เวลาเราหย่อนลงไป มันก็ไหลลงไปจนถึงตัวสุดท้ายที่มันสามารถจะใส่ได้ ก็คือในช่องตรงนี้ ก็คือจะเอา 3 มาใส่ แล้วเราใส่ด้วยคำสั่งอะไร เราใช้ List นะคะ ในการจัดเก็บข้อมูล เราใช้ลิสต์ในการจัดเก็บข้อมูล เพราะฉะนั้น คำสั่งของการเพิ่มข้อมูลลงไปใน Stack ก็คือใช้คำสั่ง Append ได้เลย เพราะ Append เป็นคำสั่งของการเพิ่มข้อมูลลงไปในลิสต์นะคะ ใส่ชื่อ . แล้วตามด้วยคำสั่ง Append วงเล็บเปิด ใส่ค่าข้อมูลตัวใหม่ แล้วก็วงเล็บปิด ถัดมา Popคือ เอาออกนะคะ คือ Pop คือ เอาออก ก่อนที่เราจะเอาข้อมูลออกนี่ เราต้องเช็กก่อนว่า Stack เรานี่มีข้อมูลอยู่ไหม ถ้า Stack มันไม่มีข้อมูลอยู่เลย เราจะเอาอะไรออกมาได้ไหม ไม่ได้นะคะ เพราะมันไม่มีข้อมูลอะไรให้เราดึงออกมา เพราะฉะนั้น อันดับแรกนี่ เราต้องเช็กก่อน มันมีข้อมูลอยู่ไหมนะคะ มันมีข้อมูลอยู่ไหม ถ้ามันไม่มีข้อมูลอยู่เลย เราจะบอกว่ามันคือ Stack ว่าง เราจะไม่สามารถทำคำสั่ง Pop ได้นะคะ แต่ถ้า Stack ไม่ว่าง เช่น ในบรรทัดแถวที่ 2 Stack ไม่ว่างนะ มันมีข้อมูลอยู่ตั้ง 3 ตัว เราใช้คำสั่ง Pop ข้อมูลอะไรจะถูกดึงออกมา มีอยู่ 3 ค่านี่ ข้อมูลที่จะเอาออกมาจาก Stack ก็คือข้อมูลค่าอะไรเอ่ย อะไรคะ 1 หรือ 2 หรือ 3 3 ใช่ไหม เอาตัวที่อยู่บนสุด ตัวล่าสุดน่ะ ตัวล่าสุดถูกไหมคะ ถ้าอยู่ในแนวนอนตัวล่าสุดจะอยู่ด้านขวา ถ้าเป็นแนวตั้งตัวล่าสุดจะอยู่ข้างบน ใช่ไหมคะ ก็คือเลข 3 จะถูกดึงออกมานะคะ หลังจากที่เราใช้คำสั่ง Pop โอเค ถัดมาตัวนี้จะเป็นคำสั่งที่เราใช้เขียน เช่น เราจะเช็กว่า Stack นั้นเป็น Stack ว่างหรือเปล่า เราก็ดูขนาดของ Stack ใช่ไหมคะ หาขนาดของ Stack ว่ามันมีขนาดเท่าไหร่ ถ้าขนาดมันมีค่าเป็น 0 แสดงว่ามันเป็น Stack ว่าง คือ ไม่มีข้อมูลอยู่เลย ก็ไม่ต้องทำอะไรใช่ไหมคะ แต่ถ้ามันไม่ใช่ Stack ว่าง เราก็จะดึงค่าที่อยู่บนสุดออกมา คราวนี้อันนี้จะเป็นโค้ด เป็นโปรแกรมที่เราจะเขียนทั้งหมด เดี๋ยวครูบอกอีกทีข้างหลังนะคะ สมมติว่า ครูอยาก... คราวนี้ดูนะคะ ครูมี Stack มาให้ Stack ครูมีกี่ช่องคะ มี 4 ช่อง ในแนวตั้งถูกไหม เป็น Stack ในแนวตั้ง มี 4 ช่องนะคะ ตัวแรก ตัวแรกน่ะ จะอยู่ด้านฐาน จะอยู่ด้านล่างสุดนะ เวลาเราหย่อนข้อมูลลงไป ตัวแรกจะลงมาอยู่ช่องล่างสุด แล้วค่อยขยับขึ้นไปช่องถัดไป ถัดไปนะคะ จะซ้อนขึ้นไปข้างบนนะ ถ้าเป็น Stack ในแนวตั้ง คำสั่ง อย่างที่บอกเรามีแค่ 2 คำสั่งนะ มีแค่ Push กับ Pop ใช่ไหมคะ Push ใส่ข้อมูลกับ Pop เอาข้อมูลออก คือ ใส่กับเอาออกนะคะ คราวนี้ดูPush 5 เห็นไหมคะ ครูใส่หมายเลขช่องก่อนนะ อันนี้เป็นหมายเลข 1, 0, 1, 2, 3 เราจะได้เข้าใจตรงกัน โอเคนะคะ มีหลายเลขช่องแล้วนะ เริ่มที่ 0 1 2 3 ครูสั่ง Push 5 5 จะไปอยู่ที่ช่องไหน ช่องไหนเอ่ย ช่องหมายเลขอะไร ครูหย่อน 5 ลงไปมันก็จะไหลลงมา มาอยู่ที่ช่องไหนคะ ช่อง 0 เห็นไหม พอครูหย่อน 5 มันก็ไหลลงมา ไหลลงมาเรื่อย ๆ จนมาอยู่ที่ช่อง 0 เสร็จแล้วครูสั่งคำสั่ง Push10 เดิมมันมี 5 อยู่แล้วนะ แล้วครูสั่ง Push 10 เพราะฉะนั้น 10 จะมาอยู่ที่ไหนคะ 10 จะมาอยู่ที่ 1 ถูกไหมคะ ก็หย่อน 10 ลงมานะ ถัดมา เดิม เดิม มี 5 กับ 10 แล้ว ครูเขียนเรียบร้อยก่อนนะคะ ใส่ที่ช่อง 0 กับช่อง 1 ครูสั่ง Push 15 ไปอยู่ที่ช่องไหนคะ 2 ใช่ไหม พอ Push ข้อมูลลงไปนะคะ คราวนี้ จากรูปนี้ ครูสั่ง Pop เอาอะไรออกมาจากรูปนี้ พอครูสั่ง Pop ปุ๊บ เอาอะไรออกมาคะ เอาอะไรออกมาเอ่ย 15 ใช่ไหม เอาตัวบนสุด เลือก เราเลือกตัวบนสุดออกมาใช่ไหมคะ เพราะฉะนั้น 15 จะถูกดึงออกมาข้างนอก เห็นไหมคะ เพราะฉะนั้น ใน Stack จะเหลือแค่ 10 กับ 5 ครูสั่ง Pop อีกทีหนึ่ง เอาอะไรออกมาคะ เดิมมี 5 กับ 10 คราวนี้เอาอะไรออกมา ครูสั่ง Pop ปุ๊บ อะไรออกมาคะ 10 ออกมา เห็นไหม 10 ไม่เหลือแล้ว เพราะฉะนั้น ตอนนี้ ใน Stack เราเหลือกี่ค่าคะ ค่าเดียว คือ เลข 5 จดตัวนี้ไว้ในกระดาษให้ครูหน่อย เดี๋ยวครูจะให้ทำแบบฝึกหัดนะคะ มีกระดาษไหมคะ มีใครไม่มีกระดาษไหม ครูมีกระดาษมาแจก มีไหมคะ มันจะมีเส้น คราวนี้นะคะ ครูมีโจทย์มาให้ แล้วก็มีคำสั่งมาให้ ทำเหมือนเดิมเลยใช่ไหมคะ แต่ครูมีตัวเริ่มต้นให้ ครูมีให้อยู่แล้ว อยู่ใน Stack คือ 5 ใช่ไหมคะ อันแรก เราหย่อนเลข 2 ลงไป อันที่ 2 เขียนของเดิมก่อนใช่ไหมคะ แล้วค่อยหย่อนเลข 7 ลงไป ถัดมาหย่อนเลข 1 Pop คือ เอาออกนะ เอาออก แล้วบอกครูด้วย ว่าข้อมูลที่เอาออกมาคืออะไร เสร็จแล้วก็มีคำสั่งตัวสุดท้าย ก็คือ Push เลข 7 ลงไป ลองทำดูนะคะ เพราะฉะนั้น แต่ละข้อมันจะต่อเนื่องกันไปนะคะ ทำตัวแรก ข้อที่ 1 เสร็จ เอาข้อมูลนี่ มาตั้งต้นไว้ก่อน แล้วเราค่อย Push เลข 7 ลงไป เดี๋ยวเราทำด้วยกัน 1 ข้อนะ อันนี้คือ Push เลข 2 คือ หย่อนเลข 2 ลงไป ข้อที่ 2 ครูจะใส่เลข 7 เพราะฉะนั้น ครูต้องใส่ข้อมูลเดิมก่อนนะคะ และก็หย่อนเลข 7 ลงไป ทำต่อให้ครูหน่อย อีก 3 อัน คราวนี้เดี๋ยวเรามาดูเฉลยพร้อมกันนะคะ ข้อ 3 นะคะ ครูสั่ง Push 1 ก็คือใส่เลข 1 ลงใน Stack เดิม เอาของเดิมยกมาก่อนนะ อย่าเพิ่งใส่นะ ของเดิมมี 3 ค่านะ เขียนก่อนนะคะ เขียนค่าเดิมก่อน ใส่ค่าเดิมมาก่อนนะคะ เสร็จแล้วครูสั่ง Push 1 1 จะอยู่ด้านบนเลข 7 ใช่ไหมคะ จากนั้นครูสั่ง Pop Pop คือ เอาออก บนสุดคืออะไร คือ 1 ใช่ไหมคะ เพราะฉะนั้น เอาอะไรออก เอา 1 ออก เพราะฉะนั้น ที่เหลือ ก็คือ 5, 2, 7 ใช่ไหมคะ 1 จะถูกเอาออกมาใช่ไหม เพราะฉะนั้น ข้อมูลที่นำออกจาก Stack ก็คือ 1 นะคะ ครูสั่ง Push อีกครั้งหนึ่ง ทำอย่างไร ก็เอาของเดิมที่มีอยู่ใน Stack เขียนก่อน เพราะฉะนั้น กรณีที่ Push ข้อมูลลงไปใน Stack ยกของเดิมมาก่อนเสร็จแล้วใส่ตัวเลขที่ครูสั่งลงไป ก็คือ 7 7 ก็จะอยู่ด้านบนนะคะ อันนี้ คือ Stack ที่ได้ หลังจากที่เราใช้คำสั่งทั้งหมด 5 คำสั่ง โอเค ถัดมา ครูเปลี่ยนได้ไหม จากแนวตั้งเป็นแนวนอนนะคะ ถ้าครูลองเปลี่ยน Stack เป็นแนวนอนบ้าง คราวนี้ครูลองเปลี่ยน Stack เป็นอีกรูปแบบหนึ่ง เป็นแนวนอนบ้างนะคะ และครูมีตัวเลขที่อยู่ใน Stack ไว้ให้ คือ 3 แล้วก็ 1 ถูกไหม ตัวแรกจะอยู่ซ้ายสุด ใช่ไหมคะ ถัดมา ก็จะเป็นตัวที่ 2 แล้วครูใช้คำสั่ง Push 5 ข้อที่ 2 ครู Push 6 เสร็จแล้ว ครู Pop นะคะ ลองทำสิ คราวนี้นะคะ มาดูเฉลยด้วยกัน ครูสั่ง Push 5 แสดงว่าครูกำลังจะใส่ข้อมูลลงไปใน Stack คือ เลข 5 นะคะ ครูก็เอาเลข 5 มาหย่อนลงเลยนะ เอาเลข 5 มาหย่อนเลยนะคะ ถัดมา ครูใช้คำสั่ง Push ครูใช้คำสั่ง Push ทำอย่างไร เอาของเดิมยกลงมาก่อนนะ ยกของเดิมมาใส่ก่อนนะคะ ก็จะมี 3, 1 แล้วก็ 5 จากนั้น เรา Push ค่าใหม่ ใส่ค่าใหม่ลงไป ก็คือ 6 โอเคนะ ใส่ค่า 6 ก็คือค่าใหม่ลงไปใน Stack เสร็จแล้วครูใช้คำสั่ง Pop ก็คือเอาออก ก็คือเอาตัวล่าสุด ก็คือที่อยู่ด้านขวา เอาออกนะคะ เพราะฉะนั้น ค่าที่ถูกเอาออก ก็คือเลข 6 นะคะ เอาเลข 6 ออกมา แล้วเราก็ยกตัวที่เหลือลงมาใส่ ก็จะเหลือเป็น 3, 1 แล้วก็ 5 นะคะ คราวนี้นะคะ มาดูต่อ กระดาษที่ครูแจกเอาวางไว้ก่อนนะคะ อย่าเพิ่งใช้ เรายังไม่ใช้ตอนนี้ เราใช้ Stack ทำอะไร เมื่อกี้เราพูดถึง Stack ไปแล้วนะ เข้าก่อนออกทีหลังนะคะ ข้อมูลไหนเข้าก่อนจะถูกเอาออกทีหลัง แล้วเราใช้ Stack ทำอะไรบ้าง เราใช้ Stack มาทำอะไรบ้าง ทุกคนบวกเลขเป็นใช่ไหม ทุกคนบวกลบคูณหารนะคะ สมการทางคณิตศาสตร์ได้ Stack จะถูกเอามาใช้ในการหาผลลัพธ์ของสมการคณิตศาสตร์ บวกเลข บวกลบเลขนะคะ คราวนี้ ก่อนที่จะไปดูรูปแบบของการใช้ Stack แล้ว Stack มันเกี่ยวข้องอย่างไร กับการบวก ลบ คูณ หาร นะคะ เรามาดูรูปแบบก่อนว่าเราใช้ Stack เพื่อเป็นนิพจน์ ก็คือลักษณะของสมการ มีอยู่ 3 รูปแบบ รูปแบบแรกก็คือ infix ก็คือเครื่องหมายบวก ลบ คูณ หาร จะอยู่ระหว่างตัวเลขนะคะ อันนี้คือ Infix นิพจน์ตัวที่ 2 ก็คือ Prefix เครื่องหมาย บวก ลบ คูณ หาร จะอยู่ด้านหน้า และตัวสุดท้าย คือ Postfix เครื่องหมายจะไปอยู่ด้านหลังของตัวเลข A C อันนนี้คือตัวเลขนะคะ เราจะแทนด้วยตัวเลขใด ๆ คราวนี้ดูนะคะ ในการคำนวณทางคณิตศาสตร์นะ เวลาเราเจอนะคะ การบวก ลบ ที่มันมีมากกว่า 2 ตัวเลข เช่น แบบนี้ 5 + 2 x 2 มันมีตัวเลขมากกว่า 2 ตัวนะคะ แล้วเราจะบวกลบเลขอย่างไร เรามีลำดับความสัมพันธ์ของเครื่องหมาย เจอวงเล็บก่อน ทำในวงเล็บใช่ไหมคะ เราเจอวงเล็บ เราบวกลบเลขนี่ ในเครื่องหมายวงเล็บก่อน จากนั้น ลำดับความสำคัญตัวที่ 2 ที่ต้องทำก่อน ก็คือเครื่องหมายยกกำลัง เช่น 2 ยกกำลัง 2 ใช่ไหมคะ 3 ยกกำลัง 2 อย่างนี้เป็นต้น เจอเลขยกกำลังเสร็จแล้ว เราจะคำนวณเครื่องหมายไหนต่อไป คูณกับหาร คูณกับหารมีลำดับความสำคัญเท่ากันนะคะ มีลำดับความสำคัญเท่ากัน ตามด้วยบวกกับลบ บวกกับลบก็มีความสำคัญเท่ากัน แต่จะทำหลังการทำเครื่องหมายคูณกับหาร นะคะ คราวนี้มาดูโจทย์ครู 2 ตัวนี้ เป็นตัวเลขตัวเดียวกันเลย 5 + 2 x 2 ตัวแรก ครูมีวงเล็บเปิดกับวงเล็บปิด โจทย์ตัวที่ 2 ครูไม่ได้ใส่วงเล็บ มีครูไม่มีวงเล็บนะ คราวนี้มาดูข้อแรกก่อน อย่างที่บอกว่าถ้าเจอวงเล็บวงเล็บเปิด วงเล็บปิด ทำข้างในวงเล็บก่อน เพราะฉะนั้น เราเอาอะไรบวกกันก่อน 5 + 2 เป็นเท่าไหร่คะ เป็น 7 7 แล้วคูณด้วย 2 เท่ากับเท่าไหร่ เท่ากับเท่าไหร่คะ เท่ากับ 14 ตัวเลขเท่ากับ 14 ตัวแรกนะคะ เท่ากับ 14 แล้วมาดูข้อ 2 ครูตัดวงเล็บทิ้งไป 5 + 2 x 2 เราทำตรงไหนก่อน ย้อนกลับขึ้นมาดูข้างบน ระหว่างบวกกับคูณ อะไรสำคัญมากกว่ากัน อะไรมีความสำคัญมากกว่ากันคะ บวกกับคูณ ใช่ คูณ จากข้อมูลข้างบนเห็นไหมคะ ว่า 1 นี่ มีความสำคัญมากสุดนะ 2. ความสำคัญรองลงมา ตัวนี้ เบอร์ 3 ความสำคัญรองลงมา เบอร์ 4 ความสำคัญน้อยสุดเลย เพราะฉะนั้น คูณกับบวกอะไรมีความสำคัญมากกว่ากัน คูณใช่ไหมคะ อันนี้คือมากสุด เพราะฉะนั้น เราทำอะไรก่อน 5 + 2 หรือเอา 2 x 2 2 x 2 เป็น 4 4 + 5 เป็นเท่าไหร่คะ 4 + 5 เป็น 9 โอเค ถ้าครูเขียนใหม่ เลข 2 หรือ เดี๋ยวนะ โจทย์ข้อนี้ 5 x 2 + 2 = 12 คนอื่นได้ไหมคะ เห็นไหม ตัวเลขเดียวกันเลย สลับ แล้วก็เครื่องหมายมีเหมือนกันเลย แค่สลับตำแหน่งค่าก็เปลี่ยนแล้ว ทันไหมคะ คูณกับบวก แสดงว่าทำคูณก่อน 5 x 2 เป็น 10 10 + 2 เป็น 12 โอเค เอาตัวนี้บวกกันก่อน คูณกันก่อนนะคะ 5 x 2 เป็น 10 แล้ว 10 ค่อยมาบวกกับ 2 โอเค จะเห็นว่า อันนี้คือเราคิดใช่ไหม อันนี้คือเราคิดนะคะ แล้วเราจะสั่งให้คอมพิวเตอร์เข้าใจ แบบที่เราคิดเมื่อกี้ได้อย่างไร รู้ว่าถ้าเจอคูณนี่ต้องทำคูณก่อนเลย เจอวงเล็บเปิด ต้องทำวงเล็บเปิดก่อน ตอนนี้เราจะสั่งให้คอมพิวเตอร์นี่ สามารถคำนวณให้ได้แบบที่เราคำนวณเมื่อกี้ เราใช้ Stack เข้ามาช่วยในการคำนวณนะคะ เราใช้ Stack เข้ามาช่วยในการคำนวณ วิธีการ ทำแบบไหน มาดูวิธีการนะคะ เรามีตัวเลขอยู่ชุดหนึ่ง เราต้องการหาค่าออกมา เช่น ครูมีตัวเลขชุดนี้ล่ะ นี่ ครูสั่งให้คอมพิวเตอร์คำนวณ เราต้องได้ผลลัพธ์ 9 แบบที่เราคิดเมื่อกี้ คอมพิวเตอร์จะคิดแบบไหนนะคะ 1. เราต้องสร้างตารางแบบนี้ก่อนมี 3 ช่อง ช่องแรก คือ ใส่ Input ก็คือข้อมูลนำเข้า Stack แล้วก็ผลลัพธ์นะคะ เรามีวิธีการทำนี่ 2 ช่วง ด้วยกัน ช่วงที่ 1 ต้องแปลงนิพจน์นะคะ ให้เป็นแบบ Postfix เอาเครื่องหมายไปไว้ข้างหลังให้หมดก่อน เอาเครื่องหมายไปไว้ข้างหลังให้หมดก่อนนะคะ แล้วค่อยคำนวณออกมาเป็นตัวเลข ผลลัพธ์ เรามี 3 ช่องนะ ทุกคนต้องตีตาราง 3 ช่อง อันแรกเขียนว่า Input Stack แล้วก็ Output นะคะ ถัดมา ขั้นตอนวิธีการแปลง จาก Infix ให้เป็น Postfix ทุกคนมีชีตที่ครูให้ แบบนี้เลย ก็คือสิ่งที่อยู่บนสไลด์นะคะ ครูพรินต์ออกมาให้ เรามีอยู่ทั้งหมด 7 ขั้นตอนด้วยกัน มีทั้งหมด 7 ขั้นตอนด้วยกัน ครูให้เวลา 2 นาที อ่าน 7 ขั้นตอนนนี้ ในกระดาษของตัวเองสิคะ ให้อ่านในกระดาษนะ หรือจะอ่านจากหน้าจอก็ได้ ให้เวลา 2 นาที อยากให้อ่านก่อน คราวนี้เดี๋ยวมาดูพร้อมกัน เรามีอยู่ทั้งหมด 7 ขั้นตอนนะคะ เดี๋ยวเราจะลองฝึกนะ แล้วก็เทียบไปทีละขั้น ขั้นที่ 1 นะคะ กำหนดให้ Stack ว่าง ก็คือวาดตาราง 3 ช่องนี้ใช่ไหมคะ อันดับแรก สร้าง Stack ว่าง ก็คือวาด 3 ช่องนะคะ กี่แถวยังไม่รู้นะ แต่มีอยู่ 3 คอลัมน์นะคะ 3 ช่อง อันนี้คือ Stack ว่าง 3 ช่อง อันดับที่ 2 อ่านข้อมูลจากซ้ายไปขวา ก็คืออ่านข้อมูลทีละตัวใช่ไหมคะ เลข 5 เครื่องหมายบวก เลข 2 เครื่องหมายคูณ แล้วก็เลข 2 อันนี้คืออ่านจากซ้ายไปขวา ทีละตัวนะคะ แล้วก็อ่านเข้ามาทีละตัว สมมติครูใช้ตัวเลขนะคะ เช่น อ่านข้อมูลจากซ้ายไปขวา ตัวแรก ก็คือ 5 ใช่ไหม อ่านจากซ้าย ซ้ายก็คือตัวแรกนะคะ ก็คือเลข 5 มา ถัดมา ขั้นถัดมาเป็นขั้นที่ 3 ถ้าข้อมูลที่อ่านเข้ามาเป็นตัวเลข เช่น เลข 5 ใช่ไหมคะ ข้อมูลที่เราอ่านเข้ามา คือ เลข 5 มันเป็นตัวเลขใช่ไหม ใช่ เอามันไปไว้ที่ไหน เอามันไปไว้ที่ช่องผลลัพธ์ ก็คือช่องสุดท้าย ก็คือช่องนี้ใช่ไหมคะ ช่อง Output ถัดมา ถ้าตัวทีเราอ่านเข้ามานี่ มันไม่ใช่ตัวเลข แสดงว่ามันต้องเป็นเครื่องหมายทางคณิตศาสตร์อะไรสักอย่างหนึ่งนี่ล่ะ เช่น เครื่องหมายบวกใช่ไหมคะ เครื่องหมายบวก เราอ่านเครื่องหมายบวกเข้ามา แล้วเขาให้เราเช็กก่อน ว่าแล้วใน Stack มันมีค่าอยู่หรือเปล่า Stack ก็คือช่องนี้ ช่องที่ 2 นี่ มันมีค่าอยู่ไหม ถ้ามันไม่มีค่าอยู่เลย ก็หย่อนมันลงไปใน Stack แต่ถ้าใน Stack มันมีข้อมูลอยู่แล้ว เราจะต้องทำการเปรียบเทียบก่อน ว่าข้อมูลที่เราอ่านเข้ามานี่ มันมีค่ามากกว่า หรือน้อยกว่าตัวที่อยู่ใน Stack ถ้ามันมากกว่า ถ้ากรณีที่ตัวที่เราอ่านนี่ มีค่ามากกว่า ก็หย่อนลงไปใน Stack ได้เลย ถ้าสิ่งที่เราอ่านเข้ามา มันมีค่าน้อยกว่าสิ่งที่อยู่ใน Stack ให้เอาเครื่องหมายใน Stack ออกไปไว้ที่ผลลัพธ์ แล้วเอาเครื่องหมายตัวที่เราอ่านเข้ามาหย่อนลงไปใน Stack โอเค ถ้าเราอ่านจนครบข้อมูลทุกตัวแล้ว เรายังมีข้อมูลอยู่ใน Stack เราก็ดึงมันออกมา ก็คือ Pop มันออกมานะคะ เป็นผลลัพธ์ มาดูตัวอย่างนะ ทุกคนถือ... ดูกระดาษตัวอย่างที่เป็นขั้นตอนด้วยนะคะ โอเค โจทย์ที่ครูให้ ทุกคนดูที่หน้าจอนะคะ ครูมีโจทย์มาให้นะคะ ก็คือ 5 + 2 x 2 อันดับแรกครูต้องทำอะไร ครูต้องวาดตารางก่อนใช่ไหมคะ อันดับแรกวาดตาราง 3 ช่องวาดตาราง 3 ช่อง จำนวนแถวก็เอาข้อมูลตัวเลขกับเครื่องหมายมาใส่ทีละบรรทัด 5 บรรทัดที่ 1 ถูกไหมคะ + บรรทัดที่ 2 ใส่เลข 2 บรรทัดถัดมาใส่เครื่องหมายคูณ แล้วก็ใส่เลข 2 เราก็จะวาดตารางเรียบร้อยแล้วใช่ไหมคะ จำนวนแถวขึ้นอยู่กับจำนวนข้อมูลในโจทย์ว่ามีกี่ตัว ก็สร้างแถว ใส่ข้อมูลให้เลย เรากำหนด stack ว่างแล้วใช่ไหมคะ ถัดมา ต้องอ่านข้อมูลทีละตัว เราต้องอ่านข้อมูลทีละตัว จากซ้ายไปขวา ตัวแรกคืออะไรคะ คือ 5 ใช่ไหม ครูเขียนเรียงแล้ว 5 + มี 2 มี x แล้วก็มี 2 อันนี้คือข้อมูลที่เราอ่านจากซ้ายไปขวา ตัวแรก เป็นตัวเลขใช่ไหมคะ มันเป็นตัวแรก แล้วมันตรงกับตัวไหนในขั้นตอน ข้อ 3 ที่บอกว่าถ้าเป็นตัวเลขให้เอาไปไว้ที่ไหน เอาไปไว้ที่ผลลัพธ์ ถ้าเป็นตัวเลข เอาไปไว้ที่ผลลัพธ์ได้เลย ถัดมา เจอเครื่องหมายบวกนะคะ เจอเครื่องหมายบวก ตอนนี้ ใน Stack มันไม่มีค่าอะไรเลย ทำอย่างไรคะ ก็ใส่ได้เลย ใส่เครื่องหมายบวกลงมาได้เลย ถ้ามันเป็น Stack ว่าง เห็นไหมคะ ตัวบนเป็น Stack ว่าง เราก็เอา + ใส่ได้เลย แล้วก็เขียน 5 ลงมาเหมือนเดิมนะคะ ยก 5 ลงมาเหมือนเดิมนะ ดู ดูพร้อมครูก่อนนะ เดี๋ยวครู... จะถ่ายรูปเอาขึ้น Classroom ให ้ถัดมา เลข 2 ใช่ไหมคะ เลข 2 มันเป็นอะไร มันเป็นตัวเลข เพราะฉะนั้น ต้องเอาไปไว้ที่ไหน ไปไว้ที่ผลลัพธ์ ตรงกับข้อ 3 ในขั้นตอนนะ เอา 2 มาไว้ที่ Output แต่ต้องเขียนหลัง ก็คือเขียนต่อจากเลข 5 นะคะ ถัดมา ยกเครื่องหมายบวกลงมาด้วยนะ เพราะมันอยู่ใน Stack นะคะ เรายังไม่ได้เอาอะไรออกหรือเอาอะไรเข้าเพิ่ม ถัดมา เป็นเครื่องหมายคูณใน Stack เรามีเครื่องหมายบวกอยู่แล้วนะคะ ใน Stack นี่ เรามีเครื่องหมายบวกอยู่แล้วตัวที่เราอ่านเข้ามา คือ คูณ เราจะต้องทำการเปรียบเทียบค่าที่เราอ่านเข้ามาใหม่ คือ คูณ กับตัวเดิมที่อยู่ใน Stack คือ บวก เราเปรียบเทียบ ถูกไหมคะ กับตัวบนสุด คือ เครื่องหมายบวก สิ่งที่เราพบคืออะไร คูณมีค่ามากกว่าบวก ให้ทำอย่างไร ก็เอาคูณหย่อนลงมาได้เลย ใส่คูณลงไปใน Stack ได้เลยนะคะ ผลลัพธ์ก็เป็นเหมือนเดิม ตัวถัดมา คือ เลข 2 เลข 2 มันเป็นตัวเลขใช่ไหม เอามาไว้ที่ผลลัพธ์นะคะ เอามาต่อด้านหลัง เสร็จแล้ว เราพบว่าไม่มีข้อมูลแล้ว ข้อมูลมันหมดแล้วน่ะ ข้อมูลมันหมดแล้วนะคะ แต่สิ่งที่เราเจอคืออะไร ใน หอมูลมันหมดแล้วนะคะ แต่สิ่งที่เราเจอคืออะไรใน Stack ยังมีข้อมูลอยู่ เพราะฉะนั้น ต้องดึงค่าออกจาก Stack ให้หมด เราเอาอะไรออกมาก่อนคะตัวล่าสุด ตัวบนสุด คือ คูณเอาคูณมาต่อท้ายที่ Output หรือว่าผลลัพธ์ เอาคูณออกมาแล้ว มันเหลืออีกตัวหนึ่งใช่ไหม ก็เอาบวกออกมา อันนี้คือผลลัพธ์ ผลลัพธ์สุดท้ายนะคะ จะอยู่ในรูปแบบของ Postfix คือ แปลงนิพจน์ ได้ไหมคะ เดี๋ยวเรามาทำพร้อมกันอีกตัวหนึ่ง 3 + 5 x 1 ครูมีโจทย์ใช่ไหมคะ 3 + 5 x 1 ผลลัพธ์เท่ากับเท่าไหร่เอ่ย ตอบเท่ากับ อันนี้ตอบเท่ากับเท่าไหร่เอ่ย 8 ข้างหลังตอบอะไร ได้เท่ากับอะไรคะ คำตอบ ก็คือ 8 เอา 5 x 1 ก่อน ได้เท่าไหร่ ค่อยบวกกับ 3 5 x 1 เป็น 5 แล้วบวกกับ 3 จะเท่ากับ 8 เดี๋ยวเราจะมาทำ จะมาแปลงนิพจน์กันนะคะ แล้วเราจะมาหาค่าว่ามันได้ 8 ได้อย่างไร อันนี้เรากำลังจะมาแสดงวิธีทำว่าค่า 8 มันมาจากไหน เราสั่งให้คอมพิวเตอร์มันคิดแบบไหน อันดับแรก วาด Stack ว่าง ฉะนั้น ครูบอกว่าต้องมีคอลัมน์อยู่ 3 คอลัมน์ ครูมี 3 คอลัมน์แล้ว มี Input Stack แล้วก็ Output จากนั้นครูวาดตารางเลย โดยเอาข้อมูลมาใส่ในแต่ละแถวเลยนะคะ ครูอ่านเข้ามาทีละตัว จากซ้ายไปขวา ตัวแรก คือ 3 ถัดมา คือ เครื่องหมายบวก เลข 5 นะคะ เครื่องหมายคูณ แล้วก็เลข 1 อันนี้ครูวดตารางเสร็จแล้ว ทุกคนวาดตามครูก่อนเลย เราวาดตารางเปล่า ๆ แบบนี้ก่อนนะคะ คอลัมน์แรก หรือช่องแรก เอาตัวเลขกับเครื่องหมายมาเรียงใส่ทีละบรรทัด คราวนี้พอทุกคนลอกตารางเสร็จแล้วใช่ไหมคะ เดี๋ยวเราจะมาทำด้วยกัน เริ่มต้นตัวแรกใช่ไหมคะ ทุกคน เริ่มต้นตัวแรก มันเป็นตัวเลขใช่หรือเปล่า มันเป็นตัวแรก เพราะฉะนั้นเอาไปไว้ที่ช่องทางไหน ทางขวา ใส่ก่อน เลข 3 ใช่ ถูกต้อง ถัดมา เป็นเครื่องหมายบวกใช่ไหมคะ เป็นเครื่องหมายบวก ตรงนี้มีอะไรไหม ไม่มี เพราะฉะนั้น เอาบวกมาใส่ตรงนี้ได้เลยไหม ถ้าเป็นเครื่องหมาย เอาลงที่ Stack เพราะฉะนั้น ตอนนี้ Stack ว่าง ก็ใส่เครื่องหมายบวกได้เลย 3 ยกลงมาเหมือนเดิมนะคะ ตรง Output ยก 3 ลงมาเหมือนเดิม ถัดมา เลข 5 เป็นตัวเลข เอาไว้ที่ไหน เอาไว้ Output ใช่ไหม เพราะฉะนั้น เอาของเดิมยกลงมาก่อน คือ 3 เราเอาเลขอะไรมาใส่ เลข 5 นะคะ อันนี้ยกลงมาไหม เครื่องหมายบวกยกลงมาด้วยนะ ยกลงมาด้วย เสร็จแล้ว ถัดมา เครื่องหมายคูณ คูณต้องเอามาลง Stack ใช่หรือเปล่า แต่คูณมันมากกว่าบวกใช่ไหม คูณกับบวก อะไรมากกว่ากัน คูณ เพราะฉะนั้น เราก็ใส่ลงไปใน Stack ได้เลย โดยโดยเอาของเดิมลงมาก่อน แล้วก็ใส่เครื่องหมายคูณ อันนี้ยกลงมาเหมือนเดิมไหม ยกลงมาเหมือนเดิม ตรงสุดท้าย 1 เอาไว้ที่ไหน Output แต่มีของเดิมอยู่แล้วใช่ไหม ยกของเดิมลงมาก่อน แล้วก็ใส่เลข 1 อันนี้ยกลงมาเลยได้ไหม ได้นะคะ ใน Stack เราก็ยกเครื่องหมายออกมา เครื่องหมายนะคะ บวกกับคูณ เสร็จแล้ว ผลลัพธ์ที่ได้ ตอนนี้ข้อมูลหมดแล้วใช่ไหม ใน Stack ยังมีอยู่ ใน Stack ยังมีอยู่ ต้องเอาออกมา ต้อง Pop ออกมา ใช่ไหมคะ ยกตรง Output ของเดิมลงมาก่อน Pop บวกกับคูณเอาอะไรออกมาก่อน คูณ แล้วตามด้วยบวก เห็นไหมคะ เอาตัวแรกออกมาก่อน แล้วก็เอาตัวที่ 2 ออกมา เดี๋ยวต่ออีกนิดหนึ่งนะคะ เดี๋ยวเขียนตรงนี้ให้เสร็จก่อน เรายังไม่ได้ค่าเลข 8 เลย จะทำอย่างไรให้ได้เลข 8 8 ถัดมา เสร็จหรือยังคะเดี๋ยวรอเพื่อนแป๊บหนึ่งนะ โอเค เราได้ผลลัพธ์แล้วใช่ไหมคะ จากตารางที่เราทำใน Stack พอได้ค่าผลลัพธ์แล้วนี่ คือ ตัวนี้ใช่ไหม 351 คูณ บวกมาหาผลลัพธ์ต่อนะคะ ค่านี้จะเป็นค่าสุดท้ายแล้ว ที่เราจะได้คำตอบออกมา ตัวแรก ตัวนี้ใช่ไหมคะ ขั้นตอนถัดมา ถ้าเป็นตัวเลข ถ้าเป็นตัวเลข จะ Push ลง Stack อันนี้อีกอันหนึ่งนะ อีกขั้นตอนหนึ่งนะคะ ถ้าเป็นตัวเลข จะ push ลง Stack ดูพร้อมครูเลย ตัวที่ 1 มา คือตัวเลขอะไรคะ เลข 3 เราเอาใส่ใน Stack ดูพร้อมกันนะ เลข 3 ตัวแรก เอาลง Stack ตัวถัดมาเลขอะไรคะ เลข 5 ก็เอาเลข 5 Push ลง Stack เหมือนกัน ตัวถัดมาเลขอะไร เลข 1 ก็เอาเลข 1 Push ลง Stack เหมือนกัน ถัดมา เราเครื่องหมายคูณ ให้ Pop ค่าบนสุดอออกมา แล้ววางไว้ขวามือ เอาเลข 1 ออกมา เห็นไหมคะ จากนั้นใส่เครื่องหมาย ถ้ามันเครื่องหมายนะ ตัวที่เราอ่านมา เรา Pop ตัวเลขออกมาก่อน แล้วใส่เครื่องหมาย แล้วเอาตัวที่ 2 ออกมา แบบนี้นะคะ เอาตัวบนสุดออกมา แล้วใส่เครื่องหมายที่เราอ่าน แล้วเอาตัวข้อมูล ตัวเลขที่อยู่ใน Stack ตัวถัดมานี่ เอาออกมา ได้ผลลัพธ์อะไรคะ 5 x 1 เป็น 5 ตอนนี้ใน Stack 1 กับ 5 ออกไปแล้วนะ เราได้ผลลัพธ์ คือ 5 แล้วอย่างไรต่อ ก็ Push ลง Stack เอาเลขนี่ 5 Push ลงไปใน Stack เดิม มี 3 ตอนนี้เอาออกไปแล้ว 2 เหลือ 3 พอคูณเสร็จ เอา 5 กลับเข้ามา ดูนะคะ ถัดมา อ่านเครื่องหมายบวก ทำเหมือนเดิมเลย เอาอะไรออกมาคะ เอา 5 ออกมาไว้ทางขวามือ แล้วก็ใส่เครื่องหมายบวก แล้วก้เอา 3 ออกมา คำตอบเป็นเท่าไหร่คะ เป็น 8 แล้วก็เอา 8 ใส่ลงไปใน Stack จะเหลือเป็นค่าสุดท้าย นี่คือคำตอบของโจทย์ข้อนี้ ได้เท่ากันเลยไหม ได้เท่ากันเลย คือ 8 จะเห็นว่านี่คือกระบวนการคอมพิวเตอร์คิดค่าตัวเลขให้เรานะคะ กว่าจะได้เลข 8 ออกมานี่ คอมพิวเตอร์ต้องคิดแบบนี้นะคะ โอเคใครเสร็จแล้ว ครูให้เบรกอีก 5 นาที จดตัวนี้ให้เสร็จนะคะ เสร็จแล้วครูให้เบรกอีก 5 นาที ค่ะ เดี๋ยวมาต่ออีกนิดหนึ่ง คราวนี้มาดูอีก 1 ตัวอย่างนะคะ ครูมีโจทย์ให้ 5 x 2 + 2 ตอนนี้เราทำจาก infix ให้เป็น Postfix ก่อนนะคะ อันดับแรก ต้องวาดตารางก่อนใช่ไหมคะ วาดตาราง Stack ว่าง ครูก็วาด 3 ช่องเหมือนเดิม แล้วก็ตรง Input ครูก็เอาข้อมูลแต่ละตัวมาใส่ลงในแต่ละบรรทัด เริ่มต้นเลยนะคะ เราหย่อนเข้ามาตัวแรก เลข คือ เลข 5 ใช่ไหม มันเป็นตัวเลข เพราะฉะนั้น เอาไปไว้ที่ Output นะคะ นะ ถ้าเป็นตัวเลข เอาไปไว้ที่ Output ได้เลย ตัวถัดมาเครื่องหมายคูณ แสดงว่าต้องเอาไปไว้ใน Stack ตอนนี้ Stack มันเป็น Stack ว่าง เราก็เลยเอาคูณมาใส่ใน Stack ได้เลย ส่วน Output ก็ยก 5 ลงมาเหมือนเดิม โอเคนะ ยังเป็นเหมือนเดิมอยู่นะ 2 บรรทัดแรก ถัดมา เจอเลข 2 เลข 2 2 มันเป็นตัวเลข ต้องเอาไปไว้ที่ Output เพราะฉะนั้น 2 จะอยู่ต่อจากเลข 5 นะคะ ใน Stack ก็ยกลงมาเหมือนเดิม ถึงตรงนี้นะคะ ถัดมา ข้อมูลที่เราอ่านมาคืออะไร เครื่องหมายบวก พอเราเจอเครื่องหมายบวก ครูบอกว่าต้องเอามันไปไว้ใน Stack แต่ก่อนอื่น ก่อนที่จะเอาไปไว้ใน Stack เดิม เรามีข้อมูลใน Stack หรือเปล่า มีใช่หรือเปล่า มีเครื่องหมายคูณ เพราะฉะนั้น เราต้องเปรียบเทียบความสำคัญก่อน บวกมันน้อยกว่าหรือมากกว่าคูณ น้อยกว่าใช่ไหม บวกมีค่าน้อยกว่าคูณ เพราะฉะนั้น ทำอย่างไรคะ เอาคูณออกมา บวกมีค่าน้อยกว่าคูณ เพราะฉะนั้น ต้องเอาข้อมูลที่อยู่บน Stack นี่ คือ คูณ เอามาไว้ที่ Output เห็นไหมคะ เอามาไว้ที่ Output เสร็จแล้ว เราถึงเอาเครื่องหมายบวก Push ลงไปใน Stack นะคะ แล้วค่อยเอาเครื่องหมายบวกใส่ลงไปใน Stack ได้เลย เพราะว่า Stack มันว่าง เพราะฉะนั้น ตรง Output จะเป็น 5, 2 แล้วก็เครื่องหมายคูณ ทำไมคูณถึงต้องออกมา เพราะบวกมันน้อยกว่าคูณ เห็นไหมคะ บวกมันน้อยกว่าคูณ เลยเอาคูณออกมา ถัดมา เลขอะไรคะ เลข 2 เอาไปไว้ที่ Output ได้เลย ก็เอามันไปต่อท้ายคูณ ใช่หรือเปล่า เพราะมันคือตัวสุดท้าย เอามันมาต่อท้ายคูณใช้หรือเปล่า เพราะมันคือคูณเอา 2 มาต่อท้าย ตอนนี้เราอ่านข้อมูลครบหมดแล้ว แต่ใน Stack มันยังมีบวกค้างอยู่ เพราะฉะนั้น ต้อง Pop มันออกมา แล้วไว้ข้างหลังเลยนะคะ นะคะ Pop มันออกมาและไว้ข้างหลัง โอเคนะ แบบฝึกหัด ช่วยครูทำหน่อย ตอนนี้เลย ครูโจทย์ให้นะคะ 3 หาร 1 ลบ 2 แล้วครูก็บอกว่าหารนี่ มันมีค่ามากกว่าลบนะ นะคะ หาค่าผลลัพธ์ของนิพจน์ Postfix ให้ครูหน่อย ผลลัพธ์สุดท้ายตัวนี้จะได้อะไร เริ่มต้น ทุกคนตีตารางก่อน ลองทำดูสิคะ มีกระดาษไหม ไม่มีมาเอาข้างหน้า ครูมีกระดาษให้นะ เร็ว แบบฝึกหัด 1 ข้อนะคะ ทำตอนนี้เลย เหมือนกับโจทย์ที่ครูให้ไปนะคะ คล้าย ๆ กับโจทย์ที่เราให้ไป แล้วเราก็จดแล้วด้วยนะ เหมือนโจทย์สุดท้ายที่ครูให้ไปเมื่อกี้เลยนะ ลบมันน้อยกว่าหารใช่ไหมคะ เราเปรียบเทียบกัน ลบมันน้อยกว่าหาร เพราะฉะนั้น ต้องเอาหารออกมา คราวนี้นะคะ ดูด้วยกัน 3 เอา 3 ไปไว้ที่ไหนคะ ที่ Output เห็นไหมคะ เอา 3 ไปไว้ที่ Output เครื่องหมายหาร เอาเครื่องหมายหารไปไว้ที่ไหน Stack เพราะมันเป็น Stack ว่าง เราก็หย่อนเครื่องหมายหารได้เลย Output เรายกมันลงมาด้วยนะ ถัดไป เราอ่านเจอเลข 1 ใช่ไหมคะ เลข 1 เราต้องเอาเลข 1 ไปไว้ที่ไหน Output ยกลงมาก่อน เสร็จแล้วก็เติมเลข 1 ลงไปใน Stack ยังเหมือนเดิมนะ เรายังมีเครื่องหมายหารอยู่ เราก็ยกลงมาได้เลย ถัดมา เครื่องหมายลบใช่ไหมคะ เดิม ใน Stack เรามีหารอยู่แล้วใช่ไหม ครูเขียนให้ดูก่อนเรามีหารอยู่แล้วนี่ เราเอาลบนี่ มาเทียบกับหาร ปรากฏว่าค่าลบมันน้อยกว่า ให้ทำอย่างไร ให้เอาหารนี่ เอาออกมาไว้ที่ Output เพราะฉะนั้น จะได้เป็น 3, 1 แล้วก็หาร ตรงนี้หายไปใช่ไหมคะ เสร็จแล้วก็ใส่ค่าลบลงมาใน Stack ถัดมาหย่อนอะไร 2 เอาไปไว้ที่ Output ยกของเดิมลงมาก่อน ที่ Output แล้วก็ใส่เลข 2 ใน Stack หรืออะไรคะ เครื่องหมายลบใช่ไม อ่านครบหมดแล้วนะ แต่ใน Stack ยังมีค่าอยู่เลย เพราะฉะนั้น เราต้องเอาค่าจาก Stack ออกมา เป็น 3 1 หาร 2 แล้วอะไรคะ ลบ เห็นไหม เราเอาค่าที่อยู่ใน Stack ตัวสุดท้าย มาใส่ข้างหลังได้เลยนะคะ โอเค อีกข้อหนึ่ง แล้วจะให้เลิก ครูให้โจทย์มาแค่นี้เอง วาดตารางเองด้วย โจทย์ข้อนี้ อันดับแรกวาดตารางก่อนเลย ตีตารางค่ะ ดูนิดหนึ่ง คูณมันมากกว่าลบใช่หรือเปล่า คูณมันมีค่ามากกว่าลบ เพราะฉะนั้น ทำอะไร ก็ Push คูณลง Stack ได้เลยนะคะ Push คูณลงใน Stack ได้เลย โอเค มาดูนะคะ 6 เป็นตัวเลข เอาไว้ที่ Output ใช่หรือเปล่า ลบ เอาไว้ที่ Stack นะคะ 6 ก็ใส่มาเหมือนเดิม 5 เอาไว้ที่ไหนคะ เอาไว้ output Stack ก็ยกลงมาเหมือนเดิมนะคะ ถัดมา คูณ เจอคูณใช่ไหมคะ เจอคูณ ให้เปรียบเทียบกับตัวนี้ก่อน ปรากฏว่าคูณมีค่ามากกว่าลบ ให้ Push คูณลง Stack ได้เลย เพราะฉะนั้น Stack เดิม เป็นลบอยู่แล้ว ครูบอกว่า push ลงไปได้เลย เพราะครบอกว่า Push ลงมาได้เลยนะคะ เพราะคูณมันมากกว่านะ มันมากกว่านะคะ ข้างหลัง คือ 6 กับ 5 ถัดมา 2 เป็นตัวเลขไว้ข้างหลังนะคะ Stack มีเท่าไหร่ ยกลงมา โอเค เสร็จแล้ว หมดแล้วนะ ผลลัพธ์สุดท้ายที่ได้ 6, 5, 2 เอาคูณออกมาก่อน แล้วตามด้วยลบนะคะ เห็นนะ โอเค ทุกคนดูนะคะ เราสังเกตนะ ทำไมตัวนี้ เอาหารออกมา ตัวนี้ไม่ได้เอาอะไรออกมานะคะ วิธีการสังเกต โอเค ลบเทียบกับหาร ลบมันมีค่าน้อยกว่าหาร เห็นไหมคะ ลบมีค่าน้อยกว่าหาร เลยต้องเอาหารออกมา แต่ถ้า Input ที่ใส่เข้าไปนี่ มีค่ามากกว่า เราก็ใส่ลงไปใน Stack ได้เลย ถ้าตัวซ้ายมันมากกว่าตัวบนตรงนี้ เราก็ใส่ลงไปใน Stack ได้เลยนะคะ โอเค ต้องกลับไปทบทวนอีกรอบหนึ่งนะ นะคะ เดี๋ยวสัปดาห์หน้าเดี๋ยวครูจะทวนให้อีกรอบหนึ่ง โอเค เดี๋ยวทั้งหมดนี้ เดี๋ยวครูจะอัป (โหลด)ที่ Classroom ให้นะคะ เดี๋ยวครูจะไปสแกนให้ แล้วก็อัปโหลดให้ โอเค เดี๋ยวครูเช็กชื่อหน่อยนะคะ ครูเช็กชื่อหน่อย ศิริลักษณ์ 02 มาไหม 02 คนนี้หรือ 03 อดิศร เป็น COVID 4. นพกิต คนนี้ 5. พงศ์ภรณ์ ไหน อ๋อ จันทกานต์ ไหนคะ กัญญานัฐ กัญญาณัฐ ธัญญาลักษณ์อ๋อ โอเค วริษานนี้ภัทรดา 11 ไม่มา เทพอักษร ธนภัทร 15 โอเค ภากรณ์ 16 โอเค ค่ะ เจอกันสัปดาห์หน้า