--- title: ฝึกพิมพ์ 5004 โครงสร้างข้อมูลอัลกอริทึม ปลา ภูมิ subtitle: date: วันศุกร์ที่ 2 กันยายน 2565 เวลา 13.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์สุธาสินี) ข้อมูลเป็นที่เป็นลักษณะ Stack ถ้าพูดถึง stack ซึ่งปัจจุบันอาจจะขายน้อยลง เคยเห็น เคยผ่านตาเคยผ่านตาในหลอดซีดี เรานึกภาพนะในหลอด CD สมมติว่าเรามีหลอดเปล่า ๆทค่้อย ๆ หย่อยแผ่น CD ลงไปทีละอันลงไปจะอยู่ด้านล่างสุด มาขายให้เรา เวลาเราเอามาใช้นะคะ เราเปิดมาปุ๊บเราหยิบออกมาใช้เลยไหม ออก เปิดฝาแล้วก็หยิบแผ่นแรกออกมา ใช่ไหมคะ ซึ่งแผ่นนี้เป็นแผ่นที่ถูก Stack นะคะ เข้าก่อนออกทีหลังทีหลังถูกไหมแผ่นที่ 1 มันถูกเอาออกมา ครูเลยสรุปมาให้นะคะ ว่าข้อมูลแรก จะอยู่ล่างสุด ข้อมูลล่าสุดจะอยู่ด้านบนก็คือตัวล่าสุก เวลาเราเอาข้อมูลออกมาใช้ เมื่อกี้เราใส่ ใช่ไหมคะ ถูกไหมคะเมื่อกี้เราใส่ทีนี้เราจะเอาออกมาใช้ หยิบมาตัวบนเลยนะคะ ตัวที่อยู่ด้านล่างสุดคือตัวแรกที่เราใส่เข้าไปนี่มันจะถูกเอาออกมา ให้นึกถึงการจัดเก็บข้อมูลใน หลอด CDคราวนี้ใน stack คราวนี้ในการจัดเก็บนะคะ ในการเอาออกมาใช้งานใน stack Push กับ Pop Push คือใส่ Pop คือเอาออก นะคะ เวลาเราจะ Push หรือใส่ข้อมูลอะไรต้องบอกด้วยว่าแล้วข้อมูลอะไร นะคะ ตอนนี้ครูต้องการใช้เลข 5 ในการใส่ลงไปใน stack นะคะ Pop คือเราดึงออกเวลาเราเอาออกข้อมูลที่อยู่ นอกจาก pUsh กับ Popตัวแปรที่จะต้องรู้จักคือ Top จะเป็นตัวชี้ที่บอกตำแหน่งของข้อมูลล่าสุดหรือ มันจะอยู่ในตำแหน่งที่ Top หรือตัวระบุค่าเป็นตัวบอก Stack ว่างคือไม่มีข้อมูลอะไรอยู่เลยTop จะมีค่าเป็น - 1Stack ที่เราพูดถึงนะคะ Stack ให้นlIst ทุกคนจำ List ได้นะคะ เป็น จะมีหมายเลขช่อง หมายเลข 0 1 23, หมายเลข 4 ตาม 0 เพราะฉะนั้น ดูแถวแรกนะคะ มี stack อยุ่ทั้งหมด 5 ช่อง ตัวนี้เป็น Stack ว่าง ยังไม่มีข้อมูลอะไรอยู่เลเมื่อไหร่ก็ตามที่เราไม่มีข้อมูลอะไรอยู่ใน stack เลย ไม่ได้อยู่ในช่องเหล่านี้เลย เห็นไหมคะ มันอยู่ตรงไหนไม่รู้ - 1 อยู่นอกช่อง คืออะไรคะ คือใส่เข้าไปถูกไหม เราใส่ด้านไหนเอาใส่ที่ด้านหลังนะคะ เพราะฉะนั้นตัวแรก เมื่อเรา Push เลข3 ลงไปมันจะไปอยู่ในหมายเลขอะไรคะ ข้อมูลตัวแรกจะมาอยู่ที่ช่องหมายเลข 0 นะคะ Top ของเราก็จะ หมายเลขช่องนะคะ ที่ข้อมูลมันอยู่อยู่ถัดมา เพราะฉะนั้น Top จะมีค่าเท่ากับเท่าไหร่เอ่ยTop จะมีค่าเท่ากับมันหล่นลงมา ถัดมา ครุสั่ง Pop เอามันออกสั่งเอามันออกดึงมันออกมมันมีทางเข้าทางออกอยู่ 3 หรือ 5 5 ใช่ไหมคะ 5 จะถูกดึงออกมาเพราะมันอยู่บนสุด เท่ากับ 0 เห็นไหมคะ5 มันถูกหายไปแล้วเพราะ Pop มันดึงออกมา คะ มีอะไรอยู่ในของเดิมใน Stack ของเรา3 นะคะ ในตัวเดิมของเรามี 3 อยู่ หมายเลข 1 นะคะ เพราะฉะนั้น Top มีค่าเท่ากับ1 โอเค มีกระดาษไหมคะ จดตัวอย่างนี้ลงไปเร็วเดี๋ยวครูจะมีแบบฝึกหัด (คุณครูกนกวรรณ)ทุกคนดูนะคะ เวลาเราวาดตารางใช่ไหมคะตัวข้างบนนี่จะเป็นหมายเลขช่อง นะคะ ตัวอย่างนะคะ เราจะเห็นว่าครูสั่งทีล่ะแถวถูกไหมคะ 5 นะคะ คำสั่งที่ 3 ครู Pop 5 ออก คำสั่งที่ 4 วาดช่อง เส้นบนที่เป็นหมายเลข indเลข Index ไม่ต้องวาดเส้นนะคะ เดี๋ยวโจทยืถัดไปนะ เราวาดเส้นเฉพาะแถวที่เป็นข้อมูล ถัดมาครูมีโจทย์มาให้ 5 ข้อ ตัวนี้ครุเริ่มต้น ครูใส่ข้อมูล 5 ให้แล้ว Top มีค่าเป็น 0 ใส่ของเดิม ตัวนี้คือ 5 แล้วเรา Push 3 ที่ 1 ข้อมูลล่าสุด ข้อมูลตัวสุดท้ายมันอยู่ที่หมายเลข Index ที่เท่าไหร่ ทีละแถวนะคะ เริ่มต้นเราทำทีละแถวเราทำข้อแรกก่อนว่าถ้าที่อยู่ด้านบนแต่ละช่องมาดูด้วยกันนะคะดูนะ ครูเริ่ม ฉะนั้น เจอคำสั่ง Push เอาของเดิมลอกลงมาก่อน 3 ใช่ไหมคะ เสร็จแล้วครูสั่ง Push9 คือ Push คือ ใส่ลเป็น 2 โอเค นี่ เราจะดึงอะไรก่อนนี่ ก่อนเดิมใน stack เอามีอยู่ 3 ค่า ตัด 9 ออกไป เหลืออะไร 5 กับ 3ก็ยก 5 กับ 3 ลงมา ตัวบนสุด หรือตัวล่าสุดเราอยู่ที่หหมายเลข 1 โอเค ใช่ไหมคะ เอาของเดิมลงมาก่อน ของเดิมมีเลขอะไรบ้าง 5 กับ 3 2Stack มี Push คือใส่เข้าไปPop คือเอาออกใช่ไหมคะ โอเค อันนี้คือ SStackเดี๋ยวครูให้เบรค 5 นาที นะคะ เดี๋ยวเราสับสนครูให้พักกก่อน 5 นาทีเรื่องใหม่จะเป็น คิว นึกถึงเวลาเราต่อ ครบแล้วนะคะวันนี้เราจะพูดถึงโครงสร้าง เพรมะเวลาเราไปซื้อของ เราก็ต้องต่อคิวซื้อกับข้าว เวลาเราไปต่อคิวใช่ไหมคะ ถ้าเรา เราจะถึงคิวที่จะได้ของ หรืออะไรแบบนี้เราก็เป็นคนสุดท้ายเพราะฉะนั้น นะ เวลาเราต่อคิว เราก็เข้าที่ด้านหลัง เวลาเราซื้อของเสร็จเรียบร้อยแล้ว เพราะฉะนั้น QUEUE จะต่างจาด stack จะมีทางเข้าทาง คนละทาง เข้าทางหนึ่งออกทางหนึ่งเพราะฉะนั้นแล้วข้อมูลที่เข้าไปเก็บไว้ ออมาใช้งานก่อน ข้อมูลไหนใช้เข้าใช้งานก่อน เพราะฉะนั้นในคิวเราจะมีตัวกำกับ ตัวแรก จะเรียกว่า Font Front คือนะคะ หรือเราแทนว่าตัว F ก็ได้ ตัวชี้ Rear มีอ่านว่า rear r-e-a-r rear เป็นตัวกำกับการเข้า Frontข้างหน้าแสดงว่าเป็นตัวกำ ข้างหน้าถูกไหม เพราะฉะนั้นจะชี้อยู่ที่สามาตัวแรกนะคะ Font ของคิวFont อยู่ด้านหน้า เวลาข้อมูลเข้าไปที่คิวจะดูที่ rearนะคะ จะดูที่ จะดูที่ ในการทำงานของ "QUEUE" stack กับคิวเราใช้ลิสตืในการเก็บข้อมูลเหมือนกัน แต่สิ่งที่ต่างกันคืออะไร คือด้านบน แต่คิวมันมีทางเข้าทางออก 2 ทาง ข้างหน้า เราแทน Queue หรือจะใช้เป็นลิงลิสต์แบบนี้ก็ได้เหมือน โบกี้รแล้วเราเอา "QUEUE" มาทำอะไรบ้างในคอมแล้วคิวเอามาทำอะไรเวลาเราสั่งพรินก่อนคนนั้นก็ไปเข้าคิวก่อน ก้จะถูกพิมพ์คนหลัง ๆ ก็ต้องรอ ตามลำดับการเข้าของข้อมูลหรือ ที่นั่งก่อน ๔ุกไหม สามารถเลือกก็มี 2 คำสั่งเหมือนกันนะคะ เรามีอยู่ 2 คำสั่งก็คือเข้ากับออก เข้ากับออก Enqueue นะคะ คำนี้End คิว ตัว D นะคะ ขึ้นต้นด้วยตัว Dหมายถึงเอาข้อมูลออก DQ เราก็มีการตรวจสอบคิวว่าง คิวเต็มเหมือน้เคิวเต็มเหมือนเดิมข้อมูลนี่ มันมาถึงตัวสุดท้ายแล้วตัวช่องสุดท้ายของ List ใส่แล้ว อันนั้นคือคิวเต็ม โอเคนะ ออกข้างหน้าคราวนี้มาดูนะคะ ตัวอย่าง นะคะ รุปบนสุดนั่นคือคิวqueue ครูมีข้อมูลอยู่ 3 ตัว นี้ ข้อมูลไหน เข้ามาเป็นข้อมูลแรกข้อมูลแรก A นี่ไง มี front ชี้อยู่ front อยู่ตรงไหนข้อมูลตัวนั้นคือข้อมูลอันดับแรคือ C รู้ได้อย่างไรมี rear ชี้อยู่ ที่เข้าไปในคิว จะใชเ f หรือ r ก็ได้นะคะ F คือ Front R คือ rear ครูใช้คำสั่ง Dequeue dequeue ก็คอืการเอาข้อมูลออกจากิวบอกแล้วว่าออกข้างหน้า ก็คือตัว A จะถูกเอาออก ใช่ไหมคะA ถูกเอาออกไป B จะมี front ชี้อน฿ก็คือขยับค่า Frontถัดมาครูสั่ง Enqueue เข้าข้างหลัง เพราะฉะนั้น เข้าข้างหลังเพราะฉะนั้นแล้วมันต้อง นะคะ ก้จะใส่อยู่ที่ตำแหน่งตรงนี้ตำแหน่งถัดจาก D-dog สิ่งที่เราได้คืออะไร rear มีค่าอะไร ชี้อยู่ที่หมายเลขช่องหมายเลข 1 frontจะมีค่าเป็น 1 นะค มาดูตัวอย่างอีก 1 ข้อ มันไม่ได้ชี้อยู่ที่ไหนเลย ถูกไหมคะจะมีค่าเป็น - 1 -1 ครูสั่งคำสั่งแรกนะคะ เลข 4 วงเล็บปิด แสดงว่าครูกำลังเข้าไปใน queue ใส่เลข 4 ใช่ไหมคะ จนถึงตำแหน่่งนี้มันสุดแล้วเพราะฉะนั้นตัวแรกคือข้อมูลตัวนี้ ตัวเดีัยวกัน มันเลยมีค่าเท่ากับ 0นะคะ เลข 3 ใส่เลข 3 เอามาเข้าข้างหลังถูกไหมคะถูกไหมคะ ใส่เลข 3 เวลาเข้า เข้าข้างหลัง เพราะมี 4 ตันอยู่ มันจะมาอยู่ตำแหน่นี้เพราะฉะนั้น Enqueue 3 ที่เพิ่มข้อมูลเข้าไป จะมีค่าเป็น 1 Front ยังอยุ่เหมือนเมื่อไหร่ก็ตามที่เห็นคำสั่ง Enqueueเอาของเดิมยกลงมาก่อนเหมือน stack เริ่มต้นเป็น queue ว่าง -1 นะคะก็คือใส่ข้อมุลตัวใหม่เข้าไป คือใส่หมายเลข 4 เดิมมันเป็น queue ว่างนะไม่ต้องนะคะ พอมันไปอยู่ที่ช่องหมายเล ขrear ก็จะมีค่าเท่ากับ 0 จากนั้น จากนั้น ใน queue เรามีเลข 4 อยู่แล้ว ใส่หมายเลข 3 ลงไปในคิวเดิม queue มีหมายเลขอะไรคะ หมายเลข 4 ก็จะไหลลงมาอยู่ที่ช่องหมายเลข 1 เมื่อเราใส่ข้อ อยู่ที่ 1 front ยังอยู่ที่เดิมเมื่อไหร่ที่ใส่ข้อมูลใหม่ ในคิว ก็คือ Enqueue 2 เดิมเรามี 4 กับ 3 คือ 2 เพราะฉะนั้น 2 มันก็จะไปอยู่ที่หมายเลข 2 หมายเลขช่อง rear ก็คือเมื่อไหร่ที่เข้า rear จะเลื่อน จึงมีค่าเท่ากับ 2 Front อยู่ข้างหน้า มันอยู่ที่ตัวสุดท้ายละ เราใส่ข้อมูลตัวใได้แล้วนะคะ Dequeue คือเอาข้อมูลออกqueue นี่เข้าข้างหลังออกข้างหน้า พอข้างหน้าถูกเอาออกไป ตัวล่าสุดนี่ก็คือตัวแรกที่อยู่ใน queue คือ 3 แรกออกไปแล้วนี่ 3 มันก็เลยกลายเป็นเลขล่าสุดที่อยู่ใน queue ถูกไหมคะ เอาข้างหน้าออก แล้ว Front ก็จะเลื่อนมาอยู่ที่หมายเลขโอเคคราวนี้มาดูด้วยกันนะคะ เดี๋ยวเราจตะได้ฃทำแบบฝึกหัดด้วยกัน กับ rear แทนด้วย front แทนด้วนะคะ ว่าง ถูกไหมคะ คิวข้อมูลของครูไม่มีอะไรเลยไม่มีตัวเลขอะไรเลยเพราะฉะนั้น ขอมูลนะ เพราะฉะนั้น F กับ R เลยมีค่าเท่ากับ - 1 -1 ถัดมาอันนี้เรา Enqueue (5)ก็คือใส่ข้อมูลลงไป พอครุหย่อนเลข 5 ลงไป หย่อนไปข้างหลังนะ เวลาเข้าเข้าข้างหลังเลข 5 นี่มันก็ ที่ช่องหมายเลข 0 F กับ R เลยมีค่าเท่ากับ 0 ตอนนี้มันคือข้อมูลตัวเดียวกัน มันเลฃยEnqueue ก็คือใส่ 10 ลงไปพอครูใส่เลข 10 ก็คือเพิ่มข้อมูลใหม่ลงไป เราจะใส่ 10 ลงไป เราก็เอา 5 ลงมาใส่กอ่แล้วเราก็ใส่ 10 ลงไปข้างหลัง เพราะฉะนั้น front ยังมีค่าเท่าเดิม แต่ rear คือด้านหลังล่าสุดมันอยู่ index เท่ากับ 1 นะคะ rear เลยขยับไป 1 ดูต่อนะคะ ครูสั่ง Enqueue 12 เพราะฉะนั้นครุต้องเอาอะไรมาก่อนเอา 5 กับ 10 เพราะครูจะใส่ มาไว้ก่อน แล้วครูใส่ตัวใหม่ คือ12 เข้า ก็คือการใส่ข้อมูลเพิ่ม ตอนนี้ มันเปลี่ยนมาอยู่ตำแหน่งเลข 2 แล้ว R เลยมีค่าเท่ากับ 2 โอเค เดี๋ยวดูไปก่อนนะ เดี๋ยวค่อยทคราวนี้ครูสั่งออก เดิมมันมี 5, 10, 12 เอาออก เอาออกข้างหน้าเอาอะไรออก เดิมนี่มันมี 5, 10, 12 ใช่ไหมคะFront = 0 เหลือ 10 กับ 12 เพราะฉะนั้นตัวแรกคืออะไรคือ 10 ตัว เปลี่ยนจาก 0 จะเป็น 1Enqueue เดิม ๆ จะอยู่ด้านซ้าย 20 เพราะฉะนั้น 20 จะไปต่อที่ 12 ใช่ไหมคะ F จาก rear ตรงนี้จะขยับขึ้นมาเป็น 3งเวลาเข้าเข้าข้างหลัง เพราะฉะนั้น rear จะขยับตอนนี้ข้อมูลมันอยู่ที่ช่องสุด คือใส่ข้อมูลลงไปในคิวไม่ได้ ใส่ไม่ได้ถึงแม้ แล้ว เพราะฉะนั้นแบบนี้เรียกว่าคิวเต็มนะคะ ลักษณะแบบนี้เรียกว่า ไม่มีที่ให้ใส่แล้ว เราจึงเรียกว่าคิวเต็ม มีกระดาาไหมคะ จดใส่สมุดให้ครูหน่อย คาวนี้มาดูด้วยกันดูพร้อมกันก่อนนะเดี๋ยว พร้อมกันก่อนนะคะตัวแรกครูกำหนด queue มาให้ ข้อ 1 นี่ คิวนี้มีข้อมูลอะไรไหม ไม่มีข้อมูลอะไรเลยถ้ามันไม่มีข้อมูล เป็น - 1 Front กับ rear จะมี ครุสั่ง Enqueue ก็คือใส่ 2 เข้าไปเดิมมันมีข้อมูลไหม ไม่มี ใส่นะ 2 ก้จะใส่เข้าข้างหลังใช่ไหมคะ ใส่เลข 2 เข้าข้างหลัง เพราะฉะนั้น fกับ r จะชี้อยู่มีก็ชี้อยู่ที่นี่น่ะ เพราะ ให้เวลาเขียน ถัดมา ครูสั่ง Enqueue อีกแล้ว มีเลขอะไรคะ เลข 2 ใส่เลข 2 ก่อนแล้วครูสั่จนถึงตรงนี้ถูกไหมคะ แล้วใส่เลข 5 ลงไป สุดนี่ก็จะชี้ มีค่า1 ก็คือค่า rear ส่วนตัวแรก ไง rear คือข้างหลัง มันเลยขยับเพราะฉะนั้น Front จะมีค่าเป็น 0 จดEnqueue เราได้ข้อมูล 2 กับ 5 อยู่ในคิวถัดมา ครูสั่ง Dequeue คือเอาข้อ เพราะฉะนั้นเอาข้อมูลออกเกิมเรา ลบตัวแรกสุดออกไป เหลืออะไรคะ 5 นะ เพราะฉะนั้นก็เอา 5 มาใส่ ที่เดิม เพราะเอาออกนะคะ แต่ f ต้องขยับเข้ามาอีก 1 ตัว ถัดมาครูาั่งอะไรคะ อะไร 5 เราก็เอา 5มาใส่ ใส่ให้ถูกต้องด้วยนะ 5 ต้องอยู่ช่องหมายเลข 1 หมายเลข 2 เพราะฉะนั้นข้อมูลตัวใหม่อะไรขยับ rear ขยับข้าง rear มีค่าเป็น 2เดี๋ยวครูสรุป จดมุมขวาตรงนีไปด้วยนะคะ ตรงปากกาแดง บ้าน มีแบบฝึกหัดอยู่ด้วยกักัน 5 ข้อเดี๋ยวครูจะเลื่อนให้นะ เดี๋ยวครูจะเลื่อนให้นะคะอันนี้ให้ทำเอง ให้รูปมานะคะ เสร็จแล้วครูสั่งEnqueue เพราะฉะนั้น มีเลข 5 อยู่แล้ว พอครูสั่ง Enqueue ปุ๊บเลข 2 จะอยู่ อันนี้ นะคะ รูปเริ่มต้นครูกำหนดให้รูปนี้เป็นรูปเรแล้วครูก็สั่ง Enqueue 2 ใส่ 2 เพื่อไม่ให้งงนะ ครุไม่มห้มีรูปนี้เลยแล้วกันเดี๋ยวจะ งง เขาจะงง ข้อ 1 แบบนี้ได้เลยแต่ไม่เป็นอะไร [สิ้นสุดการถอดความ]