(อาจารย์สุธาสินี) คราวนี้นะคะ เดี๋ยวครูทวนคราวที่แล้วนะคะ คราวที่แล้วเราพูดถึงโครงสร้างการจัดเก็บข้อมูล ในรูปแบบที่เรียกว่า "Stack" นะคะ คราวที่แล้วเราพูดถึงลักษณะของโครงสร้างข้อมูลแบบ stack stack เป็นอย่างไร ถ้าพูดถึง stack นะ ถึงคน นึกถึงหลอด CD มีใครไม่เคยเห็นไหม เคยเห็นใช่ไหมคะ เวลาเราไปซื้อแผ่นซีดี ปัจจุบันอาจจะขายน้อยลง แต่เราเคยเห็นนะคะ เคยผ่านตา ในหลอด CD เราจะบรรจุ CD เห็นไหมคะ บรรจุขึ้นไปเรื่อย ๆ เลย 1 หลอดอาจจะมี 100 แผ่น 500 แผ่นอะไรก็ว่าอะไรนะ เรานึกภาพนะ ในหลอด CD นะ เวลาเราจะใส่ CD เข้าไปเพื่อแพ็กขาย นะคะ แล้วค่อย ๆ หย่อนลงไปทีละอันถูกไหม เราค่อย ๆ หย่อนแผ่น CD ลงไปทีละอัน แผ่นแรกที่เราหย่อนมันลงไป จะอยู่ด้านล่างสุดนะคะ ใส่เข้าไปเรื่อย ๆ จนครบแผ่นที่ 100 แผ่นที่ 100 อยู่ด้านบนสุดถูกไหมคะ เสร็จแล้วเขาก็ไปแพ็กมาขายให้เรา เวลาเราเอามาใช้นะคะ เราเปิดมาปุ๊บ เราหยิบออกมาใช้เลยไหม หรือว่าเราคว่ำ เราคว่ำหลอดเอาตัวล่างสุดออกมาใช้ หยิบออกมาเลยถูกไหมคะ เวลาเราซื้อมาเราหยิบพลาสติกออกมา คือ แผ่นที่ 100 ใช่ไหมคะ ซึ่งแผ่นนี้ เป็นแผ่นที่ถูกเอามาใส่เป็นแผ่นสุดท้าย ลักษณะการจัดเก็บข้อมูลแบบนี้ล่ะ เรียกว่า "stack" นะคะ เข้าก่อนออกทีหลังถูกไหม แผ่นที่ 1 จะอยู่ด้านล่างสุด มันถูกเอาออกมาใช้ทีหลังนะคะ ตัวที่เข้าทีหลังจะถูกเอาออกมาใช้ก่อน ครูเลยสรุปมาให้นะคะ ว่าข้อมูลแรกนะคะ ถ้าเมื่อไรก็ตามที่เราพูดถึง stack ข้อมูลแรกจะอยู่ล่างสุด เห็นไหมคะ ข้อมูลตัวแรกจะอยู่ล่างสุด ข้อมูลล่าสุดจะอยู่ด้านบน ก็คือตัวล่าสุดที่เราใส่ลงไปนี่ จะอยู่ด้านบนนะคะ คราวนี้เวลาเราเอาข้อมูลออกมาใช้ เมื่อกี้เราใส่ถูกไหมคะ เมื่อกี้เราใส่ คราวนี้เวลาเอาข้อมูลออกมาใช้บ้าง จาก Stack จะเอาตัวบนสุดออกมาใช้ก่อน หยิบมาตัวบนเลยนะคะ ตัวที่อยู่ด้านล่างสุด คือ ตัวแรกที่เราใส่เข้าไปนี่ จะถูกเอาออกมาใช้งานเป็นลำดับสุดท้ายนะ เวลาพูดถึง stack ให้นึกถึงหลอด CD นะคะ ให้นึกถึงการจัดเก็บข้อมูลในหลอด CD คราวนี้ ใน Stack คราวนี้ในการจัดเก็บนะคะ ในการเอาออกมาใช้งานใน stack เราจะมีคำสั่งอยู่ 2 คำสั่งด้วยกัน คือ Push ก็คือตัวนี้กับ Pop คือ Push คือ ใส่ Pop คือ เอาออกนะคะ Push Push มันลงไป คือ ใส่มันลงไป Pop คือ ดึงมันออกมา คราวนี้เวลาเราสั่งนะคะ เราจะ push หรือใส่ข้อมูลอะไรลงไป ต้องบอกด้วยว่าแล้วข้อมูลอะไรที่เราจะใส่ลงไป โดยใช้คำสั่ง push วงเล็บเปิด แล้วก็ใส่ข้อมูลนะคะ คราวนี้ครูต้องการใช้เลข 5 ในการใส่ลงไปใน stack นะคะ ครูจะเอาเลข 5 นี่ใส่ลงไปใน Stack ครูจึงใช้ Push 5 นะ Pop คือ เราดึงออก เวลาเราเอาออก ข้อมูลที่อยู่บนสุดนะ จะเป็นตัวที่ถูกดึงออกมา นอกจาก Push กับ Pop แล้วมีอีก 1 ตัวแปรที่จะต้องรู้จักคือ Top T-o-p นะคะ Top ตัวนี้ TOP จะเป็นตัวชี้ที่บอกตำแหน่งของข้อมูลล่าสุดหรือข้อมูลที่อยู่บนสุดใน Stack อยากรู้ว่าข้อมูลล่าสุดคือข้อมูลอะไร มันจะอยู่ในตำแหน่งที่ Top นะคะ มันจะมีตัวชี้หรือตัวระบุค่า เป็นตัว Top นี่ล่ะเป็นตัวบอก ถ้าเป็น Stack ว่าง คือ ไม่มีข้อมูลอะไรอยู่เลย Top จะมีค่าเป็น -1 นะคะ ถ้าเป็น Stack ว่าง Top จะมีค่าเป็นลบ 1 ได้อย่างไรเดี๋ยวมาดูกัน Stack ที่เราพูดถึงนะคะ Stack ให้นึกถึง List ทุกคนจำ List ได้นะ เป็นช่อง ๆ เป็นตาราง 1 แถว แต่มีหลายคอลัมน์ List ให้มองเป็นตารางแต่ละช่องจะมีหมายเลขช่อง หมายเลข 0 หมายเลข 1 หมายเลข 2 ของลิสต์ที่เรากำหนด หมายเลขตัวนั้นคือ index นะคะ หมายเลขตัวนั้นคือ Index เราจะเริ่ม Index ที่ 0 เพราะฉะนั้น ตัวชี้ของเรา คือ Top ค่าของ Top ก็คือค่าหมายเลย Index นั่นเอง ดูแถวแรกนะ ครูมี Stack มี Stack อยู่ทั้งหมด 5 ช่อง โดยเริ่มจากช่องหมายเลข 0 หมายเลข 1 หมายเลข 2 หมายเลข 3 หมายเลข 4 ตามลำดับ Stack ตัวนี้เป็น Stack ว่างนะคะ ยังไม่มีข้อมูลอะไรอยู่เลย ถ้าเมื่อไรก็ตาม เราไม่มีข้อมูลอะไรอยู่ใน Stack เลย ค่า Top ของเราจะมีค่าเท่ากับ -1 เพราะมันไม่ได้อยู่ในช่องเหล่านี้เลยถูกไหมคะ มันไปอยู่ตรงไหน อยู่นอกช่องนะคะ ถัดมาครูสั่ง Push Push คืออะไร คะ คือ ใส่เข้าไปถูกไหม เราใส่ด้านไหน เราใส่ที่ด้านหลังนะ เหมือนเราหย่อนของลงไป เวลาเราใส่เราใส่ของด้านหลังใช่ไหม ใส่ก็หล่น ๆ ๆ หล่นลงมาเรื่อย ๆ เลยจนถึงฐาน ถูกไหมคะ เพราะฉะนั้น ตัวแรกเมื่อเรา Push เลข 3 ลงไป มันจะไปอยู่ในหมายเลขช่องอะไรคะ หมายเลขอะไรคะ เราใส่จากทางนี้นะ ใส่ลงไปเรื่อย ๆ เพราะฉะนั้น ข้อมูลตัวแรกจะอยู่ที่ช่องหมายเลข 0 นะคะ Top ของเราก็จะมีค่าเป็น 0 Top จะมีค่าเป็น 0 ในช่องตามหมายเลขช่องที่ข้อมูลมันดูอยู่ ถัดมา เดิมนะคะ เดิมมันมีเลข 3 อยู่แล้ว เราก็ใส่เลข 3 ลงมา ครู Push 5 เพราะฉะนั้น Top จะมีค่าเป็นเท่าไหร่เอ่ย Top จะมีค่าเท่ากับ... มันหล่นลงมาอยู่ที่ช่องไหนคะ ช่องหมายเลข 1 นะ มันก็จะมีค่าเป็น 1 ถัดมาครูสั่ง Pop สั่งเอามันออก ดึงมันออก มันมีทางเข้าทางออกอยู่ทางเดียว คือ ทางนี้ ครูสั่ง Pop เพราะฉะนั้น ข้อมูลอะไรจะถูกเอาออกมา 3 หรือ 5 5 ใช่ไหมคะ 5 จะถูกดึงออกมา เพราะมันอยู่บนสุดนะคะ เพราะฉะนั้น ข้อมูลที่อยู่ใน Stack จะเหลือแค่ 3 นะ Top ก็จะมีค่าเท่ากับ 0 ถูกไหมคะ 5 มันถูกหายไปแล้วตรงนี้ เพราะ Pop มันคือดึงออกมา ถัดมา ครูเขียนผิด แป๊บหนึ่งนะ ถัดมานะคะ คำสั่งถัดมาครูสั่ง Push 8 ของเดิมหรืออะไรคะ ใน Stack ของเรา คือ 3 นะคะ ในตัวเดิมของเรานี่มี 3 อยู่ แล้วเราสั่ง Push 8 เข้ามาตรงนี้หล่นมาเรื่อย ๆ แต่จะอยู่ที่หมายเลข หมายเลข 1 นะคะ เพราะฉะนั้น Top มีค่าเท่ากับ 1 โอเค Top จะมีค่าเท่ากับ 1 จดใส่สมุดได้ไหมคะ เปิดสมุดมีกระดาษไหมคะ จดตัวอย่างนี้ลงไปเร็ว เดี๋ยวครูจะมีแบบฝึกหัดตัวหนึ่งให้ คล้าย ๆ แบบนี้เลย จดตัวอย่างนะคะ 5 แถวนี้นะ ลอกลงไปในสมุดนะคะ ทุกคนดูนะคะ เวลาเราวาดตารางใช่ไหมคะ ตัวข้างบนนี่ จะเป็นหมายเลขช่องนะ ตัวข้างล่าง ก็คือเราใช้คำสั่งนี้ผลลัพธ์จะใส่อย่างไรในช่อง คราวนี้อันนี้เป็นตัวอย่างนะคะ เราจะเห็นว่าครูสั่งที่ละแถวถูกไหมคะ แถวนี้ ก็คือสั่ง Push คำสั่งเดียวกันเลย คำสั่งที่ 2 ครู Push 5 นะคะ คำสั่งที่ 3 ครู Pop นะคะ เพราะฉะนั้น 5 ออก คำสั่งที่ 4 ครู Push 8 เข้ามา 8 ก็จะอยู่ต่อจาก 3 คราวนี้นะคะ เวลาเราวาดช่อง เวลาเราวาดช่อง เส้นบนที่เป็นหมายเลข Index ไม่ต้องวาดเส้นนะ ไม่ต้องวาดเส้นนะคะ วาดเส้นเฉพาะตารางแถวนี้ที่เป็น Stack ของเรานะคะ เดี๋ยวโจทย์ถัดไปนะคะ เราวาดเส้นเฉพาะแถวที่เป็นข้อมูลนะคะ แถวนี้ไม่ต้องวาดเส้นนะ ไม่ต้องตีตาราง เราตีตารางเฉพาะเส้นที่เป็น Stack เท่านั้น ถัดมา ครูมีโจทย์มาให้ 5 ข้อ ช่วยครูทำหน่อยนะคะ ข้อที่ 1 ข้อที่ 1 ตัวนี้ ครูเริ่มต้น ครูใส่ข้อมูล 5 ให้แล้ว Top มีค่าเป็น 0 ครูบอกว่าคำสั่งที่ 2 ให้ Push 3 เอาของเดิมลงมาด้วยนะคะ ใส่ของเดิม ตัวนี้ คือ 5 แล้วเรา Push 3 ก็ใส่ 3 ต่อมา เพราะฉะนั้น ตอนนี้ข้อมูลล่าสุด Index เราอยู่ที่ Index เท่าไหร่คะ ที่ 1 ทำข้อที่เหลือให้ครูหน่อย แล้วก็บอกด้วยว่า Top Top คือข้อมูลล่าสุดนี่ ข้อมูลตัวสุดท้ายมันอยู่ที่หมายเลขที่เท่าไหร่ เริ่มต้นเราตีตาราง เราทำทีละแถว เริ่มต้นเราทำทีละแถว เราข้อแรกก่อน วาด 5 คอลัมน์ 1 แถว ทำทีละแถวนะคะ แล้วก็ใส่หมายเลขที่อยู่ด้านบนแต่ละช่อง คราวนี้มาดูด้วยกันนะคะ ดูนะ ครูเริ่มโจทย์ข้อถัดไปนะคะ คือ Push 9 เราจะเห็นว่าแต่ละข้อมันต่อกันมาเรื่อย ๆ นะคะ เพราะฉะนั้น เจอคำสั่ง Push เอาของเดิมลอกลงมาก่อนนะคะ ใส่ของเดิมก่อนนะ ในช่องเดิมมีเลขอะไร ใส่ลงมาก่อนเลย 5 3 นะคะ เสร็จแล้วครูสั่ง Push 9 คือ Push คือ ใส่ลงไป เพราะฉะนั้น 9 จะมาอยู่ตัวถัดไป แล้ว Top ก็ดูหมายเลขช่อง หมายเลขช่องเป็นอะไร เป็น 2 โอเค ถัดมา ครูบอกคำสั่ง Pop เอาออก Pop คือ เอาออกนะ ดึงออกนี่ เราจะดึงอะไรก่อนนี่ มองขึ้นมาดูก่อน เดิม Stack เรามี 3 ค่านี้ พอเราใช้คำสั่ง Pop ปุ๊บ เอา 9 ออก ถูกไหมคะ เพราะฉะนั้น ตัด 9 ออกไปเหลืออะไร 5 กับ 3 ก็ยก 5 กับ 3 ลงมา ใช่ไหมคะ เสร็จแล้ว Top มีค่าเป็นอะไร ก็ตัวบนสุดหรือตัวล่างสุดเราอยู่ที่หมายเลขอะไรคะ หมายเลข 1 โอเค ถัดมาครูใช้คำสั่ง Push เพราะฉะนั้น เอาของเดิมลงมาก่อนใช่ไหมคะ เอาของเดิมลงมาก่อน ของเดิมมีเลขอะไรบ้าง 5 กับ 3 พอสั่ง Push 8 คือ ใส่เลข 8 Top จะมีค่าเป็น 2 ตัวนี้คือ Stack นะ ครูทวนให้ Stack มี Push คือ ใส่เข้าไป Pop คือ เอาออกใช่ไหมคะ Top ก็คือตำแหน่งที่บอกว่าข้อมูลล่าสุดมันอยู่ที่ไหน โอเค อันนี้คือ stack นะ เดี๋ยวครูให้เบรกก่อน 5 นาที พักก่อน 5 นาที เดี๋ยวครูจะขึ้นเรื่องใหม่นะคะ ลองนั่งดูก่อนนะ เป็นเรื่องใหม่ เดี๋ยวจะขึ้นอีกแบบหนึ่งนะคะ เดี๋ยวจะสับสน ครูให้พัก 5 นาทีนะคะ เรื่องใหม่จะเป็นคิว นึกถึงเวลาเราต่อคิวนะคะ เข้าคิว โอเค เดี๋ยวเบรก 5 นาทีนะ Qมาครบแล้วนะคะ วันนี้เราจะพูดถึงนะคะ โครงสร้างแบบหนึ่ง ที่เรียกว่า "QUEUE" นะคะ เพราะเวลาเราไปซื้อของเราก็ต้องต่อคิวนะคะ ซื้อกับข้าว เวลาไปจ่ายเงินในเคาน์เตอร์เซเว่น ก็จะต้องต่อคิว คราวนี้เวลาเราไปต่อคิว เวลาเราไปต่อคิวใช่ไหมคะ ถ้าเรามาทีหลังน่ะ เราก็ต้องได้ทีหลังถูกไหมคะ เราต่อเป็นคนสุดท้าย เวลาเราจะถึงคิวที่จะได้ของหรืออะไรอย่างนี้ เราก็เป็นคนสุดท้าย เพราะฉะนั้น คิวมันจะมีทางเข้าทางออกอยู่ 2 ทางถูกไหมคะ ด้านหลัง คือ ทางเข้า ด้านหน้า คือ ทางออก เวลาเราต่อคิวเราก็เข้าที่ด้านหลัง เวลาเราซื้อของเสร็จเรียบร้อยแล้วนะคะ ถึงคิวเราแล้ว เราจ่ายเงินปุ๊บ เราก็ออก ก็คือออกข้างหน้า เพราะฉะนั้น คิวจะต่างกับ Stack Stack จะมีทางเข้า-ทางออกเพียงแค่ทางเดียวนะคะ Stack จะมีทางเข้าทางออกเพียงทางเดียว แต่ QUEUEเราจะมีทางเข้าทางออกกันคนละทาง เข้าทางหนึ่งออกทางหนึ่ง เพราะฉะนั้นแล้วนะคะ ข้อมูลที่เข้าไปเก็บไว้ในคิว ข้อมูลที่เข้าไปเก็บก่อนจะต้องถูกเอาออกมาใช้งานก่อน ข้อมูลไหนเข้าไปก่อนจะถูกเอาออกมาใช้งานก่อนนะคะ ข้อมูลไหนเข้าไปทีหลัง ก็จะถูกนำออกมาใช้งานทีหลังเพื่อน เพราะฉะนั้น ในคิวจะมีตัวกำกับหรือว่าตัวชี้นี่ ที่ทางเข้าหรือทางออก จะมีอยู่ 2 ตัวด้วยกันนะคะ ตัวแรกจะเรียกว่า Front Front คือ ข้างหน้านะคะ หรือเราแทนด้วยตัว f ก็ได้ เขียนแทนด้วย F สั้น ๆ ก็ได้ อีก 1 ตัวชี้ rear นะคะ มีอ่านว่า rear r-e-a-r ก็คือ rear rear ก็คือด้านหลังนะคะ เป็นตัวกำกับการเข้า เห็นไหม rear เป็นตัวกำกับการเข้า front อยู่ข้างหน้า แสดงว่าเป็นตัวกำกับการออกจากคิวนะคะ front จะอยู่ข้างหน้าถูกไหม เพราะฉะนั้น จะต้องชี้อยู่ที่สมาชิกตัวแรกนะคะ front จะชี้อยู่ที่สมาชิกตัวแรก เพราะฉะนั้น rear มันจะชี้อยู่ที่สมาชิกตัวสุดท้ายของคิว front อยู่ด้านหน้า rear อยู่ด้านหลังนะคะ เพราะฉะนั้น เวลาข้อมูลเข้าไปที่คิว จะดูที่ rear นะคะ จะดูที่ rear เวลาเอาข้อมูลออก' จะออกไปข้างหน้า ก็คือจะดูที่ front ในการทำงานของคิวนะคะ เราก็ใช้ลิสต์นั่นล่ะ เป็นตัวเก็บข้อมูลนะคะ เราใช้ลิสต์นั่นล่ะในการเก็บข้อมูล จะเห็นว่า Stack กับ QUEUE เราใช้ลิสต์ในการเก็บข้อมูลเหมือนกัน แต่สิ่งที่ต่างกันคืออะไร Stack เราเรียนไปแล้ว เข้าก่อนออกทีหลัง เข้า-ออกอยู่ทางเดียวใช่ไหม เข้าออกอยู่ทางเดียว คือ ด้านบน แต่คิวมันทีทางเข้าทางออก 2 ทางนะคะ เข้าข้างหลัง ออกข้างหน้านะคะ QUEUE คือ เข้าข้างหลังออกข้างหน้า เราแทนคิวนะคะ อย่างที่ครูบอกว่าเราแทน QUEUE ด้วย List นะคะ จะเป็นแนวตั้งหรือแนวนอนได้เหมือนกัน เราสามารถต่อแทนคิวด้วย list หรือจะใช้เป็น link list อย่างนี้ก็ได้ เหมือนโบกีรถไฟกันไปเรื่อย ๆ นะคะ แต่เราจะพูดถึง คือ ใช้ list นะ เราทำ QUEUE ที่เป็น list แล้วเราเอา queue มาทำอะไรบ้าง ในคอมพิวเตอร์นะคะ Stack คราวที่แล้วนี่ เราใช้ Stack ในการคำนวณทางคณิตศาสตร์ แล้วคิวเอามาทำอะไร เอามาทำอะไร เวลาเราสั่ง print นะ สมมติทั้งห้องนี่มีเครื่องพรินต์เครื่องพิมพ์อยู่แค่ 1 เครื่อง เวลาเราจะสั่งพิมพ์เห็นไหม ใครสั่งพิมพ์ก่อน ก็ไปเข้าคิวก่อน ก็จะถูกพิมพ์เอกสารออกมาเป็นคนแรก คนหลัง ๆ ก็จะรอคิว ถูกไหมคะ มันก็จะลิสต์เป็นรายการของการพิมพ์อยู่ตรงนี้ แล้วก็ค่อย ๆ เอาออกไปทีละรายการ ตามลำดับการเข้าของข้อมูล หรือเหมือนกับเวลาเราไปจองหนัง จองบัตรภาพยนตร์ ถูกไหมคะ จองที่นั่ง ใครมาก่อนก็ต้องได้ที่นั่งก่อน สามารถเลือกที่นั่งได้นะคะ การทำงานกับคิว การทำงานกับคิวเราใช้คำสั่งอะไรบ้าง การทำงานกับคิวก็มี 2 คำสั่งด้วยกันนะคะ เรามีอยู่ด้วยกัน 2 คำสั่ง คือ เข้ากับออก เข้ากับออก เข้าเราใช้ endqueue นะคะ คำนี้ Enqueue ก็คือเพิ่มข้อมูลเข้าไปเราใช้คำว่า "NQ" คำนี้ Enqueue คือ บอกว่านี่ต้องเอาข้อมูลเข้าไปใน queue นะ คำสั่ง Dequeue ตัว D นะคะ ขึ้นต้นด้วยตัว D Dequeue หมายถึง เอาข้อมูลออก เห็นไหมคะ Dequeue เอาข้อมูลออก Enqueue เอาข้อมูลเข้าเราก็มีการตรวจสอบคิวว่าง คิวเต็มเหมือนเดิมนะคะ คิวว่างคืออะไร คือ ไม่มีข้อมูลอะไรเลยอยู่ในคิว คิวเต็มข้อมูลนี่มันมาถึงตัวสุดท้ายแล้ว มาถึงตัว... ช่องสุดท้ายของลิสต์แล้ว มันไปต่อไม่ได้แล้ว อันนั้นคือคิวเต็มนะคะ ข้อมูลมันมาอยู่ในช่องสุดท้ายของลิสต์แล้ว มันไม่มีช่องใส่แล้วอันนี้คือคิวเต็ม โอเคนะ มี Enqueue กับ Dequeue นะคะ เข้า... เข้าข้างหลัง ออกข้างหน้า คราวนี้มาดูนะคะ ตัวอย่าง คราวนี้มาดูตัวอย่าง ครูมีคิวนะคะ รูปบนสุดนั่นคือคิวนะคะ คิวครูมีข้อมูลอยู่ 3 ตัว คือ a b c เราบอกได้ไหม ว่าข้อมูล a b c นี้ ข้อมูลไหนเข้ามาเป็นข้อมูลแรก a ใช่ไหมคะ a ถูกเข้ามาเป็นข้อมูลแรก รู้ได้อย่างไร นี่ไง มี front ชี้อยู่ front อยู่ตรงไหน ข้อมูลตัวนั้น คือ ข้อมูลลำดับแรก ข้อมูลที่เข้ามาทีหลังสุด คืออะไรคะ ข้อมูลที่เข้ามาทีหลังสุด คือ C รู้ได้อย่างไร มี rear ชี้อยู่ rear ชี้ตรงไหน นั่นคือข้อมูลล่าสุด หรือข้อมูลสุดท้ายที่เข้าไปในคิว จะใช้ f หรือ r ก็ได้ สั้น ๆ f คือ front r คือ rear ครูใช้คำสั่ง Dequeue ครูใช้คำสั่ง Dequeue Dequeue ก็คือเอาออก Dequeue เห็นไหมคะ ก็คือการเอาข้อมูลออกจากคิว บอกแล้วว่าออกข้างหน้าถูกไหม ออกออกข้างหน้า เพราะฉะนั้น ข้อมูลที่ถูกนำออก คือตัวแรก ก็คือตัว A จะถูกเอาออกใช่ไหมคะ A ถูกเอาออกไป เพราะฉะนั้น ข้อมูลล่าสุด A กับ B อะไรเข้าก่อน B เพราะฉะนั้น B จะมี front ชี้อยู่ ก็คือขยับค่า front น่ะ เลื่อนมาเป็นตัวถัดไป เพื่อบอกว่าอันนี้คือข้อมูลล่าสุดนะคะ ถัดมา ครูสั่ง Enqueue ครูสั่ง Enqueue ตัว D Dog ในคิว Enqueue ใช่ไหมคะ เข้าข้างหลัง เพราะฉะนั้น เข้าน่ะ เข้าข้างหลัง เพราะฉะนั้นแล้ว มันต้องต่อจาก C ถูกไหมคะ มันหย่อนลงไปปุ๊บถึงแค่ C เพราะฉะนั้นD Dog นะคะ จะใส่อยู่ที่ตำแหน่งตรงนี้ ตำแหน่งถัดจาก C rear เดิมอยู่ที่ C ถูกไหมคะ rear เดิมขยับมาอีก 1 ตำแหน่ง เพราะว่ามันคือตัวล่าสุดแล้วตัว D Dog สิ่งที่เราได้คืออะไร rear มีค่าอะไร ก็หมายเลขช่องของมัน มันชี้ที่ช่องไหน rear จะมีค่าเป็น 3 front ชี้อยู่ที่ไหน ชี้อยู่หมายเลขช่อง หมายเลข 1 front จะมีค่าเป็น 1 นะคะ โอเค อันนี้ครูข้ามไปนะ มาดูตัวอย่างอีก 1 ข้อ ครูสั่งเริ่มต้นเป็นคิวว่าง คิวว่าง เพราะฉะนั้น มันไม่ได้ชี้อยู่ที่ไหนเลย ถูกไหมคะ front กับ rear จะมีค่าเป็น -1 มันไม่ได้ชี้ที่ช่องไหนเลย ครูมีแค่ 3 ช่องเอง 0 1 2 มันไม่ได้ชี้ที่ไหนเลยเพราะฉะนั้น มันจะมีค่าเป็น -1 ครูสั่งคำสั่งแรกนะคะ ครูสั่ง Enqueue ใส่ข้อมูลเข้าไป ใส่เลข 4 Enqueue วงเล็บเปิด เลข 4 วงเล็บปิด แสดงว่าครูกำลังจะใส่ข้อมูลตัวใหม่เข้าไปในคิว ใส่เลข 4 ถูกไหมคะ เข้าข้างหลัง ครูก็เข้าข้างหลังนะ เข้าไปมันเป็นที่ว่างก็หย่อนลงไปมันก็ไหลลงมาเรื่อย ๆ มาถึงตำแหน่งนี้ มันสุดแล้ว เพราะฉะนั้น ตัวแรก ก็คือข้อมูลตัวนี้ล่ะ ตัวสุดท้ายคือข้อมูลตัวนี้ อยู่แค่ตัวเดียว เพราะฉะนั้น front กับ rear มันก็ชี้อยู่ที่ตัวเดียวกัน มีค่าเท่ากับ 0 นะคะ คำสั่งถัดมา ครูสั่ง Enqueue 3 ก็คือใส่เลข 3 ใส่เลข 3 เอามาเข้าข้างหลัง ใส่เลข 3 เอามาเข้าข้างหลัง ถูกไหมคะ เวลาเข้าเข้าข้างหลังนะคะ ใส่เลข 3 ลงมา ช่องมันเป็นค่าว่างใช่ไหม มันลงไปไม่ได้แล้ว เพราะมี 4 อยู่ มันจะมาอยู่ตำแหน่งนี้ เพราะฉะนั้น enqueue(3) 3 จะมาอยู่ที่ช่องหมายเลข 1 จะเห็นว่า rear จะขยับแล้วนะเมื่อไรก็ตามที่เพิ่มข้อมูลลงไป rear จะขยับ rear จะมีค่าเป็น 1 front ยังอยู่เหมือนเดิมนะคะ เมื่อไรก็ตามที่เห็นคำสั่ง enqueue เอาของเดิมยกลงมาก่อน เหมือน Stack นะคะ เอาของเดิมยกลงมาก่อน แล้วก็หย่อน 3 ลงมา มาดูอีก 1 ข้อ เร็วเดี๋ยวครูจะให้ลงหัดทำนะคะ เริ่มต้นเป็นคิวว่างใช่ไหมคะ รูปแรกนี่มันเป็นคิวว่าง คิวว่างต้องมี front กับ rear f กับ r นี่มีค่าเท่ากับ -1 นะคะ เจอคำสั่งถัดมา Enqueue Enqueue ก็คือใส่ข้อมูลตัวใหม่เข้าไป คือ ใส่หมายเลข 4 เดิม มันเป็นคิวว่างนะ ไม่ต้องเอาอะไรยกลงมานะคะ แล้วก็หย่อนหมายเลข 4 เข้าด้านหลัง มันก็จะไปอยู่ที่ช่องหมายเลข 0 พอมันไปอยู่ที่ช่องหมายเลข 0 front กับ rear จะมีค่าเท่ากับ 0 จากนั้น จากนั้น ในคิวเรามีเลข 4 อยู่แล้วใช่ไหมคะ ครูสั่งเพิ่ม Enqueue(3) แสดงว่าเราต้องใส่หมายเลข 3 ลงไปในคิว เดิมคิวมีหมายเลขอะไรคะ หมายเลข 4 อยู่แล้ว เอา 4 ลงมาก่อน เราสั่ง Enqueue ใส่ด้านหลัง 3 ก็จะไหลลงมาอยู่ที่ช่องหมายเลข 1 เมื่อเราใส่ข้อมูลตัวใหม่ rear จะเลื่อนถูกไหมคะ rear + 1 เข้าไป เพราะฉะนั้น ตอนนี้ rear ก็จะอยู่ที่ 1 front ยังอยู่ที่เดิม เมื่อไรที่ใส่ข้อมูลใหม่ rear จะขยับใช่ไหม เพราะ rear บอกว่ามันคือเข้าน่ะ ถัดมา ครูยังใส่ข้อมูลตัวใหม่เข้าไปอีกในคิว ก็คือ enqueue(2) เดิมเรามี 4 กับ 3 แล้วใช่ไหมคะ เราก็มี 4 กับ 3 แล้วครูสั่ง enqueue คือ ใส่ข้อมูลใหม่ คือ 2 2 มันก็จะไปอยู่ที่หมายเลข 2 หมายเลขช่องนะคะ เห็นไหมตอนนี้มันก็จะอยู่ในช่องหมายเลข 2 เพราะฉะนั้น rear ก็คือเมื่อไรที่เข้า rear จะเลื่อน rear จึงมีค่าเท่ากับ 2 front อยู่ข้างหน้า rear อยู่ข้างหลัง ตอนนี้คิวเต็มแล้ว เพราะว่าอะไร ไม่มีช่องว่างเลย มันอยู่ที่ตัวสุดท้ายแล้ว เราใส่ข้อมูลตัวใหม่ลงไปไม่ได้แล้วนะคะ คำสั่งถัดมา คือDequeue Dequeue คือ เอาข้อมูลออก เข้าข้างหลังออกข้างหน้า เพราะฉะนั้น เวลาเอาออกเอาอะไรออกเอาข้างหน้าถูกไหมคะ ข้างหน้า คือ 4 ถูกเอาออกไป พอข้างหน้าถูกเอาออกไป ตัวหน้าสุด นี่ ก็คือตัวแรกที่อยู่ในคิวก็คือ 3 front จะเลื่อนลงมาเป็นตัวถัดไป เพราะเราเอาตัวล่าสุดออกไปแล้วไง พูดผิด ตัวเลขออกไปแล้วนี่ 3 มันก็เลยกลายเป็นตัวเลข front จะเลื่อน เสร็จแล้วครูสั่ง Dequeue อีกรอบหนึ่ง ก็คือเอาออก เอาข้างหน้าออก 3 ถูกเอาออกไปแล้ว front จะเลื่อนมาอยู่ที่หมายเลข 2 นะคะ front จะอยู่ที่หมายเลข 2 rear จะอยู่หมายเลย 2 โอเค คราวนี้ เดี๋ยวครูเปลี่ยนเป็น... คราวนี้มาดูด้วยกันนะคะ เดี๋ยวเราจะได้ดูแบบฝึกหัดด้วยกัน เริ่มต้นนะคะ อันนี้ครูขอใช้ front กับ rear แทนด้วย fron นะคะ ครูมีคิวว่างถูกไหมคะ คิวข้อของครูไม่มีอะไรเลย ไม่มีตัวเลขอะไรเลย เพราะฉะนั้น ตอนนี้มันเป็นคิวว่าง คิวว่างคือไม่มีข้อมูลนะ เพราะฉะนั้น f กับ r เลยมีค่าเท่ากับ -1 นะคะ มันไม่มีอะไรเลยf กับ r มันลอยละล่องอยู่ที่ไหนน่ะ ให้มันมีค่าเป็น -1 ถัดมาอันนี้เราทวนกันนะ Enqueue(5) Enqueue(5) ก็คือใส่ข้อมูลลงไปในคิว ถูกไหม เพิ่มข้อมูลลงไปในคิว ตอนนี้ข้อมูลไม่มีอะไรเลย ตอนนี้เอาข้อมูลไว้ข้างหลังนะ เวลาเข้าเข้าข้างหลัง เลข 5 นี่ มันก็จะมาอยู่ที่ตัวแรกสุด ครูหย่อนเลข 5 ทางนี้ไหล ๆ ๆ ไหลลงมาเรื่อย ๆ เลย 5 จะอยู่ที่ช่องหมายเลข 0 f กับ r เลยมีค่าเท่ากับ 0 เห็นไหม f จะชี้ที่ตัวแรก r จะชี้อยู่ที่ตัวสุดท้าย ตอนนี้มันคือข้อมูล มันเลยอยู่ที่ตำแหน่งเดียวกัน ถัดมา ครูใช้คำสั่ง Enqueue ก็คือใส่ 10 ลงไป พอครูใส่เลข 10 ก็คือเพิ่มข้อมูลใหม่ลงไปในคิวเดิม ดูของเดิมก่อน เดิมเรามี 5 อยู่แล้วใช่ไหม เราจะใส่ 10 ลงไป เราก็เอา 5 ลงมาใส่ก่อน แล้วเราก็ใส่ 10 ลงไปข้างหลัง 10 ก็จะอยู่ต่อท้ายเลข 5 นะคะ เพราะฉะนั้น front ก็ยังคงมีค่าเท่าเดิม แต่ rear คือ ด้านหลังน่ะ ด้านหลังมันขยับออกมาอีก 1 เพราะฉะนั้น rear จะมีค่าเป็น 1 เนื่องจากอะไร ก็ข้อมูลล่าสุดมันอยู่ที่ Index อยู่ที่ช่องเบอร์ 1 นะคะ rear เลยขยับไป 1 เห็นไหม rear จาก 0 + 1 เห็นไหมคะ กลายเป็น 1 อยู่ที่นี่ ดูต่อนะคะ ครูสั่ง enqueue(12) แสดงว่าครูจะใส่ข้อมูล 12 ตัวนี้ ครูสั่ง Enqueue 12 เพราะฉะนั้น ครูต้องเอาอะไรมาก่อน เอา 5 กับ 10 ใช่ไหม คือ 5 กับ 10 ถูกไหมคะ ครูเอา 5 กับ 10 มาไว้ก่อน แล้วครูใส่ตัวใหม่ คือ 12 เพราะฉะนั้น front ยังอยู่ที่เดิมนะ front คือ ข้างหน้า แต่เวลาเราเข้า ก็คือการใส่ข้อมูลเพิ่ม ตอนนี้มันเปลี่ยนตำแหน่งเลข 2 แล้ว r เลยมีค่าเท่ากับ 2 โอเค เดี๋ยวดูไปก่อนนะ เดี๋ยวค่อยทำแบบฝึกหัด คราวนี้ครูสั่ง dequeue คือ เอาออกถูกเปล่า D Dog Dequeue คือ เอาออก เอาข้อมูลออก เดิมมันมี 5, 10, 12 เอาออก เอาออกข้างหน้าเอาอะไรออกคะ เอา 5 ออก เพราะฉะนั้น เอา 5 ออก ถูกไหมคะ ดูภาพนี้ก็ได้ เดิมนี่ มันมี 5, 10, 12 ใช่ไหมคะ front = 0 rear = 2 พอครูสั่ง dequeue เอาออก เอาอะไร เอาข้างหน้า คือ เอา 5 ออก ไม่มีเลข 5 แล้ว เหลือ 10 กับ 12 เพราะฉะนั้น ตัวแรกคืออะไร คือ 10 ตัวสุดท้ายก็ยังเป็นตัวเดิม คือ เลข 12 อยู่ในช่องหมาย 2 แต่สิ่งที่เปลี่ยนไปคือ front เปลี่ยน จาก 0 เป็น 1 ถัดมา Enqueue เดิมจะอยู่ด้านซ้ายนะคะ จะมี 10 กับ 12 อันนี้คือคิวเดิมนะคะ คิวเดิม ครูสั่ง Enqueue 20 เพราะฉะนั้น 20 จะไปต่อที่ 12 เห็นไหมคะ f จาก f ยังคงเป็น 1 เหมือนเดิม rear ขยับขึ้นมาเป็น 3 นะคะ rear ตรงนี้จะขยับขึ้นมาเป็น 3 เข้าข้างหลังเห็นไหม ข้างหลังมันขยับนะคะ เวลาเข้าเข้าข้างหลัง เพราะฉะนั้น rear จะขยับ ตอนนี้ข้อมูลมันอยู่ที่ช่องสุดท้ายแล้ว มันไม่มีช่องอื่นให้ใส่แล้ว ถ้าครูยังใช้คำสั่ง Enqueue อยู่อีก Enqueue 15 คือ ใส่ข้อมูลลงไปในคิว เป็นอย่างไรคะ ใส่ได้ไหม ไม่ได้ ใส่ไม่ได้ถึงแม้ว่าข้างหน้าจะว่างก็ตาม แต่ข้างหลังนี้ใส่ได้ไหม ไม่ได้แล้ว มันไม่มีที่ให้ใส่แล้ว เพราะฉะนั้น แบบนี้เรียกว่า "คิวเต็ม" นะคะ ลักษณะแบบนี้เรียกว่า "คิวเต็ม" เพราะไม่มีช่องให้ใส่ด้างหลัง ข้างหน้าไม่เกี่ยวนะ เราใส่ด้านหลังแต่ข้างหลังไม่มีที่ให้ใส่แล้ว เราจึงเรียกว่า "คิวเต็ม" โอเค แป๊บหนึ่งนะคะ มีกระดาษไหมคะ จดใส่สมุดให้ครูหน่อย จด ๆ ข้อมูลนี้ให้ครูหน่อย จดลงสมุดนะคะ เดี๋ยวครูจขยับให้ เริ่มต้นที่ตรงนี้ ถ้าจดเสร็จแล้วนะคะ เดี๋ยวครูจะขยับชีตข้างล่างขึ้นให้ คราวนี้อันนี้เสร็จแล้วใช่ไหมคะ จะเป็นตัวอย่างที่ทำนะ คราวนี้มาดูด้วยกัน ดูพร้อมกันก่อนนะ เดี๋ยวครูจะ... เดี๋ยวครูจะให้เขียนนะ แต่เรามาทำพร้อมกันก่อนนะคะ ตัวแรกครูกำหนดคิวมาให้นะคะ ตัวนี้เรื่องคิวนะ เป็นเรื่องคิวนะคะ ครูกำหนดคิวมาให้นี่ ข้อ 1 นี่ คิวนี้มีข้อมูลอะไรไหม ไม่มีข้อมูลอะไรเลย ถ้ามันไม่มีข้อมูลอะไรเลย เพราะฉะนั้น front กับ rear จะมีค่าเป็นอะไรคะ เป็นอะไรเอ่ย เป็น -1 เป็น - 1 นะคะ front กับ rear จะมีค่าเป็น 1 โอเค ถัดมา ครูสั่ง Enqueue ก็คือใส่ 2 เข้าไป ถูกไหม เดิมมันมีข้อมูลไหมไม่มี เพราะฉะนั้น ครูไม่ต้องเอาอะไรมาใส่ก่อน ถูกไหมคะ Enqueue(2) เพราะฉะนั้นนี่ มาใส่นะ 2 ก็จะใส่เข้าข้างหลังใช่ไหมคะ ใส่เลข 2 เข้าข้างหลัง ก็ลงมา ๆ 2 จะอยู่ที่ 0 ถูกไหม อยู่ที่ช่องหมายเลข 0 เพราะฉะนั้น f กับ r จะชี้อยู่ที่ไหน ชี้อยู่ที่ไหน ก็ชี้อยู่ที่นี่อยู่ตัวเดียว f จะมีค่าเป็น 0 r ก็มีค่าเป็น 0 คราวนี้ดูต่อ ดูด้วยกันก่อน แล้วครูจะให้เวลาเขียน ต่อมาสั่ง Enqueue อีกแล้ว ก็คือใส่ข้อมูลเข้ามา แต่ก่อนที่เราจะใส่ข้อมูลเข้ามา ให้เอาข้อมูลเดิมมาใส่ก่อน ข้อมูลเดิมมีเลขอะไรคะ เลข 2 ใส่เลข 2 ก่อนแล้วครูสั่งอะไรคะ enqueue(5) เพราะฉะนั้น เอา 5 หย่อนลงมา หย่อน 5 ลงมาข้างหลัง ลงมาจนถึงตรงนี้ถูกไหม เลข 5 ลงไป คราวนี้แล้ว front กับ rear บ้าง มันเข้าข้างหลัง ก็คือ rear ถูกไหมคะ เพราะฉะนั้น ตัวหลังสุดนี่ ก็จะชี้มีค่า 1 ก็คือค่า rear ส่วนตัวแรกก็คือ front ถูกไหมคะ ยังอยู่ที่เดิม front ยังอยู่ที่มีเดิม rear มันเข้าข้างหลังไง rear คือข้างหลัง มันขยับมา 1 ตำแหน่ง เพราะฉะนั้น front จะมีค่าเป็น0 rear มีค่าเป็น 1 นะคะ เผื่อใครอยากจด คราวนี้ จากข้อ 3 ใช่ไหมคะ ตัวสุดท้ายนี่เราสั่ง Enqueue เราได้ข้อมูล 2 กับ 5 อยู่ในคิวนะคะ ถัดมาครูสั่ง Dequeue ครูสั่ง Dequeue คือเอาข้อมูลออกใช่ไหมคะ Dequeue ตัวนี้ คือ เอาข้อมูลออก เพระาฉะนั้น เอาข้อมูลออกเดิมเรามี 2 กับ 5 ใช่ไหมคะ เราเอาอะไรออก เราเอาข้างหน้าออกใช่ไหมคะ เอาข้างหน้าออก ก็ต้องลบตัวแรกสุดออกไป เหลืออะไรคะ เหลือ 5 นะ เพราะฉะนั้น ก็เอา 5 มาใส่ที่ตำแหน่งนี้ rear ยังชี้อยู่ที่เดิมนะ r ยังชี้อยู่ที่เดิม เพราะเอาออกนะคะ แต่ f ต้องขยับขึ้นมาอีก 1 ตัว เพราะฉะนั้น front กับ rear เลยมีค่าเป็น 1 ถัดมาครูสั่งอะไรคะ Enqueue เอาข้อมูลเข้า เข้าตรงไหนคะ เข้าข้างหลัง เอา 6 เข้าข้างหลัง เดิมเรามีข้อมูลอะไร 5 เราก็เอา 5 มาใส่ ใส่ให้ถูกช่องด้วยนะ 5 ต้องอยู่ช่องหมายเลข... เสร็จแล้วเราเอา 6 มาใส่ ถูกไหมคะ 6 ก็ไหลลงมาจนถึงช่องหมายเลข 2 เพราะฉะนั้น ข้อมูลตัวใหม่อะไรขยับ rear ขยับเข้าด้านหลัง ด้านหลังคือ rear นะคะ ข้างหน้ายังอยู่เหมือนเดิมนะคะ เพราะฉะนั้น front มีค่าเป็น 1 rear มีค่าเป็น 2 เดี๋ยวครูสรุปให้ข้างล่างนะ จดมุมขวาตรงนี้ไปด้วยนะคะ ตรงปากกาแดงโอเค เสร็จหมดแล้วนะคะ ก่อนกลับบ้าน มีแบบฝึกหัดอยู่ด้วยกัน 5 ข้อ เดี๋ยวครูจะเลื่อนให้นะ ทำให้ครูหน่อย ข้อ 1 ข้อ 2 ข้อ 3 ข้อ 4 แล้วก็ข้อ 5 เดี๋ยวครูจะเลื่อนให้นะคะ อันนี้ให้ทำเอง ข้อ 1 ครูให้รูปมานะคะ เสร็จแล้วครูสั่ง Enqueue เพราะฉะนั้น ต้องวาดรูปก่อนนะ 4 ช่อง ปุ๊บ มีเลข 5 อยู่แล้ว พอครูสั่ง Enqueue ปุ๊บ เลข 2 จะอยู่ที่ไหน อันนี้คือรูปเริ่มต้นนะ อันนี้คือรูปเริ่มต้น ข้อที่ 1 อยู่ที่นี่ จะได้ไม่งง คือโจทย์นะคะ รูปเริ่มต้น ครูกำหนดให้รูปนี้เป็นรูปเริ่มต้น แล้วครูก็ใส่ Enqueue(2) นะคะ แล้วก็ใส่รูปนี้เข้ามา แล้วก็วาดรูปนะคะ มี 5 เป็นตัวเดิมอยู่แล้ว ก็ใส่ 2 เดี๋ยวนะ เพื่อไม่ให้งงนะ ครูไม่มีรูปนี้เลยแล้วกัน เดี๋ยวจะงงมาเริ่มข้อ 1 ตรงนี้เลย มันเริ่มข้อ 1 ที่นี่เลย คือ ใครเขียนแล้วไม่เป็นไร เขียนแล้วไม่เป็นไรนะ แต่เพื่อนเดี๋ยวเพื่อนบางคนเขาจะงง ข้อ 1 อย่างนี้ได้เลย แต่ไม่เป็นไร... [สิ้นสุดการถอดความ] [สิ้นสุดการถอดความ]