--- title: โครงสร้างข้อมูลและอัลกอริทึม 16/08/2565 subtitle: date: วันอังคารที่ 16 สิงหาคม 2565 เวลา 13.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์สุธาสินี) คราวนี้นะคะ เดี๋ยวครูทวนคราวที่แล้วนะคะ คราวที่แล้วเราพูดถึงโครงสร้างการจัดเก็บข้อมูล ในรูปแบบที่เรียกว่า ว่า stack นะคะ คราวที่แล้วเราพูดถึงการลักษณะของโครงสร้างข้อมูลแบบ stack stack เป็นอย่างไร ถ้าพูดถึง stack นะถึงคน นึกถึงหลอด CD มีใครไม่เคยเห็นไหม เคยเห็นใช่ไหมคะ เวลาเราไปซื้อแผ่นซีดี ปัจจุบันอาจจะขายน้อยลง แต่เราเคยเห็นนะคะ เคยผ่านตา ในหลอด CD เราจะบรรจุ CD เห็นไหมคะ บรรจุขึ้นไปเรื่อย ๆ เลย 1 หลอดอาจจะมี 100 แผ่น 500 แผ่นอะไรก็ว่าอะไปนะ เรานึกภาพนะ ในหลอด CD นะ นะคะ เวลาเราจะใส่ CD เข้าไปเพื่อแพ็คขาย นะคะ แล้วค่อย ๆ หย่อนลงไปทีละอันถูกไหม เราค่อย ๆ หย่อนแผ่น CD ลงไปทีละอัน แผ่นแรกที่เราหย่อนมันลงไป จะอยู่ด้านล่างสุดนะคะ ใส่เข้าไปเรื่อย ๆ จนครบแผ่นที่ 100 แผ่นที่ 100 อยู่ด้านบนสุดถูกไหมคะ เสร็จแล้วเขาก็ไปแพ็กมาขายให้เรา เวลาเราเอามาใช้นะคะ เราเปิดมาปุ๊บ เราหยิบออกมาใช้เลยไหม หรือว่าเราคว่ำ เราคว่ำหลอดเอาตัวล่างสุดออกมาใช้ หยิบออกมาเลยถูกไหมคะ เวลาเราซื้อมาเราหยิบพลาสติดออกมา คือ แผ่นที่ 100 ใช่ไหมคะ ซึ่งแผ่นนี้ เป็นแผ่นที่ถูกเอามาใส่เป็นแผ่นสุดท้าย ลักษณะการจัดเก็บข้อมูลแบบนี้ล่ะ เรียกว่า "stack" นะคะ เข้าก่อนออกทีหลังถูกไหม แผ่นที่ 1 จะอยู่ด้านล่างสุด สุดมันถูกเอาออกมาใช้ทีหลังนะคะ ตัวที่เข้าทีหลังจะถูกเอาออกมาใช้ก่อน ครูเลยสรุปมาให้นะคะ ว่าข้อมูลแรกนะคะ ถ้าเมื่อไรก็ตามที่เราพูดถึง stack ข้อมูลแรกจะอยู่ล่างสุด เห็นไหมคะ ข้อมูลตัวแรกจะอยู่ล่างสุด ข้อมูลล่าสุดจะอยู๋ด้านบน ก็คือตัวล่าสุดที่เราใส่ลงไปนี่ จะอยู่ด้านบนนะคะ คราวนี้เวลาเราเอาข้อมูลออกมาใช้ เมื่อกี้เราใส่ถูกไหมคะ เมื่อกี้เราใส่ เวลาเอาข้อมูลออกมาใช้จาก Stack จะเอาตัวบนสุดออกมาใช้ก่อนหยิบมาตัวบนเลยนะคะ ตัวที่อยู่ด้านล่างสุด คือ ตัวแรกที่เราใส่เข้าไปนี่ จะถูกเอาออกมาใช้งานเป็นลำดับสุดท้ายนะ เวลาพูดถึง stack ให้ยนะคะ ให้นึกถึงการจัดเก็บข้อมูลในหลอด CD คราวนี้ ใน Stack คราวนี้ในการจัดเก็บนะคะ ในการเอาออกมาใช้งานใน Stack เราจะมีคำสั่งอยู่ 2 คำสั่งด้วยกัน คือ Push ก็คือตัวนี้ กับคือ pluch 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 แถว แต่มีหลายคอลัมน์ ลิสต์ให้มองเป็นตารางแต่ละช่องจะมีหมายเลขช่อง หมายเลข 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 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 เท่าไรคะ ที่ 1 ทำข้อที่เหลือให้ครูหน่อย แล้วก็บอกด้วยว่า Top Top คือข้อมูลล่าสุดนี่ ข้อมูลตัวสุดท้ายมัยอย๔ที่เท่าไร เริ่มต้นเราตีตาราง เราทำทีละแถว เริ่มต้นเราทำทีละแถว เราข้อแรกก่อน วาด 5 คอลัมน์ 1 แถว ทำทีละแถวนะคะแล้วก็ใส่หมายเลขที่อยู่ด้านบนแต่ละช่อง คราวนี้มาดูด้วยกันนะคะ ดูนะ ครูเริ่มโจทย์ข้อถัดไปนะคะ คือ Push 9 เราจะเห็นว่าแต่ละข้อมันต่อกันมาเรื่อย ๆ นะคะ เพราะฉะนั้น เจอคำสั่ง Push เอาของเดิมลอกลงมาก่อนนะคะ ใส่ของเดิมก่อนนะ ในช่องเดิมมีเลขอะไร ใส่ลงมาก่อนเลย 5 3 นะคะ เสร็จแล้วครูสั่ง Push 9 คือ Push คือ ใส่ลงไป เพราะฉะนั้น 9 จะมาอยู่ตัวถัดไป แล้ว Top ก็ดูหมายเลขช่อง หมายเลขช่องเป็นอะไร เป็น 2 โอเค ถัดมา ครูบอกคำสั่ง Pop เอาออก Pop คือเอาออก ดึงออกนี่ เราจะดึงอะไรก่อนนี่ มองขึ้นมาดูก่อน เดิมเรามี 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 ตัวด้วยกัน นะคะ ตัวแรกจะเรียกว่า Font front คือ ข้างหน้านะคะ หรือเราแทนด้วยตัว f ก็ได้ เขียนแทนด้วย F สั้น ๆ ก็ได้ อีก 1 ตัวชี้ rear นะคะ มีอ่านว่า rear r-e-a-r ก็คือ rear rear ก็คือด้านหลังนะคะ เป็นตัวกำกับการเข้า เห็นไหม Rear เป็นตัวกำกับการเข้า front อยู่ข้างหน้า แสดงว่าเป็นตัวกำกับการออกจากคิวนะคะ Front จะอยู่ข้างหน้าถูกไหม เพราะฉะนั้น จะต้องชี้อยู่ที่สมาชิกตัวแรกนะคะ front จะชี้อยู่ที่สมาชิกตัวแรก เพราะฉะนั้น มันจะชี้อยู่ที่สมาชิกตัวสุดท้ายของคิว front อยู่ด้านหน้า rear อยู่ด้านหลังนะคะ เพราะฉะนั้น เวลาข้อมูลเข้าไปที่คิว จะดูที่ rear นะคะ จะดูที่ rear เวลาเอาข้อมูลออกจะออกไปข้างหน้า ก็คือจะดูที่ Frontในการทำงานของคิวนะคะ เราก็ใช้ลิสต์นั่นล่ะ เป็นตัวเก็บข้อมูล เราใช้ลิสต์นั่นล่ะในการเก็บข้อมูจะเห็นว่า Stack กับ คิว เราใช้ลิสต์ในการเก็บข้อมูลเหมือนกัน แต่สิ่งที่ต่างกันคืออะไร Stack เราเรียนไปแล้ว เข้าก่อนออกทีหลัง เข้าออกอยู่ทางเดียวใช่ไหม เข้าออกอยู่ทางเดียวคือด้านบน แต่คิวมันทีทางเข้าทางออก 2 ทางนะคะ เข้าข้างหลัง ออกข้างหน้านะคะ QUEUE คือเข้าข้างหลังออกข้างหน้า เราแทนคิวนะคะ อย่างที่ครูบอกว่าเราแทน QUEUE ด้วย List นะคะ จะเป็นแนวตั้งหรือแนวนอนได้เหมือนกัน เราสามารถแทนคิวด้วย list หรือจะใช้เป็น linklist อย่างนี้ก็ได้ เหมือนโบกีรถไฟ กันไปเรื่อย ๆ นะคะ แต่เราจะพูดถึงคือใช้ list นะ เราทำ QUEUE ที่เป็น liแล้วเราเอา queue มาทำอะไรบ้างในคอมพิวเตอร์นะคะ Stack คราวที่แล้วนี่ เราใช้ Stack ในการคำนวณทางคณิตศาสตร์ แล้วคิวเอามาทำอะไร เอามาทำอะไร เวลาเราสั่ง print นะ สมมติทั้งห้องนี่มีเครื่องพรินต์เครื่องพิมพ์อยู่แค่ 1 เครื่อง เวลาเราจะสั่งพิมพ์เห็นไหม ใครสั่งพิมพ์ก่อน ก็ไปเข้าคิวก่อน ก็จะถูกพิมพ์เอกสารออกมาเป็นคนแรก คนหลัง ๆ ก็จะรอคิวถูกไหมคะ มันก็จะลิสต์เป็นรายการของการพิมพ์อยู่ตรงนี้ แล้วก็ค่อย ๆ เอาออกไปทีละรายการตามลำดับการเข้าของข้อมูล หรือเหมือนกับเวลาเราไปจองหนัง จองบัตรภาพยนตร์ถูกไหมคะ จองที่นั่ง ใครมาก่อนก็ต้องได้ที่นั่งก่อน สามารถเลือกที่นั่งได้นะคะ การทำงานกับคิว การทำงานกับคิว เราใช้คำสั่งอะไรบ้างการทำงานกับคิวก็มี 2 คำสั่งด้วยกันนะคะ เรามีอยู่ด้วยกัน 2 คำสั่ง คือ เข้ากับออก เข้ากับออก เข้าเราใช้ end queue ก็คือเพิ่มข้อมูลเข้าไปเราใช้คำว่า "NQ" คำนี้ Enqueue คือ บอกว่านี่ต้องเอาข้อมูลเข้าไปใน queue นะ คำสั่ง DQ ตัว D นะคะ ขึ้นต้นด้วยตัว D Dequeue หมายถึง เอาข้อมูลออก เห็นไหมคะ Dequeue เอาข้อมูลออก Enqueue เอาข้อมูลเข้าเราก็มีการตรวจสอบคิวว่าง คิวเต็มเหมือนเดิมนะคะ คิวว่างคืออะไร คือไม่มีข้อมูลอะไรเลยอยู่ในคิว คิวเต็มข้อมูลนี่มันมาถึงตัวสุดท้ายแล้ว มาถึงตัว... ช่องสุดท้ายของลิสต์แล้วมันไปต่อไม่ได้แล้ว อันนั้นคือคิวเต็มนะคะ ข้อมูลมันมาอยู่ในช่องสุดท้ายของลิสต์แล้วมันไม่มีช่องใส่แล้วอันนี้คือคิวเต็ม โอเคนะ มี Enqueue กับ Dequeue นะคะ เข้า...เข้าข้างหลัง ออกข้างหน้า คราวนี้มาดูนะคะ ตัวอย่าง คราวนี้มาดูตัวอยย่าง ครูมีคิวนะคะ รูปบนสุดนั่นคือคิวนะคะ คิวครูมีข้อมูลอยู่ 3 ตัว คือ a b c เราบอกได้ไหมว่าข้อมูล A B C นี้ ข้อมูลไหนเข้ามาเป็นข้อมูลแรก a ใช่ไหมคะ a ถูกเข้ามาเป็นข้อมูลแรก รู้ได้อย่างไรนี่ไง มี frontfront อยู่ตรงไหน ข้อมูลตัวนั้น คือ ข้อมูลลำดับแรก ข้อมูลที่เข้ามาทีหลังสุดคืออะไรคะข้อมูลที่เข้ามาทีหลังสุดคือ C รู้ได้อย่างไร มี rear ชี้อยู่ rear ชี้ตรงไหน นั่นคือข้อมูลล่าสุด หรือข้อมูลสุดท้ายที่เข้าไปในคิว จะใช้ F หรือ R ก็ได้ สั้น ๆ F คือ front r คือ rear ครูใช้คำสั่ง Dequeue ครูใช้คำสั่ง Dequeue Dequeue ก็คือเอาออกเห็นไหมคะ D QUEUE ก็คือการเอาข้อมูลออกจากคิว บอกแล้วว่าออกข้างหน้าถูกไหม ออกออกข้างหน้า เพราะฉะนั้น ข้อมูลที่ถูกนำออก คือตัวแรก ก็คือตัว A จะถูกเอาออกใช่ไหมคะ A ถูกเอาออกไป เพราะฉะนั้น ข้อมูลล่าสุด A กับ B อะไรเข้าก่อน B เพราะฉะนั้น B จะมี front ชี้อยู่ ก็คือขยับค่า front น่ะ เลื่อนมาเป็นตัวถัดไปเพื่อบอกว่าอันนี้คือข้อมูลล่าสุดนะคะ ถัดมา ครูสั่ง Enqueue ครูสั่ง Enqueue ตัว D dog ในคิว N QUEUE กใช่ไหมคะ เข้าข้างหลัง เพราะฉะนั้น เข้าน่ะ เข้าข้างหลัง เพราะฉะนั้นแล้ว มันต้องต่อจาก C ถูกไหมคะ มันหย่อนลงไปปุ๊บถึงแค่ C เพราะฉะนั้นD dog นะคะ จะใส่อยู่ที่ตำแหน่งตรงนี้ ตำแหน่งถัดจาก C rear เดิมอยู่ที่ C ถูกไหมคะ rear เดิมขยับมาอีก 1 ตำแหน่ง เพราะว่ามันคือข้อตัวล่าสุดแล้วตัว D Dog สิ่งที่เราได้คืออะไร rear มีค่าอะไร ก็หมายเลขช่องของมัน มันชี้ที่ช่องไหน rear จะมีค่าเป็น 3 front ชี้อยู่ที่ไหน ชี้อยู่หมายเลข 1 front จะมีค่าเป็น 1 นะคะ โอเค อันนี้ครูข้ามไปนะมาดูตัวอย่างอีก 1 ข้อ ครูสั่งเริ่มต้นเป็นคิวว่าง คิวว่าง เพราะฉะนั้น มันไม่ได้ชี้อยู่ที่ไหนเลย front กับ rear จะมีค่าเป็น -1 มันไม่ได้ชี้ที่ช่องไหนเลย ครูมีแค่ 0 1 2 มันไม่ได้ชี้ทีไหนเลยเพราะฉะนั้น มันจะมีค่าเป็น -1 ครูสั่งคำสั่งแรกนะคะ ครูสั่ง Enqueue ใส่ข้อมูลเข้าไป ใส่เลข 4 N QUEUEวงเล็บเปิด เลข 4 วงเล็บปิด แสดงว่าครูกำลังจะใส่ข้อมูลตัวใหม่เข้าไปในคิว ใส่เลข 4 ถูกไหมคะ เข้าข้างหลัง ครูก็เข้าข้างหลังนะ เข้าไปมันเป็ยที่ว่างก็หย่อนลงไปมันก็ไหลลงมาเรื่อย ๆ มาถึงตำแหน่งนี้ มันสุดแล้ว เพราะฉะนั้น ตัวแรก ก็คือข้อมูลตัวนี้ล่ะ ตัวสุดท้ายคือข้อมูลตัวนี้ อยู่แค่ตัวเดียว เพราะฉะนั้นfront กับ rear มันก็ชี้อยู่ที่ตัวเดียวกัน มีค่าเท่ากับ 0 นะคะ คำสั่งถัดมา ครูสั่ง N QUEUE3 ก็คือใส่เลข 3 ใส่เลข 3 เอามาเข้าข้างหลัง ใส่เลข 3 เอามาเข้าข้างหลัง ถูกไหมคะ เวลาเข้าเข้าข้างหลังนะคะ ใส่เลข 3 ลงมา ช่องมันเป็นค่าว่างใช่ไหมมันลงไปไม่ได้แล้ว เพราะมี 4 ตันอยู่ มันจะมาอยู่ตำแหน่งนี้ เพราะฉะนั้น enqueue (3) 3 จะมาอยู่ที่ช่องหมายเลข 1 จะเห็นว่า rear จะขยับแล้วนะเมื่อไรก็ตามที่เพิ่มข้อมูลลงไป rear จะขยับ rear จะมีค่าเป็น 1 front ยังอยู่เหมือนเดิมนะคะ เมื่อไรก็ตามที่เห็นคำสั่ง enqueue เอาของเดิมยกลงมาก่อน เหมือนStack นะคะ เอาของเดิมยกลงมาก่อน แล้วก็หย่อน 3 ลงมามาดูอีก 1 ข้อ เร็วเดี๋ยวครูจะให้ลงหัดทำนะคะเริ่มต้นเป็นคิวว่างใช่ไหมคะ รูปแรกนี่มันเป็นคิวว่าง คิวว่างต้องมี front กับ rear คือมีค่าเท่ากับ -1 นะคะ นะคะ เจอคำสั่งถัดมา Enqueue EnqueEnqueue ก็คือใส่ข้อมูลตัวใหม่เข้าไป คือ ใส่หมายเลข 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) 2 เดิมเรามี 4 กับ 3 แล้วใช่ไหมคะ เราก็มี 4 กับ แล้วครูสั่ง enqueue คือใส่ข้อมูลใหม่ คือ 2 2 มันก็จะไปอยู่ที่หมายเลข 2 หมายเลขช่องนะคะ เห็นไหมตอนนี้มันก็จะอยู่ในช่องหมายเลข 2 เพราะฉะนั้น rear ก็คือเมื่อไรที่เข้า rear จะเลื่อนจึงมีค่าเท่ากับ 2 front อยู่ข้างหน้า rear อยู่ข้างหลัง ตอนนี้คิวเต็มแล้ว เพราะว่าอะไร ไม่มีช่องว่างเลย มันอยู่ที่ตัวสุดท้ายแล้ว เราใส่ข้อมูลตัวใหม่ลงไปไม่ได้แล้วนะคะ คำสั่งถัดมาคือDequeue คิวนี่เข้าข้างหลังออกข้างหน้า เพราะฉะนั้น เวลาเอาออกเอาอะไรออกเอาข้างหน้าถูกไหมคะ ข้างหน้าคือ 4 ถูกเอาออกไป พอข้างหน้าถูกเอาออกไป ตัวหน้าสุดนี่ ก็คือตัวแรกที่อยู่ในคิวก็ก็คือ 3 front จะเลื่อนลงมาเป็นตัวถัดไป เพราะเราเอาตัวล่าสุดออกไปแล้วไง พูดผิด ตัวเลขออกไปแล้วนี่ 3 มันก็เลยกลายเป็นตัวเลข front จะเลื่อน เสร็จแล้วครูสั่ง Dequeue ก็คือเอาออก เอาข้างหน้าออก 3 ถูกเอาออกไปแล้ว front จะเลื่อนมาอยู่ที่หมายเลข 2 นะคะ front จะอยู่ทหมายเลข 2 rear จะอยู่หมายเลย 2 โอเค คราวนี้ เดี๋ยวครูเปลี่ยนเป็น... คราวนี้มาดูด้วยกันนะคะ เดี๋ยวเราจะได้ดูแบบฝึกหัดด้วยกัน เริ่มต้นนะคะ อันนี้ครูขอใช้ front กับ rear แทนด้วย f นะคะ ครูมีคิวว่างถูกไหมคะ คิวข้อของครูไม่มีอะไรเลย ไม่มีตัวเลขอะไรเลย เพราะฉะนั้น ตอนนี้มันเป็นคิวว่าง คิวว่างคือไม่มีข้อมูลนะ เพราะฉะนั้น f กับ r เลยมีค่าเท่ากับ -1 นะคะ มันไม่มีอะไรเลยมันไม่มีอะไรเลย f กับ r มันลอยละล่อง ให้มันมีค่าเป็น -1 ดถัดมาอันนี้เราทวนกันนะ Enqueue 5 EnqueEnqueue (5) ก็คือใส่ข้อมูลลงไปในคิวเพิ่มข้อมูลลงไปในตคิตอนนี้ข้อมูลไม่มีอะไรเลย ตอนนี้เอาข้อมูลไว้ข้างหลังนะ เวลาเข้าเข้าข้างหลัง เลข 5 นี่ มันก็จะมาอยู่ที่ตัวแรกสุดครูหย่อนเลข 5 ทางนี้ไหล ๆ ๆ ไหลลงมาเรื่อย ๆ เลย 5 จะอยู่ที่ช่องหมายเลข 0 F กับ เลยมีค่าเท่ากับ 0 เห็นไหม f จะชี้ที่ตัวแรก r จะชี้อยู่ที่ตัวสุดท้าย ตอนนี้มันคือข้อมูมันเลยอยู่ที่ตำแหน่งเดียวกัน วถัดมา ครูใช้ำคำสั่ง Enครูใช้คำสั่ง Enqueue ก็คือใส่ 10 ลงไป พอครูใส่เลข 10 ก็คือเพิ่มข้อมูลใหม่ลงไปในคิวเดิม ดูของเดิมก่อน เดิมเรามี 5 อยู่แล้วใช่ไหม เราจะใส่ 10 ลงไป เราก็เอา 5 ลงมาใส่ก่อน แล้วเราก็ใส่ 10 ลงไปด้านหลังแล้วเราก็ใส่ 10 ลงไปข้างหลัง 10 ก็จะอยู่ต่อท้ายเลข 5 นะคะ เพราะฉะนั้น front ก็ยังคงมีค่าเท่าเดิม คือด้านหลังน่ะ ด้านหลังมันขยับออกมาอีก 1 เพราะฉะนั้น rear จะมีค่เป็น 1 เนื่องจากอะไร ก็ข้อมูลล่าสุดมันอยู่ที่ Index อยู่ที่ช่องเบอร์ 1 นะคะ rear เลยขยับไป 1 เห็นไหม rear จาก 0+1 เห็นไหมคะ กลายเป็น 1 อยู่ที่นี่ ดูต่อนะคะ ครูสั่ง enqueue (12) 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 = พอครูสั่ง 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 กับ reaจะมีค่าเป็นอะไรคะ เป็นอะไรเอ่ย เป็น -1 เป็น - 1 นะคะfront กับ rear จะมีค่าเป็น 1 โอเค ถัดมา ครูสั่ง Enqueue ก็คือใส่ 2 เข้าไป ถูกไม เดิมมันมีข้อมูลไหมไม่มี เพราะฉะนั้น ครูไม่ต้องเอาอะไรมาใส่ก่อนถูกไหมคะ Enqueue (2) เพราะฉะนั้นนี่ มาใส่นะ 2 ก็จะใส่เข้าข้างหลังใช่ไหมคะ ใส่เลข 2 เข้าข้าหก็ลงมา ๆ 2 จะอยู่ที่ 0 ถูกไหม อยู่ที่ช่องหมายเลข 0 เพราะฉะนั้น f กับ r จะชี้อยู่ที่ไหน ชี้อยู่ที่ไหน ก็ชี้อยู่ที่นีอยู่ตัวเดียว f จะมีค่าเป็น 0 r ก็มีค่าเป็น 0 คราวนี้ดูต่อ ดูด้วยกันก่อน แล้วครูจะให้เวลาเขียน ต่อมาสั่งEnqueue อีกแล้วก็คือใส่ข้อมูลเข้ามา แต่ก่อนที่เราจะใส่ข้อมูลเข้ามา ให้เอาข้อมูลเดิมมาใส่ก่อน ข้อมูลเดิมมีเลขอะไรคะ เลข 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 อยู่ที่นี่ จะได้ไม่งง คือโจทย์นะคะ รูปเริ่มต้น ครูกำหนดให้รูปนี้เป้นเริ่มต้น แล้วครูก็ใส่ Enque (2) นะคะ แล้วก็ใส่รูปนี้เข้ามา แล้วก็วาดรูปนะคะ มี 5 เป็นตัวเดิมอยู่แล้ว เราก็ใส่ 2 เดี๋ยวนะเพื่อไม่ให้งงนะ ครูไม่มีรูปนี้เลยแล้วกัน เดี๋ยวจะงงไม่ มันเริ่มข้อ 1 ตรงนี้เลย มันเริ่มข้อ 1 ที่นี่เลย คือ ใครเขียนแล้วไม่เป็นไร เขียนแล้วไม่เป็นไรนะ แต่เพื่อนเดี๋ยวเพื่อนบางคนเขาจะงง ข้อ 1 อย่างนี้ได้เลย แต่ไม่เป็นไร... [สิ้นสุดการถอดความ]