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