(อาจารย์สุธาสินี) 2 มี 3 มี 4 แล้วก็มี 5 มีทั้งหมด 5 ตัวนะคะ คราวนี้ เรารู้ได้อย่างไรว่ามันคือลิสต์ เห็นก้ามปูเปิด-ก้ามปูปิดไหมคะ ตัวนี้เป็นสัญลักษณ์ที่บอกว่าการเก็บข้อมูล ลักษณะแบบนี้มีชื่อเรียกว่า "ลิสต์" นะคะ จะเก็บค่าของข้อมูล ใน List index ก็คือหมายเลขถูกไหมคะ ก็คือหมายเลขของข้อมูลนี่ เราเริ่มต้นที่หมายเลขอะไรเอ่ย พอเราวาดเป็นช่องใช่ไหมคะ ในลิสต์นี่ ถ้าเราลองวาดการจัดเก็บนะ ก็จะเป็น 1 แล้วก็จะเก็บข้อมูลลงไปในช่องแบบนี้นะคะ หมายเลขช่องหรือว่า Index ตัวแรก เราจะเริ่มต้นที่เท่าไรคะ ตรงนี้ index เราจะเริ่มที่เราไรเอ่ย 0 นะ ใช่ไหมคะ 1 2 3 แล้วก็ 4 ก็คือหมายเลขช่อง นะถ้าเราวาดรูปให้เป็นรูปสี่เหลี่ยม ในการจัดเก็บข้อมูล แล้วเวลาครูเข้าถึงข้อมูลที่อยู่ในลิสต์ ตอนนี้ครูตั้งชื่อลิสต์ตัวนี้มีชื่อว่า X X[3] ตอบเท่ากับเท่าไรเอ่ย index เป็น 3 ตัวนี้ตอบ 4 ใช่ ตรงนี้ต้องตอบว่า 4 นะคะ ทุกคนจำได้นะ แล้วถ้า X เราต้องการหลาย ๆ ค่า 2 จนถึง 4 จะตอบเท่ากับเท่าไรคะ 3 กับ... 3 กับอะไรเอ่ย 4 ใช่ไหม คือ 3 กับ 4 นะ มันเริ่มต้นที่ 2 ใช่ไหมคะ ก็คือเริ่มต้นที่ตัวนี้ ถึง 4 แล้วก็ลดลงมา 1 ช่อง ก็จะได้ข้อมูลตัวนี้ ก็คือ 3 กับ 4 คราวนี้ แล้วเราเอาลิสต์มาทำอะไรนะคะ เราเก็บข้อมูลที่อยู่ในรูปแบบลิสต์ แล้วเราเอามาใช้ทำอะไรนะคะ วันนี้เราจะพูดถึงโครงสร้างอีกแบบหนึ่ง ที่มีชื่อว่า "สแตก" นะ สแตกนะคะ สแตกตัวนี้ จะใช้วิธีการเก็บข้อมูลแบบลิสต์นะคะ แล้วลักษณะแบบไหน ที่เราจะเรียกว่า "สแตก" นะคะ ดูด้วยกัน เขาบอกว่าสแตกก็คือการที่เราใส่ข้อมูลเข้าไป แล้วก็ดึงออกมานะคะ แล้วข้อมูลที่ถูกใส่เข้าไปในสแตกก่อน จะถูกเอาออกมาใช้ทีหลัง อันนี้ คือ วิธีการเก็บข้อมูลแบบสแตก หรือเราจะเรียกว่า "เข้าทีหลังออกก่อน" "เข้าก่อนออกทีหลัง" ความหมายเหมือนกัน ยกตัวอย่างเช่น ทุกคนเคยไปที่ร้านก๋วยเตี๋ยวไหมคะ ทุกคนเคยไปร้านก๋วยเตี๋ยวนะ แล้วเห็นถ้วยก๋วยเตี๋ยว ก่อนที่เขาจะเอามาใส่เส้น ใส่เครื่องปรุง ใส่หมูให้เรา ชามก๋วยเตี๋ยวมันเรียงขึ้นไปแบบนี้ใช่ไหมคะ เวลาแม่ค้าเขาจะเอาชามก๋วยเตี๋ยวมาใส่ให้เรา เขาเอาชามที่อยู่ข้างบน หรือชามที่อยู่ข้างล่าง เอาชามข้างบนหรือข้างล่างคะ ข้างบน ใช่ไหม เขาเอาข้างบนมาทำให้เรา แล้วเวลาเขาล้างจานเสร็จแล้วนี่ เวลาเขาวางซ้อนนี่ เขามาซ้อนข้างล่างหรือซ้อนข้างบน ซ้อนข้างบนใช่ไหมคะ เพราะฉะนั้น จานที่อยู่บนสุด จะถูกเอาออกมาใช้ก่อน และจานที่อยู่บนสุดนะคะ จะถูกเอาเข้ามาเก็บทีหลัง อันนี้คือรูปแบบของสแตกเช่นนะคะ เช่น ๆ สมมติ ครูมีกระดาษอยู่ 1 แผ่นนะ ครูมีกระดาษอยู่ 1 แผ่นนะ ทุกคนดูนะคะ กระดาษแผ่นที่ 1 ครูจะใส่กระดาษแผ่นที่ 2 เห็นไหมคะ ครูซ้อนกระดาษแผ่นที่ 2 อยู่ข้างบนนะ ครูใส่ ครูใส่กระดาษแผ่นที่ 3 เข้าไปนะคะ แล้วครูก็ใส่กระดาษแผ่นที่ 4 เข้าไปในมือครู เวลาครูจะเอาออกมาใช้ ครูจะเอาตัวล่างสุด หรือเอาตัวบนสุดออกไปใช้ ตัวบนสุดถูกไหมคะ ครูไม่พยายามจะดึงตัวล่างสุดออกมานะ แต่ครูจะหยิบตัวบนสุดออกไปใช้ ซึ่งตัวบนสุดนี่ คือ กระดาษแผ่นที่เราใส่ไปล่าสุดนะคะ เราสามารถสรุปได้แบบนี้นะ ข้อมูล ที่เข้ามาในสแตกตัวแรกจะอยู่ด้านล่างสุด ข้อมูลที่หย่อนลงไปในสแตกตัวแรก จะอยู่ด้านล่างสุดเลยนะคะ ตัวถัดไปก็จะซ้อนขึ้นมาเรื่อย ๆ ข้อมูลที่เข้าไปในสแตกเป็นตัวสุดท้ายนะคะ จะอยู่บนสุด นะคะจะอยู่บนสุด แล้วเวลาเราเอาข้อมูลในสแตก ออกมาใช้งาน ข้อมูลที่เข้าไปเป็นตัวล่าสุด หรือตัวลำดับสุดท้าย จะถูกดึงออกมาใช้งานก่อน ตัวไหนที่เข้าไปตัวแรก จะถูกเอามาใช้งานเป็นตัวสุดท้ายนะคะ เพราะมันอยู่ล่างสุด เวลาดึงออกมาใช้ มันก็ใช้ยากนะ เราต้องใช้ตัวบน ค่อย ๆ ดึงตัวบนออกไปก่อน คราวนี้เวลาเราเอาข้อมูลใส่ในสแตก เราพูดถึงสแตกก็เหมือนภาชนะนะ ตอนนี้ทุกคนมองสแตกเป็นช่องแบบนี้นะคะ เป็นช่องสี่เหลี่ยม เป็นช่องในแนวตั้ง ถ้าเราพูดถึงสแตกนะ ดูรูปนี้ก่อน อย่างนี้ ก็คือมันจะอยู่ในแนวนอนหรือแนวตั้งก็ได้ ตอนนี้ครูให้มองเป็นภาพในแนวตั้ง ถ้าพูดถึงสแตก ก็คือเป็นชั้น เป็นชั้น เป็นชั้น เลื่อนขึ้นไปเรื่อย ๆ นะคะ ในสแตกเราทำอะไรได้บ้าง เราใส่ข้อมูลลงไป เราดึงข้อมูลออกมา คราวนี้ สแตกถ้ามันไม่มีข้อมูลอะไรเลย เราเรียกว่า "สแตกว่าง" คือ มันมีค่าว่าง ๆ ไม่มีตัวเลข ไม่มีตัวอักษรอะไรเลยนะคะ อันนั้นจะเรียกว่า คือ สแตกว่าง ถ้าเราจะใส่ข้อมูลลงไปในสแตก เราจะมีคำสั่งที่ชื่อว่า "Push" คือคำสั่งตัวนี้นะคะ คำสั่ง Push ก็คือใส่ข้อมูลลงไปในสแตก ถ้าต้องการเอาข้อมูลออกจากสแตก เราใช้คำสั่ง "Pop" นะคะ มีอยู่ 2 ตัวที่ทุกคนต้องรู้จัก เมื่อพูดถึงสแตก คือ Push กับ Pop Push คือใส่ถูกไหม เอาข้อมูลเข้าไปเก็บ ส่วน Pop ก็คือเอาออกนะคะ Pop คือ เอาออก คราวนี้มาดูตัวอย่างนะคะ มีแค่ Push กับ Pop 2 ตัว เราเริ่มต้น สแตกไม่มีอะไรเลย เป็นค่าว่าง ๆ ถูกไหมคะ เป็นสแตกว่าง ครูบอกว่าครู Push เห็นไหมคะ คำสั่ง Push Push ค่าอะไร Push ค่า a เมื่อไรก็ตามที่ใช้คำสั่ง Push ต้องบอกด้วยว่าจะใส่ค่าอะไรด้วยนะคะ เรา Push ค่า a ลงไปเห็นไหม มันก็อยู่ด้านล่างสุดนะคะ ถัดมา ถ้าครูใส่คำสั่งตัวบนก่อน push (b) ก็ใส่ b ลงมาเห็นไหมคะ ถัดจาก a ก็คือ b push (c) c ก็อยู่ถัดขึ้นไป และ push (d) อยู่บนสุดนะคะ เรียงตรามลำดับของการใส่ข้อมูลเข้าไป คราวนี้อยากจะเอาออกบ้าง เอาข้อมูลออกจากสแตกไปใช้งาน จะใช้คำสั่ง Pop Pop นะ Popแล้วตามด้วยวงเล็บเปิดและก็วงเล็บปิด ไม่ต้องใส่ค่าอะไร เพราะเราจะไปดึงค่าที่อยู่ในสแตกออกมา เราสั่งคำสั่ง Pop เราเอาข้อมูลบนสุดนะคะ Pop ให้เอาข้อมูลบนสุดที่อยู่ในสแตก ดึงออกมา เพราะฉะนั้น เดิมเป็นแบบนี้ ถูกไหม ครูใช้คำสั่ง 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 ด้วยอะไรนะคะ อย่างที่ครูบอกว่าลิสต์ จะถูกเอามาใช้แทนนะคะ การจัดเก็บข้อมูลในสแตก เราพูดถึงสแตก แล้วมันเก็บแบบไหน เราก็ใช้ลิสต์นั่นล่ะในการเก็บข้อมูล ลิสต์นะคะ เราสามารถวาด เป็นแนวตั้งหรือแนวนอนก็ได้ นะ สามารถวาดเป็นแนวตั้ง หรือแนวนอนก็ได้ ข้อมูลที่ใส่เข้ามาตัวแรกนะคะ จะอยู่ที่ index 0 ก็คือข้อมูลตัวแรกไล่ไปเรื่อย ๆ จนถึงข้อมูลตัวสุดท้าย สแตกที่ครูให้มานี่ ที่เก็บอยู่ในรูปแบบที่เป็นลิสต์นี่ มันมีช่องว่างไหมคะ มันมีที่ว่างให้ใส่ได้อีกไหม สแตกรูปนี้มีอยู่ 4 ช่องด้วยกัน ทุกช่องมีค่าไหมคะ ทุกช่องมีค่านะ มันเต็มหรือยังคะ มันมีที่ว่างให้ใส่ไหม มันมีที่ว่างให้ใส่อีกไหมคะ ไม่มีแล้ว อย่างนี้เรียกว่าสแตกเต็มแล้วนะคะ คือ มันไม่มีช่องว่าง ให้เราใส่ข้อมูลตัวใหม่ได้แล้วนะคะ อย่างนี้เรียกว่าสแตกมันเต็มแล้ว คราวนี้ เรามี 2 คำสั่งที่พูดถึงนะ Push กับ Pop นะคะ Push ก็คือใส่ข้อมูลลงไปในสแตก เช่น ครูมีสแตก อย่างนี้ใช่ไหม มันมีที่ว่างให้ครูใส่ข้อมูลได้ไหมคะ มีนะ มันมีที่ว่างให้ครูใส่ข้อมูลได้นะคะ ครูก็เลยสั่งคำสั่ง Push 3 ก็คือเอาข้อมูล 3 นี่ ไปหย่อนลงในสแตก มันจะมาใส่ช่องนี้ ช่องที่ 1 หรือช่องที่ 2 คะ ช่องที่ 1 ถูกไหม ก็ไล่ลำดับมาเรื่อย ๆ มันอยู่ช่องนี้แล้ว ข้อมูลล่าสุดอยู่ช่องนี้ เพราะฉะนั้น เวลาเราหย่อนลงไป มันก็ไหลลงไปจนถึงตัวสุดท้าย ที่มันสามารถจะใส่ได้ ก็คือในช่องตรงนี้นะคะ ก็จะเอา 3 มาใส่ แล้วเราใส่ด้วยคำสั่งอะไร เราใช้ลิสต์นะคะ ในการจัดเก็บข้อมูล เราใช้ลิสต์ในการจัดเก็บข้อมูล เพราะฉะนั้น คำสั่งของการ เพิ่มข้อมูลลงไปในสแตก ก็คือใช้คำสั่ง Append ได้เลย เพราะ Append เป็นคำสั่ง ของการเพิ่มข้อมูลลงไปในลิสต์นะคะ ใส่ชื่อ . แล้วตามด้วยคำสั่ง append วงเล็บเปิด ใส่ค่าข้อมูลตัวใหม่แล้วก็วงเล็บปิด ถัดมา Pop คือ เอาออกนะคะ คือ Pop คือ เอาออก ก่อนที่เราจะเอาข้อมูลออกนี่ เราต้องเช็กก่อนว่า สแตกเรานี่ มีข้อมูลอยู่ไหม ถ้าสแตก มันไม่มีข้อมูลอยู่เลย เราจะเอาอะไรออกมาได้ไหม ไม่ได้นะคะ เพราะไม่มีข้อมูลอะไรให้เราดึงออกมา เพราะฉะนั้น อันดับแรกนี่ เราต้องเช็กก่อน มันมีข้อมูลอยู่ไหมนะคะ มันมีข้อมูลอยู่ไหม ถ้ามันไม่มีข้อมูลอยู่เลย เราจะบอกว่ามันคือสแตกว่าง เราจะไม่สามารถทำคำสั่ง Pop ได้นะคะ แต่ถ้าสแตกไม่ว่าง เช่น ในบรรทัดแถวที่ 2 สแตกไม่ว่างนะ มันมีข้อมูลอยู่ตั้ง 3 ตัว เราใช้คำสั่ง Pop ข้อมูลอะไรจะถูกดึงออกมา มีอยู่ 3 ค่านี่ ข้อมูลที่จะเอาออกมาจากสแตก ก็คือข้อมูล ค่าอะไรเอ่ย อะไรคะ 1 หรือ 2 หรือ 3 3 ใช่ไหม เอาตัวที่อยู่บนสุด ตัวล่าสุดน่ะ ตัวล่าสุดถูกไหมคะ ถ้าอยู่ในแนวนอนตัวล่าสุดจะอยู่ด้านขวา ถ้าเป็นแนวตั้งตัวล่าสุดจะอยู่ข้างบน ใช่ไหมคะ ก็คือเลข 3 จะถูกดึงออกมานะคะ หลังจากที่เราใช้คำสั่ง Pop โอเค ถัดมาตัวนี้จะเป็นคำสั่งที่เราใช้เขียน เช่น เราจะเช็กว่า สแตกนั้นเป็นสแตกว่างหรือเปล่า เราก็ดูขนาดของสแตกใช่ไหมคะ หาขนาดของสแตกว่ามันมีขนาดเท่าไร ถ้าขนาดมันมีค่าเป็น 0 แสดงว่ามันเป็นสแตกว่าง คือ ไม่มีข้อมูลอยู่เลย ก็ไม่ต้องทำอะไรใช่ไหมคะ แต่ถ้ามันไม่ใช่สแตกว่าง เราก็จะดึงค่าที่อยู่บนสุดออกมา คราวนี้ อันนี้จะเป็นโค้ด เป็นโปรแกรมที่เราจะเขียนทั้งหมด เดี๋ยวครูบอกอีกทีข้างหลังนะคะ สมมติว่า ครูอยากถาม คราวนี้ดูนะคะ ครูมีสแตกมาให้ สแตกครูมีกี่ช่องคะ มี 4 ช่องในแนวตั้ง ถูกไหม เป็นสแตกในแนวตั้ง มี 4 ช่องนะคะ ตัวล่า... ตัวแรกน่ะจะอยู่ด้านฐาน จะอยู่ด้านล่างสุดนะ เวลาเราหย่อนข้อมูลลงไป ตัวแรกจะลงมาอยู่ช่องล่างสุด แล้วค่อยขยับไปช่องถัดไป ถัดไปนะคะ จะซ้อนขึ้นไปข้างบนนะ ถ้าเป็นสแตกในแนวตั้ง คำสั่งอย่างที่บอกเรามีแค่ 2 คำสั่งนะ มีแค่ Push กับ Pop ใช่ไหมคะ Push ใส่ข้อมูล กับ Pop เอาข้อมูลออก คือ ใส่กับเอาออกนะคะ คราวนี้ดู Push 5 เห็นไหมคะ ครูใส่หมายเลขช่องก่อนนะ อันนี้เป็นหมายเลข 1 0, 1, 2, 3 นะ เราจะได้เข้าใจตรงกัน โอเคนะคะ มีหลายเลขช่องแล้วนะ เริ่มที่ 0, 1, 2, 3 ครูสั่ง Push 5 5 จะไปอยู่ที่ช่องไหนคะ ช่องไหนเอ่ยช่องหมายเลขอะไร ครูหย่อน 5 ลงไปมันก็จะไหล ปุ๊ด ๆ ๆ ลงมา มาอยู่ที่ช่องไหนคะ ช่อง 0 เห็นไหม พอครูหย่อน 5 ลงมา มันก็ไหลลงมาเรื่อย ๆ เห็นไหมคะ จนมาอยู่ที่ช่อง 0 เสร็จแล้วครูสั่งคำสั่ง Push 10 เดิมมันมี 5 อยู่แล้วนะ แล้วครูสั่ง Push 10 เพราะฉะนั้น 10 จะมาอยู่ที่ไหนคะ 10 จะมาอยู่ที่ 1 ถูกไหมคะ ก็หย่อน 10 ลงมานะ ถัดมาเดิม เดิม มี 5 กับ 10 แล้ว ครูเขียนเรียบร้อยก่อนนะคะ ใส่ที่ช่อง 0 กับช่อง 1 ครูสั่ง Push 15 ไปอยู่ที่ช่องไหนคะ 2 เห็นไหม พอ Push ข้อมูลลงไปนะคะ คราวนี้ จากรูปนี้ ครูสั่ง Pop เอาอะไรออกมาจากรูปนี้พอครูสั่ง Pop ปุ๊บ เอาอะไรออกมาคะ เอาอะไรออกมาเอ่ย 15 ใช่ไหม เอาตัวบนสุด เลือก เราเลือกตัวบนสุดออกมาใช่ไหมคะ เพราะฉะนั้น 15 จะถูกดึงออกมาข้างนอกเห็นไหมคะ เพราะฉะนั้นในสแตกจะเหลือแค่ 10 กับ 5 ครูสั่ง Pop อีกทีหนึ่ง เอาอะไรออกมาคะ เดิม มี 5 กับ 10 คราวนี้เอาอะไรออกมา ครูสั่ง Pop ปุ๊บ อะไรออกมาคะ 10 ออกมาเห็นไหม 10 ไม่เหลือแล้ว เพราะฉะนั้น ตอนนี้ในสแตก เราเหลือกี่ค่าคะ ค่าเดียว คือเลข 5 จดตัวนี้ไว้ในกระดาษให้ครูหน่อย เดี๋ยวครูจะให้ทำแบบฝึกหัดนะคะ มีกระดาษไหมคะ มีใครไม่มีกระดาษไหม ครูมีกระดาษมาแจก มีไหมคะ มันจะมีเส้น คราวนี้นะคะ ครูมีโจทย์มาให้ แล้วก็มีคำสั่งมาให้ ทำเหมือนเดิมเลยใช่ไหมคะ แต่ครูมีตัวเริ่มต้นให้ ครูมีให้อยู่แล้ว อยู่ในสแตก คือ 5 ใช่ไหมคะ อันแรก เราหย่อนเลข 2 ลงไป อันที่ 2 เขียนของเดิมก่อนใช่ไหมคะ แล้วค่อยหย่อนเลข 7 ลงไป ถัดมาหย่อนเลข 1 Pop คือ เอาออกนะ เอาออก แล้วบอกครูด้วยว่า ข้อมูล ที่เอาออกมา คืออะไร เสร็จแล้วก็มีคำสั่งตัวสุดท้าย คือ Push เลข 7 ลงไป ลองทำดูนะคะ เพราะฉะนั้น แต่ละข้อมันจะต่อเนื่องกันไปนะคะ ทำตัวแรก ข้อที่ 1 เสร็จ เอาข้อมูลนี่มาตั้งต้นไว้ก่อน แล้วเราค่อย Push เลข 7 ลงไป เดี๋ยวเราทำด้วยกัน 1 ข้อนะ อันนี้คือ Push เลข 2 คือหย่อนเลข 2 ลงไป ข้อที่ 2 ครูจะใส่เลข 7 เพราะฉะนั้น ครูต้องใส่ข้อมูลเดิมก่อนนะคะ และก็หย่อนเลข 7 ลงไป ทำต่อให้ครูหน่อยอีก 3 อัน คราวนี้เดี๋ยวเรามาดูเฉลยพร้อมกันนะคะ ข้อ 3 นะคะ ครูสั่ง Push 1 ก็คือให้ใส่เลข 1 ลงไปในสแตก เดิมเอาของเดิมยกมาก่อนนะ อย่าเพิ่งใส่นะคะ ของเดิมมี 3 ค่านะ เขียนก่อนนะคะ เขียนค่าเดิมก่อน ใส่ค่าเดิมมาก่อนนะคะ เสร็จแล้วครูสั่ง Push 1 1 จะอยู่ด้านบนเลข 7 ใช่ไหมคะ จากนั้นครูสั่ง Pop Pop คือ เอาออก บนสุดคืออะไร คือ 1 เพราะฉะนั้นเอาอะไรออก เอา 1 ออก เพราะฉะนั้น ที่เหลือก็คือ 5, 2, 7 ถูกไหมคะ 1 จะถูกเอาออกมาใช่ไหม เพราะฉะนั้น ข้อมูลที่นำออกจากสแตกก็คือ 1 นะคะ ครูสั่ง Push อีกครั้งหนึ่ง ทำอย่างไร ก็เอาของเดิมที่มีอยู่ในสแตกเขียนก่อน เพราะฉะนั้น กรณีที่ Push ข้อมูล ลงไปในสแตก ยกของเดิมมาก่อน เสร็จแล้วใส่ตัวเลขที่ครูสั่งลงไป ก็คือ 7 7 ก็จะอยู่ด้านบน นะคะ อันนี้คือสแตกที่ได้ หลังจากที่เราใช้คำสั่งทั้งหมด 5 คำสั่ง โอเค ถัดมาครูเปลี่ยนนะคะ จากแนวตั้งเป็นแนวนอนนะคะ ถ้าครูลองเปลี่ยนสแตกเป็นแนวนอนบ้าง คราวนี้ครูลองเปลี่ยนสแตก เป็นอีกรูปแบบหนึ่ง เป็นแนวนอนบ้างนะคะ และครูมีตัวเลขที่อยู่ในสแตกไว้ให้ คือ 3 แล้วก็ 1 ถูกไหม ตัวแรกจะอยู่ซ้ายสุดถูกไหมคะ ถัดมาก็จะเป็นตัวที่ 2 แล้วครูใช้คำสั่ง Push 5 ข้อที่ 2 ครู Push 6 เสร็จแล้วครู Pop นะคะ ลองทำสิ คราวนี้นะคะ มาดูเฉลยด้วยกัน ครูสั่ง Push 5 แสดงว่าครูกำลังจะใส่ ข้อมูลลงในสแตก คือเลข 5 นะคะ ครูก็เอาเลข 5 มาหย่อนลงเลยนะ เอาเลข 5 มาหย่อนเลยนะคะ ถัดมาครูใช้คำสั่ง Push ครูใช้คำสั่ง Push ทำอย่างไร เอาของเดิมยกลงมาก่อนนะ ยกของเดิมมาใส่ก่อนนะคะ ก็จะมี 3, 1 แล้วก็ 5 จากนั้น เรา Push ค่าใหม่ ใส่ค่าใหม่ลงไป ก็คือ 6 โอเคนะ ใส่ค่า 6 ก็คือค่าใหม่ลงไปในสแตก เสร็จแล้วครูใช้คำสั่ง Pop ก็คือเอาออก ก็คือเอาตัวล่าสุด ก็คือที่อยู่ด้านขว เอาออกเพราะฉะนั้น ค่าที่ถูกเอาออก ก็คือเลข 6 ใช่ไหมคะ เอาเลข 6 ออกมา แล้วเราก็ยกตัวที่เหลือ ลงมาใส่ ก็จะเหลือเป็น 3, 1 แล้วก็ 5 นะคะ ครบแล้วหรือ โอเค คราวนี้นะคะ มาดูต่อ กระดาษที่ครูแจกเอาวางไว้ก่อนนะคะ อย่าเพิ่งใช้ เรายังไม่ใช้ตอนนี้ เราใช้สแตกทำอะไร เมื่อกี้เราพูดถึงสแตกไปแล้วนะ เข้าก่อนออกทีหลังนะคะ ข้อมูลไหนเข้าก่อนจะถูกเอาออกทีหลัง แล้วเราใช้สแตกทำอะไรบ้าง เราใช้สแตกมาทำอะไรบ้าง ทุกคนบวกเลขเป็นใช่ไหม ทุกคนบวก ลบ คูณ หารนะคะ สมการทางคณิตศาสตร์ได้ สแตกจะถูกเอามาใช้ในการหาผลลัพธ์ ของสมการคณิตศาสตร์ บวกเลข บวกลบเลขนะคะ คราวนี้ ก่อนที่จะไปดูรูปแบบของการใช้สแตก แล้วสแตกมันเกี่ยวข้องอย่างไร กับการบวก ลบ คูณ หารนะคะ เรามาดูรูปแบบก่อนว่า เราใช้สแตกเพื่อเป็นนิพจน์ ก็คือลักษณะของสมการ มีอยู่ 3 รูปแบบนะคะ รูปแบบแรกก็คือ Infix เครื่องหมายบวก ลบ คูณ หาร จะอยู่ระหว่างตัวเลขนะคะ อันนี้คือ Infix นิพจน์ตัวที่ 2 ก็คือ Prefix เครื่องหมาย บวก ลบ คูณ หาร จะอยู่ด้านหน้า และตัวสุดท้ายคือ Postfix เครื่องหมายจะไปอยู่ด้านหลังของตัวเลข AC อันนี้คือตัวเลขนะคะ เราจะแทนด้วยตัวเลขใด ๆ คราวนี้ดูนะคะ ในการคำนวณทางคณิตศาสตร์นะ เวลาเราเจอนะคะ การบวก ลบ ที่มันมีมากกว่า 2 ตัวเลข เช่นแบบนี้ 5 + 2 x 2 มันมีตัวเลขมากกว่า 2 ตัวนะคะ แล้วเราจะบวกลบเลขอย่างไร เรามีลำดับความสำคัญของเครื่องหมาย เจอวงเล็บก่อนทำในวงเล็บใช่ไหมคะ เราเจอวงเล็บ เราบวกลบเลขนี่ ในเครื่องหมายวงเล็บก่อน จากนั้นลำดับความสำคัญตัวที่ 2 ที่จะต้องทำก่อนก็คือ เครื่องหมายยกกำลัง เช่น 2 ยกกำลัง 2 ใช่ไหมคะ 3 ยกกำลัง 2 อย่างนี้เป็นต้น เจอเลขยกกำลังเสร็จแล้ว เราจะคำนวณเครื่องหมายไหนต่อไป คูณกับหาร คูณกับหาร มีลำดับความสำคัญเท่ากันนะคะ มีลำดับความสำคัญเท่ากัน ตามด้วยบวกกับลบนะ บวกกับลบก็มีความสำคัญเท่ากัน แต่จะทำหลังการทำเครื่องหมาย คูณกับหารนะคะ คราวนี้มาดูโจทย์ครู 2 ตัวนี้เป็นตัวเลขตัวเดียวกันเลย (5 + 2)*2 ตัวแรกครูมีวงเล็บเปิดกับวงเล็บปิด โจทย์ตัวที่ 2 ไม่มีวงเล็บนะคะ ครูไม่มีวงเล็บนะ คราวนี้มาดูข้อแรกก่อน อย่างที่บอกว่าถ้าเจอวงเล็บ วงเล็บเปิด วงเล็บปิด ทำข้างในวงเล็บก่อน เพราะฉะนั้น เราเอาอะไรบวกกันก่อน 5 + 2 เป็นเท่าไรคะ เป็น 7 7 แล้วคูณด้วย 2 เท่ากับเท่าไร เท่ากับเท่าไรคะ เท่ากับ 14 ตัวเลขเท่ากับ 14 ตัวแรกนะคะ เท่ากับ 14 แล้วมาดูข้อ 2 ครูตัดวงเล็บทิ้งไป (5 + 2)*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 โอเคจะเห็นว่า อันนี้คือเราคิดใช่ไหม อันนี้คือเราคิดนะคะ แล้วเราจะสั่งให้คอมพิวเตอร์เข้าใจ แบบที่เราคิดเมื่อกี้ได้อย่างไร รู้ว่าถ้าเจอคูณนี่ต้องทำคูณก่อนเลย เจอวงเล็บเปิด ต้องทำวงเล็บเปิดวงเล็บปิดก่อน ตอนนี้เราจะสั่งให้คอมพิวเตอร์นี่ สามารถคำนวณให้ได้แบบที่เราคำนวณเมื่อกี้ เราใช้สแตกเข้ามาช่วยในการคำนวณนะคะ เราใช้สแตกเข้ามาช่วยในการคำนวณ วิธีการทำแบบไหน มาดูวิธีการนะคะ เรามีตัวเลขอยู่ชุดหนึ่ง เราต้องการหาค่าออกมา เช่น ครูมีตัวเลขชุดนี้ล่ะ นี่ ครูสั่งให้คอมพิวเตอร์คำนวณ นี่มันต้องได้ผลลัพธ์ 9 แบบที่คิดแบบเมื่อกี้ คอมพิวเตอร์จะคิดแบบไหนนะคะ 1. เราต้องสร้างตารางแบบนี้ก่อน มี 3 ช่อง ช่องแรก คือ ใส่ Input ก็คือข้อมูลนำเข้า สแตก แล้วก็ผลลัพธ์นะคะ เรามีวิธีการทำนี่ 2 ช่วงด้วยกัน ช่วงที่ 1 ต้องแปลงนิพจน์นะคะ ให้เป็นแบบ Postfix เอาเครื่องหมายไปไว้ข้างหลังให้หมดก่อน เอาเครื่องหมาย ไปไว้ข้างหลังให้หมดก่อนนะคะ แล้วค่อยคำนวณออกมาเป็นตัวเลข ผลลัพธ์ เรามี 3 ช่องนะ ทุกคนต้องตีตาราง 3 ช่อง อันแรกเขียนว่า Input Stack แล้วก็ Output นะคะ ถัดมา ขั้นตอนวิธีการแปลง จาก Infix ให้เป็น Postfix ทุกคนมี Sheet ที่ครูให้นะ แบบนี้เลย ก็คือสิ่งที่อยู่บนสไลด์นะคะ ครูพรินต์ออกมาให้ เรามีอยู่ทั้งหมด 7 ขั้นตอนด้วยกัน มีทั้งหมด 7 ขั้นตอนด้วยกัน ครูให้เวลา 1 นาที 2 นาที อ่าน 7 ขั้นตอนนี้ ในกระดาษของตัวเองสิคะ ให้อ่านในกระดาษนะ หรือจะอ่านจากหน้าจอก็ได้ ให้เวลา 2 นาทีอยากให้อ่านก่อน คราวนี้เดี๋ยวมาดูพร้อมกัน เรามีอยู่ทั้งหมด 7 ขั้นตอนนะคะ เดี๋ยวเราจะลองฝึกนะ แล้วก็เทียบไปทีละขั้น ขั้นที่ 1 นะคะ กำหนดให้ Stack ว่าง ก็คือวาดตาราง 3 ช่องนี้ใช่ไหมคะ อันดับแรก สร้างสแตกว่าง ก็คือวาด 3 ช่องนะคะ กี่แถวยังไม่รู้นะ แต่มีอยู่ 3 คอลัมน์นะคะ 3 ช่อง อันนี้คือสแตกว่าง อันดับแรกนะคะ อันดับที่ 2 อ่านข้อมูลจากซ้ายไปขวา ก็คืออ่านข้อมูลทีละตัวใช่ไหมคะ เลข 5 เครื่องหมายบวก เลข 2 เครื่องหมายคูณ แล้วก็เลข 2 อันนี้คืออ่านจากซ้ายไปขวาทีละตัวนะคะ เราก็อ่านเข้ามาทีละตัว สมมติครูใช้ตัวเลขนะคะ เช่น อ่านข้อมูลจากซ้ายไปขวา ตัวแรก ก็คือ 5 ใช่ไหม อ่านจากซ้าย ซ้ายก็คือตัวแรกนะคะ ก็คือเลข 5 ถัดมา ถัดมาขั้นถัดมาเป็นขั้นที่ 3 ถ้าข้อมูลที่อ่านเข้ามาเป็นตัวเลข เช่น เลข 5 ใช่ไหมคะ ข้อมูลที่เราอ่านเข้ามา คือเลข 5 มันเป็นตัวเลขใช่ไหม ใช่ เอามันไปไว้ที่ไหน เอามันไปไว้ที่ช่องผลลัพธ์ ก็คือช่องสุดท้าย ก็คือช่องนี้ใช่ไหมคะ ช่อง Output ถัดมา ถ้าตัวที่เราอ่านเข้ามานี่ มันไม่ใช่ตัวเลข แสดงว่ามันต้องเป็นเครื่องหมาย ทางคณิตศาสตร์อะไรสักอย่างหนึ่งนี่ล่ะ เช่น เครื่องหมายบวกใช่ไหมคะ เครื่องหมายบวก เราอ่านเครื่องหมายบวกเข้ามา แล้วเขาให้เราเช็กก่อนว่า แล้วในสแตกมันมีค่าอยู่หรือเปล่า สแตกก็คือช่องนี้ ช่องที่ 2 นี่ มันมีค่าอยู่ไหม ถ้ามันไม่มีค่าอยู่เลย ก็หย่อนมันลงไปในสแตก แต่ถ้าในสแตกมันมีข้อมูลอยู่แล้ว เราจะต้องทำการเปรียบเทียบก่อน ว่าข้อมูลที่เราอ่านเข้ามานี่มันมีค่ามากกว่า หรือน้อยกว่าตัวที่อยู่ในสแตก ถ้ามันมากกว่า ถ้ากรณีที่ตัวที่เราอ่านนี่ มีค่ามากกว่า ก็หย่อนลงไปในสแตกได้เลย ถ้าสิ่งที่เราอ่านเข้ามา มันมีค่าน้อยกว่าสิ่งที่อยู่ในสแตก ให้เอาเครื่องหมายในสแตก ออกไปไว้ที่ผลลัพธ์ แล้วเอาเครื่องหมายตัวที่เราอ่านเข้ามา หย่อนลงไปในสแตก โอเค ถ้าเราอ่านจนครบข้อมูลทุกตัวแล้ว เรายังมีข้อมูลอยู่ในสแตก เราก็ดึงมันออกมา ก็คือ Pop มันออกมานะคะ เป็นผลลัพธ์ มาดูตัวอย่างนะ ทุกคนถือ... ดูกระดาษ ที่เป็นขั้นตอนด้วยนะคะ โอเค โจทย์ที่ครูให้ ทุกคนดูที่หน้าจอนะคะ ครูมีโจทย์มาให้นะคะ ก็คือ 5 + 2 x 2 อันดับแรกครูต้องทำอะไร ครูต้องวาดตารางก่อน ใช่ไหมคะ อันดับแรกวาดตาราง 3 ช่อง วาดตาราง 3 ช่อง จำนวนแถว ก็เอาข้อมูลตัวเลขกับเครื่องหมาย มาใส่ทีละบรรทัด 5 บรรทัดที่ 1 ถูกไหมคะ บวกบรรทัดใส่เลข 2 บรรทัดถัดมาใส่เครื่องหมายคูณ แล้วก็ใส่เลข 2 เราก็จะวาดตารางเรียบร้อยแล้วนะคะ จำนวนแถวขึ้นอยู่กับจำนวนข้อมูลในโจทย์ ว่ามีกี่ตัว ก็สร้างแถวใส่ข้อมูลให้เลย เรากำหนดสแตกว่างแล้วใช่ไหมคะ ถัดมา ต้องอ่านข้อมูลทีละตัว เราต้องอ่านข้อมูลทีละตัวจากซ้ายไปขวา ตัวแรกคืออะไรคะ คือ 5 ใช่ไหม ครูเขียนเรียงแล้ว 5 บวก... มี 2 มีคูณ แล้วก็มี 2 อันนี้คือข้อมูลที่เราอ่านจากซ้ายไปขวา ตัวแรกเป็นตัวเลขใช่ไหมคะ มันเป็นตัวเลข แล้วมันตรงกับตัวไหนในขั้นตอน ข้อ 3 ที่บอกว่า ถ้าเป็นตัวเลขให้เอาไปไว้ที่ไหน เอาไปไว้ที่ผลลัพธ์ ถ้าเป็นตัวเลข เอาไปไว้ที่ผลลัพธ์ได้เลย ถัดมาเจอเครื่องหมาย + นะคะ เจอเครื่องหมาย + ตอนนี้ใน Stack มันไม่มีค่าอะไรเลย ทำอย่างไรคะ ก็ใส่ได้เลย ใส่เครื่องหมายบวกลงมาได้เลย ถ้ามันเป็นสแตกว่าง เห็นไหมคะ ตัวบนมันเป็นสแตกว่าง เราก็เอาใส่ได้เลย แล้วก็เขียน 5 ลงมาเหมือนเดิมนะคะ ยก 5 ลงมาเหมือนเดิมนะ ดู ดูพร้อมครูก่อนนะ เดี๋ยวครู... จะถ่ายรูปเอาเข้าขึ้น Classroom ให้ ถัดมา เลข 2 ใช่ไหมคะ เลข 2 มันเป็นอะไร มันเป็นตัวเลข เพราะฉะนั้น ต้องเอาไปไว้ที่ไหน ไปไว้ที่ผลลัพธ์ตรงกับข้อ 3 ในขั้นตอนนะ เอา 2 มาไว้ที่ Output แต่ต้องเขียนหลัง ก็คือเขียนต่อจากเลข 5 นะคะ ถัดมา ยกเครื่องหมายบวกลงมาด้วยนะ เพราะมันอยู่ในสแตกนะคะ เรายังไม่ได้เอาอะไรออก หรือเอาอะไรเข้าเพิ่ม ถัดมา เป็นเครื่องหมายคูณ ในสแตกเรามีเครื่องหมายบวกอยู่แล้ว ใช่ไหมคะ ในสแตกนี่เรามีเครื่องหมายบวกอยู่แล้ว ตัวที่เราอ่านเข้ามา คือ คูณ เราจะต้องทำการเปรียบเทียบ ค่าที่เราอ่านเข้ามาใหม่ คือ คูณ กับตัวเดิมที่อยู่ในสแตก คือ บวก เราเปรียบเทียบ ถูกไหมคะ กับตัวบนสุดคือเครื่องหมายบวก สิ่งที่เราพบคืออะไร คูณมีค่ามากกว่าบวก ให้ทำอย่างไร ก็เอาคูณหย่อนลงมาได้เลย ใส่คูณ ลงไปในสแตกได้เลยนะคะ ผลลัพธ์ก็เป็นเหมือนเดิม ตัวถัดมาคือเลข 2 เลข 2 มันเป็นตัวเลขใช่ไหม เอามาไว้ที่ผลลัพธ์นะคะ เอามาต่อด้านหลัง เสร็จแล้วเราพบว่าไม่มีข้อมูลแล้ว ข้อมูลมันหมดแล้วน่ะ ข้อมูลมันหมดแล้วนะคะ แต่สิ่งที่เราเจอคืออะไรในสแตก ยังมีข้อมูลอยู่ เพราะฉะนั้น ต้องดึงค่าออกจากสแตกให้หมด เราเอาอะไรออกมาก่อนคะ ตัวล่าสุด ตัวบนสุด คือ คูณ เอาคูณมาต่อท้ายที่ Output หรือว่าผลลัพธ์ เอาคูณออกมาแล้ว มันเหลืออีกตัวหนึ่งใช่ไหม ก็เอาบวกออกมา อันนี้คือผลลัพธ์ ผลลัพธ์สุดท้ายนะคะ จะอยู่ในรูปแบบของ Postfix คือ แปลงนิพจน์ ได้ไหมคะ เดี๋ยวเรามาทำพร้อมกันอีกตัวหนึ่ง 3 + 5 x 1 ครูมีโจทย์ใช่ไหมคะ 3 + 5 x 1 ผลลัพธ์เท่ากับเท่าไรเอ่ย ตอบเท่ากับ อันนี้ตอบเท่ากับเท่าไรเอ่ย 8 ข้างหลังตอบอะไร ได้เท่ากับอะไรคะ คำตอบ ก็คือ 8 เอา 5 x 1 ก่อนได้เท่าไร ค่อยบวกกับ 3 5 x 1 เป็น 5 แล้วค่อยบวกกับ 3 ก็จะเท่ากับ 8 เดี๋ยวเราจะมาทำ มาแปลงนิพจน์กันนะคะ แล้วเราจะมาหาค่า ว่ามันได้ 8 ได้อย่างไร อันนี้เรากำลังจะมาแสดงวิธีทำ ของการได้ค่าว่า 8 มันมาจากไหน เราสั่งให้คอมพิวเตอร์คิดแบบไหน อันดับแรกวาดสแตกว่าง ฉะนั้น ครูบอกว่า ต้องมีคอลัมน์อยู่ 3 คอลัมน์ ครูมี 3 คอลัมน์แล้ว มี Input Stack แล้วก็ Output จากนั้นครูวาดตารางเลย โดยเอาข้อมูลมาใส่ในแต่ละแถวเลยนะคะ ครูอ่านเข้ามาทีละตัว จากซ้ายไปขวา ตัวแรกคือ 3 ถัดมาคือเครื่องหมายบวก เลข 5 นะคะ เครื่องหมายคูณ แล้วก็เลข 1 อันนี้ครูวาดตารางเสร็จแล้ว ทุกคนวาดตามครูก่อนเลย เราวาดตารางเปล่า ๆ แบบนี้ก่อนนะคะ คอลัมน์แรก หรือช่องแรก เอาตัวเลขกับเครื่องหมาย มาเรียงใส่ทีละบรรทัด คราวนี้พอทุกคนลอกตาราง เสร็จแล้วใช่ไหมคะ เดี๋ยวเราจะมาทำด้วยกัน เริ่มต้นตัวแรก ใช่ไหมคะ ทุกคนเริ่มต้นตัวแรกมันเป็นตัวเลข ใช่หรือเปล่า มันเป็นตัวเลข เพราะฉะนั้น เอาไปไว้ที่ช่องทางไหน ทางขวา ใส่ก่อนเลข 3 ใช่ถูกต้อง ถัดมา เป็นเครื่องหมายบวกใช่ไหมคะ เป็นเครื่องหมายบวก ตรงนี้มีอะไรไหม ไม่มี เพราะฉะนั้น เอา + มาใส่ตรงนี้ได้เลยไหม ได้ ถ้าเป็นเครื่องหมาย เอาลงที่สแตก เพราะฉะนั้น ตอนนี้สแตกว่าง ก็ใส่เครื่องหมายบวกได้เลย 3 ยกลงมาเหมือนเดิมนะคะ ตรง Output ยก 3 ลงมาเหมือนเดิม ถัดมาเลข 5 เป็นตัวเลขเอาไว้ที่ไหน เอาไว้ Output ใช่ไหม เพราะฉะนั้น เอาของเดิมยกลงมาก่อน คือ 3 เราเอาเลขอะไรมาใส่ เลข 5 นะคะ อันนี้ยกลงมาไหม เครื่องหมายบวกยกลงมาด้วยนะ ยกลงมาด้วย เสร็จแล้ว ถัดมา เครื่องหมายคูณ คูณต้องเอามาลงสแตก ใช่หรือเปล่า แต่คูณมันมากกว่าบวกใช่ไหม คูณกับบวก อะไรมากกว่ากัน คูณ เพราะฉะนั้น เราก็ใส่ลงไปในสแตกได้เลย โดยเอาของเดิมลงมาก่อน แล้วก็ใส่เครื่องหมายคูณ อันนี้ยกลงมาเหมือนเดิมไหม ยกลงมาเหมือนเดิม ตรงสุดท้าย 1 เอาไว้ที่ไหน Output แต่มีของเดิมอยู่แล้วใช่ไหม ยกของเดิมลงมาก่อน แล้วก็ใส่เลข 1 อันนี้ยกลงมาเลยได้ไหม ได้นะคะในสแตก เราก็ยกเครื่องหมายออกมา เครื่องหมายนะคะ บวกกับคูณ เสร็จแล้วผลลัพธ์ที่ได้ ตอนนี้ข้อมูลหมดแล้วใช่ไหม ในสแตกยังมีอยู่ ในสแตกยังมีอยู่ ต้องเอาออกมา ต้อง Pop ออกมาใช่ไหมคะ ยกตรง Output ของเดิมลงมาก่อน Pop บวกกับคูณเอาอะไรออกมาก่อน คูณ แล้วตามด้วยบวก เห็นไหมคะ เอาตัวแรกออกมาก่อน แล้วเอาตัวที่ 2 ออกมา เดี๋ยวต่ออีกนิดหนึ่งนะคะ เดี๋ยวเขียนตรงนี้ให้เสร็จก่อน เรายังไม่ได้ค่าเลข 8 เลย จะทำอย่างไรให้ได้เลข 8 ถัดมา เสร็จหรือยังคะ เดี๋ยวรอเพื่อนแป๊บหนึ่งนะ โอเค เราได้ผลลัพธ์แล้วใช่ไหมคะ จากตารางที่เราทำในสแตก พอได้ค่าผลลัพธ์แล้วนี่ คือ ตัวนี้ใช่ไหม 351 คูณ บวก มาหาผลลัพธ์ต่อนะคะ ค่านี้จะเป็น ค่าสุดท้ายแล้วที่เราจะได้คำตอบออกมา ตัวแรกตัวนี้ใช่ไหมคะ ขั้นตอนถัดมา ถ้าเป็นตัวเลข ถ้าเป็นตัวเลขจะ Push ลงสแตก อันนี้อีกอันหนึ่งนะ อีกขั้นตอนหนึ่งนะคะ ถ้าเป็นตัวเลขจะ Push ลงสแตก ดูพร้อมครูเลย ตัวที่ 1 มา คือตัวเลขอะไรคะ เลข 3 เราเอาใส่ในสแตก ดูพร้อมกันนะ เลข 3 ตัวแรก เอาลงสแตก ตัวถัดมาเลขอะไรคะ เลข 5 ก็เอาเลข 5 Push ลงสแตกเหมือนกัน ตัวถัดมาเลขอะไร เลข 1 ก็เอาเลข 1 Push ลงสแตกเหมือนกัน ถัดมาเราเจอครื่องหมายคูณ ให้ Pop ค่าบนสุดอออกมา แล้ววางไว้ขวามือ เอาเลข 1 ออกมา เห็นไหมคะ จากนั้นใส่เครื่องหมาย ถ้ามันเป็นเครื่องหมายนะ ตัวที่เราอ่านมา เรา Pop ตัวเลขออกมาก่อน แล้วใส่เครื่องหมาย แล้วเอาตัวที่ 2 ออกมา แบบนี้นะคะ เอาตัวบนสุดออกมา แล้วใส่เครื่องหมายที่เราอ่าน แล้วเอาตัว... ข้อมูลตัวเลขที่อยู่ในสแตก ตัวถัดมานี่ออกมา ได้ผลลัพธ์อะไรคะ 5 x 1 เป็น 5 ตอนนี้ในสแตก 1 กับ 5 ออกไปแล้วนะ เราได้ผลลัพธ์คือ 5 แล้วอย่างไรต่อ ก็ Push ลงสแตก เอาเลข 5 นี่ Push ลงไปในสแตก เดิมมี 3 ใช่ไหม ตอนนี้เอาออกไปแล้ว 2 เหลือ 3 พอคูณเสร็จเอา 5 กลับเข้ามา ดูนะคะ ถัดมา อ่านเครื่องหมายบวก ทำเหมือนเดิมเลย เอาอะไรออกมาคะ เอา 5 ออกมาไว้ทางขวามือ แล้วก็ใส่เครื่องหมายบวก แล้วก็เอา 3 ออกมา คำตอบเป็นเท่าไรคะ เป็น 8 แล้วก็เอา 8 ใส่ลงไปในสแตก จะเหลือเป็นค่าสุดท้าย นี่คือคำตอบของโจทย์ข้อนี้ ได้เท่ากันเลยไหม ได้เท่ากันเลย คือ 8 จะเห็นว่านี่ คือกระบวนการ ที่คอมพิวเตอร์คิดค่าตัวเลขให้เรานะคะ กว่าจะได้เลข 8 ออกมานี่ คอมพิวเตอร์ต้องคิดแบบนี้นะคะ โอเค ใครเสร็จแล้วครูให้เบรกอีก 5 นาที จดตัวนี้ให้เสร็จนะคะ เสร็จแล้วครูให้เบรก 5 นาที ค่ะเดี๋ยวมาต่ออีกนิดหนึ่ง คราวนี้มาดูอีก 1 ตัวอย่างนะคะ ครูมีโจทย์ให้ 5 x 2 + 2 ตอนนี้เราทำ จาก Infix ให้เป็น Postfix ก่อนนะคะ อันดับแรก ต้องวาดตารางก่อนใช่ไหมคะ วาดตารางสแตกว่าง ครูก็วาด 3 ช่องเหมือนเดิม แล้วก็ตรง Input ครูก็เอาข้อมูลแต่ละตัวมาใส่ลงในแต่ละบรรทัด เริ่มต้นเลยนะคะ เราอ่านเข้ามาตัวแรก คือเลข 5 ใช่ไหม มันเป็นตัวเลข เพราะฉะนั้น เอามันไปไว้ที่ Output นะคะ ถ้าเป็นตัวเลข เอาไปไว้ที่ Output ได้เลย ตัวถัดมาเครื่องหมายคูณ แสดงว่าต้องเอาไปไว้ในสแตก ตอนนี้สแตกมันเป็นสแตกว่าง เราก็เลยเอาคูณมาใส่ในสแตกได้เลย ส่วน Output ก็ยก 5 ลงมาเหมือนเดิม โอเค นะ ยังเป็นเหมือนเดิมอยู่นะ 2 บรรทัดแรก ถัดมาเจอเลข 2 เลข 2 2 มันเป็นตัวเลข ต้องเอาไปไว้ที่ Output เพราะฉะนั้น 2 จะอยู่ต่อจากเลข 5 นะคะ ในสแตกก็ยกลงมาเหมือนเดิม ก็ถึงตรงนี้นะคะ ถัดมาข้อมูลที่เราอ่านมาคืออะไร เครื่องหมายบวก พอเราเจอเครื่องหมายบวก ครูบอกว่าต้องเอามันไปไว้ในสแตก แต่ก่อนอื่น ก่อนที่จะเอาไปไว้ในสแตก เดิมเรามีข้อมูลในสแตกหรือเปล่า มีใช่หรือเปล่า มีเครื่องหมายคูณ เพราะฉะนั้น เราต้องเปรียบเทียบความสำคัญก่อน บวกมันน้อยกว่าหรือมากกว่าคูณ น้อยกว่า ใช่ไหม บวก มีค่าน้อยกว่าคูณ เพราะฉะนั้นทำอย่างไรคะ เอาคูณออกมา บวกมีค่าน้อยกว่าคูณ เพราะฉะนั้น ต้องเอา ข้อมูลที่อยู่บนสแตกนี่ คือคูณเอามาไว้ที่ Output เห็นไหมคะ เอามาไว้ที่ Output เสร็จแล้วเราถึงเอาเครื่องหมายบวก Push ลงไปในสแตกนะคะ แล้วค่อยเอาเครื่องหมายบวก ใส่ลงไปในสแตกได้เลย เพราะว่าสแตกมันว่าง เพราะฉะนั้น ตรง Output จะเป็น 5, 2 แล้วก็เครื่องหมายคูณ ทำไมคูณถึงต้องออกมา เพราะบวกมันน้อยกว่าคูณนะคะ บวกมันน้อยกว่าคูณ เลยเอาคูณออกมา ถัดมาเลขอะไรคะ เลข 2 เอาไปไว้ที่ Output ได้เลย ก็เอามันไปต่อท้าย คูณใช่หรือเปล่า เพราะมันตัวสุดท้าย คือคูณเอา 2 มาต่อท้าย ตอนนี้เราอ่านข้อมูลครบหมดแล้ว แต่ในสแตกมันยังมีบวกค้างอยู่ เพราะฉะนั้น ต้อง Pop มันออกมา และไว้ข้างหลังเลยนะคะ Pop มันออกมาแล้วไว้ข้างหลัง โอเคนะ แบบฝึกหัด ช่วยครูทำหน่อยตอนนี้เลย ครูมีโจทย์ให้นะคะ 3 หาร 1 ลบ 2 แล้วครูก็บอกว่าหารนี่ มันมีค่ามากกว่าลบนะ นะคะ หาค่าผลลัพธ์ของนิพจน์ Postfix ให้ครูหน่อย ผลลัพธ์สุดท้ายตัวนี้จะได้อะไร เริ่มต้นทุกคนตีตารางก่อน ลองทำดูสิคะ มีกระดาษไหม ไม่มีมาเอาข้างหน้า ครูมีกระดาษให้นะ เร็ว แบบฝึกหัด 1 ข้อนะคะ ทำตอนนี้เลย เหมือนกับโจทย์ที่ครูให้ไปนะคะ คล้าย ๆ กับโจทย์ที่เราให้ไป แล้วเราก็จดแล้วด้วยนะ เหมือนโจทย์สุดท้าย ที่ครูให้ไปเมื่อกี้เลยนะ ลบ มันน้อยกว่าหารใช่ไหมคะ เราเปรียบเทียบกัน ลบมันน้อยกว่าหาร เพราะฉะนั้น ต้องเอาหารออกมา คราวนี้นะคะ ดูด้วยกัน 3 เอา 3 ไปไว้ที่ไหนคะ ที่ Output เห็นไหมคะ เอา 3 ไปไว้ที่ Output เครื่องหมายหาร เอาเครื่องหมายหารไปไว้ที่ไหน สแตกเพราะมันเป็นสแตกว่าง เราก็หย่อนเครื่องหมายหารได้เลย Output เรายกมันลงมาด้วยนะ ถัดไป เราอ่านเจอเลข 1 ใช่ไหมคะ เลข 1 ต้องไว้ที่ไหน Output เอาของเดิมยกลงมาก่อน เสร็จแล้วก็เติมเลข 1 ลงไป ในสแตกยังเหมือนเดิมนะ เรายังมีเครื่องหมายหารอยู่ เราก็ยกลงมาได้เลย ถัดมา เครื่องหมายลบใช่ไหมคะ เดิมในสแตก เรามีหารอยู่แล้วใช่ไหม ครูเขียนให้ดูก่อน เรามีหารอยู่แล้วนี่ เราเอาลบนี่ มาเทียบกับหาร ปรากฎว่าค่าลบมันน้อยกว่า ให้ทำอย่างไร ให้เอาหารนี่ เอาออกมาไว้ที่ Output เพราะฉะนั้น จะได้เป็น 3, 1 แล้วก็หาร ตรงนี้หายไปใช่ไหมคะ เสร็จแล้วก็ใส่ค่าลบลงมาในสแตก ถัดมาเราหย่อนอะไร 2 เอาไว้ที่ Output ของเดิมเรามาต่อที่ Output แล้วก็ใส่เลข 2 ในสแตกหรืออะไรคะ เครื่องหมายลบใช่ไหม อ่านครบหมดแล้วนะ แต่ในสแตกเรายังมีค่าอยู่เลย เพราะฉะนั้นเราต้องเอาค่าจากสแตกออกมา เป็น 3 1 หาร 2 แล้วอะไรคะ ลบ เห็นไหม เราเอาค่าที่อยู๋ในสแตกนี่ ตัวสุดท้ายมาใส่ข้างหลังได้เลยนะคะ โอเค อีกข้อหนึ่ง แล้วจะให้เลิก ครูให้โจทย์มาแค่นี้เอง วาดตารางเองด้วย โจทย์ข้อนี้อันดับแรก วาดตารางก่อนเลย ตีตารางค่ะ ดูนิดหนึ่ง คูณมันมากกว่าลบใช่หรือเปล่า คูณมันมีค่ามากกว่าลบ เพราะฉะนั้น ทำอย่างไร ก็ Push คูณนี่ ลงสแตกได้เลยนะคะ Push คูณลงในสแตกได้เลย โอเค มาดูนะคะ 6 เป็นตัวเลข เอาไว้ที่ Output ใช่หรือเปล่า ลบ เอาไว้ที่สแตกนะคะ 6 ก็ใส่มาเหมือนเดิม 5 เอาไว้ที่ไหนคะ ไว้ที่ Output สแตกก็ยกลงมาเหมือนเดิมนะคะ ถัดมาคูณ เจอคูณใช่ไหมคะ เจอคูณให้เอามาเปรียบเทียบกับตัวนี้ก่อน ปรากฏว่าคูณมีค่ามากกว่าลบ ให้ Push คูณลงสแตกได้เลย เพราะฉะนั้น สแตก เดิมเป็นลบอยู่แล้ว ครูบอกว่า Push ลงมาได้เลยนะคะ เพราะคูณมันมากกว่านะ มันมากกว่านะคะ ข้างหลัง คือ 6 กับ 5 ถัดมา 2 เป็นตัวเลขไว้ข้างหลังนะคะ สแตกมีเท่าไรยกลงมา โอเค เสร็จแล้ว หมดแล้วนะ ผลลัพธ์สุดท้ายที่ได้ 6, 5, 2 เอาคูณออกมาก่อน แล้วตามด้วยลบนะคะ เห็นนะโอเค ทุกคนดูนะคะ เราสังเกตนะ ทำไมตัวนี้ เอาหารออกมา ตัวนี้ไม่ได้ เอาอะไรออกมานะคะ ตัวนี้ วิธีการสังเกต โอเค ลบเทียบกับหาร ลบมันมีค่าน้อยกว่าหาร เห็นไหมคะ ลบมีค่าน้อยกว่าหาร เลยต้องเอาหารออกมา แต่ถ้า Input ที่ใส่เข้าไปนี่ มีค่ามากกว่า เราก็ใส่ลงไปในสแตกได้เลย ถ้าตัวซ้ายมันมากกว่าตัวบนตรงนี้ เราก็ใส่ลงไปในสแตกได้เลยนะคะ โอเคต้องกลับไปทบทวนอีกรอบหนึ่งนะ นะคะ เดี๋ยวสัปดาห์ หน้าครูจะทวนให้อีกรอบหนึ่ง โอเค เดี๋ยวทั้งหมดนี้ เดี๋ยวครูจะอัปที่ Classroom ให้นะคะ เดี๋ยวครูจะไปสแกนให้ แล้วก็อัปที่ Classroom ให้ โอเค เดี๋ยวครูเช็กชื่อหน่อยนะคะ ครูเช็กชื่อหน่อย ศิริลักษณ์ 02 มาไหม 02 คนนี้หรือ 03 อดิศร เป็น COVID 4. นพกิต คนนี้ 5. พงษ์พร ไหน อ๋อ จันทกานต์ ไหนคะ อ๋อ กัญญาณัฐ ธัญลักษณ์ อ๋อ โอเค วริษา คนนี้ ภัทรดา 11 ไม่มา เทพอัปสร ธนภัทร 15 โอเค ภากร 16 โอเค ค่ะ เจอกันสัปดาห์หน้า