วันสอบมีใครไม่ว่างไหมสอบทีหลังคนเดียวใช่ไหมคะถ้าไม่ว่างก็สอบทีหลังสอบคนเดียวค่ะสอบทีหลังนะคราวนี้เดี๋ยวมาเรียนต่ออีก1เรื่องนะคะเป็นเรื่องสุดท้ายก่อนที่เราจะสอบก็คือเรื่องคิวนะคะเรื่q(อ)u(ง)e(ค)u(ิ)e(ว)คราวที่แล้วเราพูดถึงstackใช่ไหมคะยังจำได้ไหมคุณสมบัติของstackนะคะคุณสมบแ(ั)ติของstaร(c)ก(k)คือเข้าก่อนออกตอนไหนเอ่ยเข้ท(า)ี(ก)่อนออกทีหลังนะคะคุณสมบัติของstackก็คือเข้าก่อนนะคะแล้วก็ออกที่หลังคราวนี้เราจะเห็นว่าคุณสมบัติของstackก็คือเข้าก่อนออกทีหลังนะคะstackเขามีทางเข้าทางออกกี่ทางมีแค่1ทางถูกไหมคะการเข้าออกนะคะของโครงสร้างข้อมูลแบบstackจะมีทางเข้าทางออกนี่เพียงแค่1ทางเท่านั้นนะคะเวลาเราเพิ่มข้อมูลใส่เข้าไปข้อมูลจะอยู่ด้านบนหรือด้านล่างด้านบนถูกไหมคะถ้าเราเพิ่มข้อมูลใหม่เข้าไปข้อมูลก็จะอยู่ด้านบนนะคะบนสุดของstackแล้วเวลาเราเอาออกเอาข้อมูลด้านบนหรือด้านล่างออกด้านบนถูกไหมคะเวลาเราเอาข้อมูลออกเ(ก)ร(็)า(ค)ก(ื)็(อ)เอาข้อมูลที่อยู่ด้านบนสุดออกนะคะรูปแบบของการจัดเก็บข้อมูลแบบstackที่เราเรียนไปนะคะเราเก็บในรูปแบบที่เรียกว่าlistใช่ไหมคะเราเก็บข้อมูลที่เรียกว่าในรูปแบบที่เป็นlistก็คจ(ื)ะ(อ)เก็บข้อมูลเรียงต่อกันไปจะเป็นแนวตั้งแบบนี้หรือจะเป็นแนวนอนแบบนี้เหมือนกันไหมเหมือนกันถูกไหมคะแค่จับเอียงเฉยๆนะคะแต่รูปแบบจะเหมือนกันก็คือเราจะเก็บข้อมูลเป็นช่องๆนะคะถ้าเป็นแนวนอนแบบนี้นะคะตัวแรกนี่ก็คือตัวที่เก็บก่อนถูกไหมคะด้านซ้ายก็เรียงลำดับไปเรื่อยๆนะคะการเก็บข้อมูลแบบlistเราจะมีindexนะคะเป็นตัวกำกับหมายเลขช่องต้องการเอาข้อมูลออกช่องสุดท้ายก็ต้องรู้ว่าindexตัวสุดท้ายคืออะไรแล้วก็ดึงข้อมูลออกมานะคะหมายเลขindexที่ชี้ในlistจะเริ่มต้นที่เลขอะไรเอ่ยindexเราจะเริ่มต้นที่0ถูกไหมคะหมายเลขindexก็คือหมายเลขของแต่ละช่องนี่จะเริ่มที่0,1,2ไล่ไปเรื่อยๆนะคะต้องการเข้าถึงข้อมูลที่indexตัวสุดท้ายก็คือเป็นindexหมายเลข4นะคะเป็นแนวตั้งเหมือนกันก็จะเก็บข้อมูลโดยมีหมายเลขindexเป็นตัวชี้นะคะเป็นตัวกำกับในแต่ละช่องอันนี้คือstackแล้วเรามีการจัดเก็บข้อมูลที่เป็นแบบlistนะคะอันนี้คือ1รูปแบบของstackสำหรับวันนี้นะคะเราจะเรียนอีก1โครงสร้างก็คือคิวคราวนี้ก่อนอื่นstackจะมีคำสั่งที่เอาข้อมูลเข้ากับเอาข้อมูลออกถูกไหมคะคำสั่งของการเอาข้อมูลเข้าลงไปในstackใช้คำสั่งใช้คำสั่งอะไรเอ่ยใช่(้)คำสั่งตัวไหนถ้าเอาข้อมูลเข้ามีเอาข้อมูลเข้ากับนำข้อมูลออกสมมุติว่าในstackนะคะเดี๋ยวครูย้อนกลส(ั)ม(บ)ม(ไ)ุ(ป)ต(น)ิดว(น)่(ึ)า(ง)ในstackถ้าเราต้องการเอาข้อมูลเข้าจะต้องใช้คำสั่งpushหรือpopใช้อะไรคะpushถ้าเt(อ)ห(า)ร(ข)ื(้)อมูลp(อ)o(อ)p(ก)ใช้คำสั่งpopถูกไหมคะถ้าคำสั่u(ง)pushกับคำสั่งpoppuจ(s)ะ(h)ต้องบอกด้วยว่าจะpushข้อมูลอะไรใช่ไหมคะก็ใส่หมายเลขข้างในหรือdataอะไรก็ได้ที่เราต้องการนะคะpopก็คือเอาข้อมูลออกมาก็จะส่งค่าออกมาว่าแล้วข้อมูลอะไรที่เราดึงออกจากstackนะคะจะมีpushกับpopถ้าพูดถึงstackถ้าเข้าคือpushถ้าออกคือpopนะคะคราวนี้มาดูเรื่องคิวทุกคนรู้จักคำว่า"คิว"ไหมคะเคยได้ยินไหมเคยได้ยินคิวไหมคะในชีวิตประจำวันเวลาทานไปต่อข้าวไปซื้อข้าวที่โรงอาหารต้องเข้าคิวไหมเข้าใช่ไหมคะก่อนจะขึ้นรถบัสกลับบ้านต้องต่อคิวไหมต่อถูกไหมคะหรือเราจะซื้อของอะไรก็ตามนะคะต้องมีการเข้าคิวก็คือต่อคิวไปแบงก์ต้องมีคิวไหมมีถูกไหมคะเราต้องไปกดขอบัตรคิวนะคะจะได้ลำดับที่เท่าไรคิวq(น)u(ะ)e(ค)u(ะ)e(ใ)นะ(โ)ครงสร้างข้อมูลกัะ(บ)คิวในชีวิตประจำวันเหมือนกันเลยนะคะใครมาก่อนได้ก่อนหรือได้ทีหลังได้ก่อนถูกไหมคะ"คิว"คือคนมาก่อนก็ต้องได้ก่อนคนมาทีหลังได้ทีหลังถูกไหมคะเพราะฉะนั้นconceptของคิวก็คือมาก่อนได้ก่อนเข้าก่อนเข้าก่อนออกก่อนถูกไหมคะเข้าก่อนออกก่อนนะคะคิวเข้าก่อนออกกก่อนแต่ถ้าเข้าก่อนออกที่หลังนั้นคือstackใช่ไหมคะคือรูปแบบของโครงสร้างนะคะมันจะมี2แบบคือคิวกับstackจะไปด้วยกันเพราะฉะนั้นเมื่อเราบอกว่าคิวคือเข้าก่อนออกก่อนนะคะมันก็เจ(ล)ะ(ย)ต้องมีทางเข้ากับทางออกคนละทางใช่ไหมเข้าทางหนึ่งออกทางหนึ่งเข้าข้างหลังออกข้างหน้าถูกไหมคะคิวคือเราเข้าด้านหลังค(เ)ิ(ร)ว(า)ต่อจ(ค)า(ิ)ก(ว)ข(ด)้าง(น)หลังแต่เวลาเอาออกใช่ไหมคะก็ต้องออกด้านหน้านะคะคิวจะมีทางเข้าทางออกคนละq(ท)u(า)e(ง)ก็คือจะมีอยู่2ทางนะคะข้อมูลที่นำเข้าไปเก็บก่อนจะถูกเน(อ)ำ(า)ไปใช้งานก่อนข้อมูลที่เข้าไปทีหลังนะคะก็จะถูกนำออกมาใช้งานทีหลังใช้งานทีหลังอันนี้คือค(c)อ(o)น(n)เ(c)ซ(e)็(p)ป(t)ของคิวนะคะที่เราเข้าใจรูบแบบโครงสร้างของคิวนะคะเราสามารถจัดเก็บได้แบบไหนเก็บได้เหมือนแบบstackเลยนะคะจะเก็บโดยการใช้listก็ได้เก็บโดยการใช้linkedlistก็ได้นะคะรูปแบบแบบนี้ก็คือlinkedlistใช้(่)ไหมคะรูปแบบด้านซ้ายที่เป็นแนวตั้งนะคะเราเก็บแบบlistเหมือนstackเมื่อกี้ที่เราพูดถึงเพราะฉะนั้นแล้วนะคะค(c)อ(o)น(n)เ(c)ซ(e)็(p)ป(t)ของคิq(ว)หรือstackเราจะเก็บข้อมูลที่เป็นlistหรือเป็นlinkedlistได้เหมือนกันนะคะตอนstackเราใช้listแล้วนะคะพอมาคิวเดี๋ยวเราจะลองเก็บข้อมูลแบบนี้นะคะเราจะเก็บข้อมูลที่เป็นแบบlinkedlistแบบนี้ตัวนี้นะคะlinkedlistเหมือนกับรถไฟนึกออกใช่ไหมคะlinkedlistจะเทียบได้กับรถไฟรถไฟจะเป็นโบกี้linkedlistก็เหมือนกันจะเก็บข้อมูลนี่เป็นnodeแล้วแต่ละโ(n)ห(o)น(d)ด(e)ก็เชื่อมด้วยกันนะคะแต่ละnon(d)eจะเก็บข้อมูลที่เราต้องการเหมือนกับในรถไฟ1โบกี้ก็จะมีคนนั่งใช่ไหมคะคนก็คือข้อมูลนั่นล่ะต้นlistรู้ไค(ด)ื(้)อย่อ(า)ะ(ง)ไรว่าต้นlinkedlistคืออะไรนะคะรถไฟรู้ได้อย่าะ(ง)ไรว่าคือด้านหน้าหรือด้านหลังมีอะไรเอ่ยทำให้เราสังเกตมีหัวจักรถูกไหมนะคะหัวจักรจะเป็นตัวบอกว่านี่คือด้านหน้าของรถไฟในlinkedlistต(เ)ั(ช)ว(่)นเดีย้(ว)กันนะคะจะร็(ู)เ(้)ห(ไ)ม(ด)ื(้)อย่างไน(ร)ก(ว)ั(่)น(า)ด้านหน้าของlinkedlistคืออะไรมีอะไรชี้อยู่มีลูกศรมีตัวชี้ที่ชื่อว่าheadใช่ไหมคะมีลูกศรที่ชื่อว่าheadชี้อยู่คือตัวนี้นะคะเพราะฉะนั้นa,b,c,dโ(n)ห(o)น(d)ด(e)แรกของlinkedlistตัวนี้คืออะไรคือaใช่ไหมคะแล้วโ(n)ห(o)น(d)ด(e)สุดท้ายคืออะไรเอ่ยddogใช่ไหมคะnon(d)eสุดท้ายก็คือตัวนี้คือddogนะคะในคิq(ว)u(น)e(ะ)u(ค)e(ะ)เราจะรู้ได้อย่างไรว่าเป็นnodeสุดท้ายคือมีตัวชี้ที่ชื่อว่าtailt-a-i-lนะคะtailตัวนี้จะเป็นตัวชี้ที่บอกว่าnodeนี้คือnodeสุดท้ายของlinkedlistตัวนี้นะคะheadชี้ที่ต้นlisttเ(a)ท(i)ล(l)ชี้ที่ท้ายlistนะคะทบทวนอีกแบบหนึ่งใน1nodeนะคะตัวนี้เราจะมีชื่อเรียกว่าอะไรคะnon(d)eใช่ไหมคะ1รูป1บล็อก(ค)ตัวนี้คือnodeนะคะ1nodeแบ่งออกเป็นกี่ช่อง2ช่องใช่ไหมคะช่องแรกเอาไว้ทำอะไรช่องนี้เอาไว้ทำอะไรช่องด้านซ้ายเอาไว้เก็บอะไรเก็บข้อมูลถูกไหมคะช่องด้านซ้ายเราไว้ใช้เก็บข้อมูลใช่ไหมคะเราใช้เก็บข้อมูลแล้วช่องทางขวาไว้ทำอะไรช่องทางขวาไว้ทำอะไรคะในnon(d)eแต่ละnon(d)eเอาไว้ใช้เหมือนรถไฟถูกไหมคะเหมือนรถไฟเวลาเราจะเชื่อมแต่ละnodeต้องเชื่อมกันไหมแต่ละโบกี้ต้องเชื่อมไหมเชื่อมไม่เ(อ)พ(ย)ร(่)างนั้นมัะ(น)จะเป็นรถไฟได้อย่างไรใช่ไหมคะมันก็ต้องเชื่อมกันเพรใ(า)ช(ะ)่(ฉ)ไ(ะ)ห(น)ม(ั)ค(้)ะ(น)ช่องด้านขวาตัวนี้จะเป็นช่องที่เอาไว้ใช้เชื่อมnodeถูกไหมคะช่องตรงนี้ที่อยู่ด้านขวาจะเอาไว้ใช้เชื่อมไปยังnodeถัดไปนะคะมีชื่อเรียกไหมช่องที่เก็บข้อมูลเราจะเรียน(ก)ช่องนี้ว่าอะไรจำได้ไหมdataใช่ไหมคะจำได้ไหมช่องที่เก็บข้อมูลจะมีชื่อเรียกว่าb(d)e(a)taแล้วช่องที่ใช้เชื่อมไปยังโ(n)ห(o)น(d)ด(e)อื่นจะมีชื่อว่าชื่อว่าอะไรเอ่ยชื่อว่าnextถูกไหมนะคะ1nodeจะประกอบไปด้วย2ส่วนส่วนที่เก็บข้อมูลเรียกว่า"de(a)ta"และส่วนที่ใช้เก็บตัวเชื่อมที่จะเชื่อมที่ยังเชื่อมไปยังnodeถัดไปมีชื่อว่า"next"นะคะคุ้นไหมน่ะเริ่มคุ้นไหมมีชื่อว่าnextใช่ไหมคะจะมีdataกับมีnextนะคะนะคะคราวนี้คราวนี้สมมุติว่าครูมีque(ค)u(ิ)e(ว)นะคะตัวนี้คือque(ค)u(ิ)e(ว)ครูมีque(ค)u(ิ)e(ว)นะคะมีกี่node3nodeนะคะnodeแรกข้อมูลคืออะไร10nodeสุดท้ายคือ30รู้ได้อย่างไรเพราะว่ามีheadกับtailเป็นตัวบอกถูกไหมคะอันนี้คือnodeแรกอันนี้คือnodeสุดท้ายนะคะแล้วรู้ว่าโ(n)ห(o)น(d)ด(e)แรกรู้ได้อย่างไรก็มีheadชี้อยู่ตรงนี้นี่ไงนะคะรู้ได้อย่างไรว่าคือnodeสุดท้ายก็มีte(a)a(i)lชี้อยู่นะคะเราเลยรู้ว่าได้ไหมคราวนี้นะคะมาดูว่าlinkedlistตัวนี้นะคะมีheadชี้ที่nodeแรกมีtailชี้ที่nodeสุดท้ายนะคะแต่ละnodeมีการเชื่อมโยงกันจะเห็นว่าเรามีเส้นเชื่อมนะคะเส้นเชื่อมระหว่าง20กั-(บ)30ถ้าเราจำการทำงานของlinkedlistได้นะคะส่วนที่เก็บข้อมูลจะมีชื่อว่าdataนะคะส่วนที่ใช้เชื่อมจะมีชื่อเรียกว่าnextnextนะคะnextเป็นตัวบอกว่าชี้ไปที่ไหนdataจะบอกว่าโ(n)ห(o)น(d)ด(e)นี้เก็บข้อมูลอะไรนะคะครูถามว่าhead.dataจะมีค่าเท่ากับเท่าไรheadคือตัวไหนคือตัวนี้.dataก็คือข้อมูลใช่ไหมคะเพราะฉะนั้นnodeนี้เก็บข้อค(ม)่(ู)า(ล)เท่าไร10ถูกไหมคะเพราะฉะนั้นhead.dataจะมีค่าเท่ากับ10มีใครสงสัยไหมว่า10มาจากไหนได้ใช่ไหมคะถ้าอย่างนั้นครูถามต่อtail.dataจะมีค่าเท่ากับtail.dataจะมีค่าเท่ากับ30นะคะโอ.เค.ถ้าคำสั่งเป็น.dataให้หาข้อมูลข้างในnodeนั้นมาใส่นะคะคำตอบจะต้องเป็นค่าข้อมูลคราวนี้มาดูนะคะhead..next.dataแสดงว่าต้องตอบเป็นค่าข้อมูลนะคะถ้าลงท้ายด้วย.dataแสดงว่าเราอยากรู้ว่าข้อมูลคืออะไรheadตัวนี้ถูกไหมคะเราดูทีละตัวนะheadนะคะเห็นไหมheadเราก็มาดูที่headheadชี้อยู่ที่ไหนอ๋อชี้อยู่ที่10นะคะhead.nextดูทีละตัวนะคะhead.nexthead.nextคือตัวนี้มันชี้ไปที่ไหนชี้ไปที่โ(n)ห(o)น(d)ด(e)ถัดไปคือตอนนี้มันชี้อยู่ที่โ(n)ห(o)น(d)ด(e)ถัดไปแล้วnodeนี้เขาถามว่า.dataเพราะฉะนั้นตอบตอบเท่าไรคะ20นะคะheadคือตัวนี้.next.nextแล้วอย่างไรnextแล้วมันชี้มาที่นี่ใช่ไหมคะเพราะฉะนั้นตัวชี้อยู่ที่นี่.nextแล้ว.dataเพราะฉะนั้นคำตอบคือ20นะคะถัดมาtail.nexl(t)te(a)l(i)l.nextตัวแรกคือตัวชี้ใช่ไหมคะtailชี้อยู่ที่ไหนชี้อยู่nodeสุดท้ายนะคะte(a)l(i)l.nextมันชี้อยู่ที่ไหนมันไปชี้ที่ไหนไหมte(a)l(i)l.nextตัวนี้มันเชื่อมไปที่nodeไหนไหมคะไม่เชื่อมเพราะฉะนั้นมันคือnodeสุดท้ายแล้วใช่ไหมคะเพราะฉะนั้นคำว่า.nextของมันก็คือค่าnoneคือไม่ได้เชื่อมไปที่ไหนนะคะคือไม่ได้เชื่อมไปที่ไหนก็คือตอบว่าnoneถูกไหมมันคือnodeสุดท้ายนะคะมันไม่ได้เชื่อมอยู(ไ)่(ป)ที่ไหนคราวนี้ครูถามอีก1ข้อมาตัวนี้ค่ะhead.next.nextแล้วก็.dataตอบเท่ากับเท่ากั=(บ)30ถูกไหมคะเราก็ต้องค่อยๆไล่headถูกไหมคะheadล่ะ.nextชี้มาที่นี้(่)แล้ว.nextอีกครั้งหนึ่งแล้วnextตัวนี้ไปไหนมาที่นี่แล้ว.dataก็เลยต้องตอบว่า30นะคะเริ่มไล่ถูกไหมทีนี่่ลองดูก่อนนะเรามาทบทวนตัวlinkedlistก่อนนะคะพอเราทำในque(ค)u(ิ)e(ว)เราจะทำได้คราวนี้ครูมีlinkedlistให้นะคะคือตัวเดิมเลยเมื่อกี้10,20แล้วก็30มีheadกับtailชี้ให้เรียบร้อยนะคะครูบอกว่าครูต้องการเพิ่มnodeใหม่เข้าไปที่ท้ายlistครูต้องการเพิ่มnodeใหม่คือnode5ถูกไหมคะnodeข้อมูล5ตัวนี้ไปไว้ที่ท้ายlistเพราะฉะนั้น5จะต้องต่อ1(3)0หรืออยู่หน้า10ท้ายlistเพราะฉะนั้น5ต้องมาต่ออยู่ที่30ถูกไหมคะ5จะต้องมาต่ออยู่ที่30และ5จะเป็นnodeสุดท้ายใช่ไหมพอเอา5มาต่อหลัง305กลายเป็นnodeสุดท้ายใช่ไหมใช่นะคะ5กลายเป็นnodeสุดท้ายคราวนี้ปัญหาคือครูจะเชื่อม5มาอยู่หลัง30ได้อย่างไรอันดับแรกทำอย่างไรคะเราก็ลองวาดเส้นถูกไหม5มันต้องเชื่อมมาที่เท่าไรเอ้าพูดผิด30ต้องเชื่อมมาที่5ถูกไหมคะ30ต้องเชื่อมมาที่5ครูวาดเส้นเชื่อมล่ะครูจะเขียนคำสั่งได้อย่างไรเส้นนี้ที่เชื่อมมาใหม่นี่ที่ครูลากใหม่จะต้องใช้คำสั่งอะไรดีคราวนี้มาดูว่าจะใช้จะใช้คำสั่งอะไรnodeสุดท้ายตัวนี้มีอะไรชี้อยู่มีอะไรคะมีte(a)l(i)lชี้อยู่ใช่ไหมคะเราต้องการเชื่อมไปยังnodeถัดไปเราต้องใช้ส่วนไหนเป็นตัวเชื่อมdataหรือnextnextถูกไหมคะก็เป็นtail.nextให้ชี้ไปที่ไหนเมื่อเราจุดตรงนี้ได้แล้วte(a)l(i)l.nextให้ชี้ไปที่ไหนชี้ไปที่55นี่มีอะไรชี้อยู่มีpชี้อยู่เพราะฉะนั้นก็กำหนดให้te(a)l(i)l.nextชี้ไปที่pชี้อยู่คราวนี้นะคะยังไม่จบถูกไหมยังไม่จบนะคะte(a)l(i)lเราจะชี้ที่ไหนหน้าที่ของtailคือชี้ที่ท้ายสุดตอนนี้อะไรคือท้ายสุด5ถูกไหมเพราะฉะนั้นต้องย้ายtae(i)lถูกไหมมาที่l(5)จะย้ายtailได้อย่างไรให้tailชี้ที่pชี้อยู่ใช่ไหมคะให้te(a)l(i)lชี้อ(ท)ย(ี)ู(่)่(p)ท(ช)ี้อยู่pชี้อยู่ที่ไหนก็เอาtailนั่นล่ะมาชี้นะคะเราก็จะได้แล้วว่าnodeสุดท้ายของlinkedlistนี้คือnodeข้อมูล5นะคะรู้ได้อย่างไรนี่ไงtailชี้อยู่จดโจทย์(ๆ)ไว้หน่อยนะคะมีกระดาษไหมเม(อ)ี(า)กระดาษขี(ึ)้นมาจดสไลดห(์)นะ่(ค)อ(ร)ย(ู)ใส่ไว้ที่classroomนะคะสามารถทบทวนได้โดยการเปิดclassroomนะคะในรายวิชานี้ครูอัปไฟล์ขึ้นไ(ใ)ว(ห)้หมดแล้(่)ว(ะ)คราวนี้ต่อแล้วถ้าครูต้องการลบบ้างเมื่อกี้ครูเพิ่มไปด้านหลังถ(ใ)ู(ช)ก(่)ไหมคะครูต้องการลบข้างหน้าบ้างก็คือลบข้อมูล10ลบ10นี้ออกมานะคะเอา10นี้ออกไปเมื่อเราลบ10ออกไปแล้วnodeแรกของlinkedlistตัวนี้คือ20ถูกไหมคะเมื่อลบ10ออกไปแล้วนี่nodeแรกคือ20เพราะฉะนั้นเเราจะทำอย่างไรเราก็แค่ย้ายheadนี่มาชี้ที่nodeถัดไปถูกไหมคะเมื่อheadชี้อยู่ที่ไหนnodeนั้นคือnodeแรกเราจะย้ายheadมาที่nodeถัดไปได้อย่างไรใช้คำสั่งอะไรดีให้headเลื่อนไปยังnodeถัดไปใh(ช)e(้)a(ค)d(ำ)เ(ส)ท(ั)่งอะไรคะhา(e)ก(a)ั(d)บ(=)ให้headนี่ไปชี้อยู่ที่20นั่นล่ะจะไปได้อย่างไรเอ่ยจะไป20ก็คือเดี๋ยวนะคะไปได้อย่างไรให้headถูกไหมคะไปชี้ที่head.nextชี้อยู่head.nextชี้อยู่ที่ไหน20ใช่ไหมคะhead.nextชี้อถ(ย)ู่ที่20เก(พ)ไ(ร)ห(า)ม(ะ)ค(ฉ)ะนั้นhead=head.nextheadจะเขยิบมาชี้ที่node20head=head.nextหมายความว่าให้เอาheadนี่ไปชี้อยู่ที่head.nextชี้อยู่เหมือนกันtail=pนะคะให้tailนี่ไปชี้อยู่ที่pชี้อยู่ตรงนี้เมื่อheadเลื่อนมาอยไ(ู)ป(่)ที่node20มันก็จะถูกลบไปโดยปริยายนะคะโดยอัตโนมัติโอ.เค.มีกระดาษไหมเอ่ยใครไม่มีกระดาษมาหยิบนะบางทีมันต้องจดนะคะแล้วก็เย็บไว้ด้วยนะคะทุกคนได้กระดาษไปแล้วนะคะครูมีlinkedlistมาให้นะคะ4nodeด้วยกันครูมีlinkedlist4nodeนะคะที่เชื่อมกันไปnodeที่1มี1nodeที่2ก็คือมีค่า2nodeที่3มีค่า3nodeที่4มีค่า4นะคะครูกำหนดheadกับtailไว้ให้ต้นlistอยู่ตรงไหนท้ายlistอยู่ที่ไหนนะคะลองทำแบบฝึกหัดให้ครูหน่อยข้อที่1ครูต้องการเพิ่มnodeใหม่เข้าไปที่ท้ายlistนะคะเพิ่มnodeใหม่เข้าไปที่ท้ายlistโดยที่nodeใหม่ท(ม)ี่(ต)q(ั)u(ว)e(ช)u(ี)e(้)คือque(ค)u(ิ)e(ว)ชี้อยู่ทำอย่างไรวาดรูปถูกไหมคะแล้วก็เอา5นี่ไปต่อด้านหลังแล้วเขียนคำสั่งของเส้นที่เราเชื่อมระหว่างโ(n)ห(o)น(d)ด(e)ข้อมูล4กับโ(n)ห(o)น(d)ด(e)ข้อมูล5ใช้คำสั่งอะไรในการเชื่อมเชื่อมเสร็จtailต้องอยู่ที่ไหนนะคะอันนี้คือข้อที่1ข้อที่2นะคะลบข้อมูลต้นlistลบข้อมูลต้นlistลบอย่างไหน(ร)ก็เลื่อนheadไปยังnodeถัดไปเท่านั้นเองก็วาดรูปใช่ไหมคะเราลบต้นlistออกแล้วheadจะไปชี้อยู่ที่ไหนเลื่อนheadด้วยคำสั่งอะไร2ข้อค่ะลองทำในกระดาษให้วาดรูปก่อนนะคะแล้วก็เขียนคำสั่งลอกโจทย์ไว้ก่อนนะคะลอกโจทย์รูปบนสุดข้อ1ครูให้ใช้คำสั่งอะไรข้อ1ลอกโจทย์ก่อนนะคะเสร็จแล้วเราก็ค่อยวาดรูปการเชื่อมแล้ก(ว)า(ก)ร(็)เขียนคำสั่งคราวนี้พอลอกโจทย์เสร็จใช่ไหมคะวาดรูปนี้เสร็จแล้วมาทำข้อที่1ลอกโจทย์ไว้ก่อนเพิ่มnodeใหม่ที่ท้ายlistก็คือลอกโจทย์ไปก่อนแล้วก็มีnodeใหม่ใช่ไหมคะพอลอกโจทย์เสร็จแล้วเราก็มาวาดใช่ไหมคะnodeให้มันเชื่อมต่อกันเราก็เชื่อมnodeเห็นไหมคะเราก็เชื่อมnodeให้มันต่อกันคราวนี้เราก็ต้องเขียนคำสั่งถูกไหมคะการเชื่อมตรงนี้จะเขียนคำสั่งว่าอะไรคำสั่งแรกเขียนว่าอะไรแล้วก็คำสั่งที่2คำสั่งแรกเป็นอะไรคะเส้นเชื่อมคำสั่งที่2ก็คือเลื่อนtailถ้าใครเสร็จข้อที่1เสร็จแล้วนะคะมาดูข้อที่2ข้อที่2ครูใหเ(้)อ(ล)า(บ)ข้อมูลที่ต้นlistเราก็วาดรูปนะคะผลลัพธ์ที่ได้เป็นอย่างไรเป็นรูปนี้headมันมาได้อย่างไรheadมันขยับมาที่2ได้อย่างไรheadมันมาได้ต้องเขียนคำสั่งของการเลื่อนheadไปยังnodeถัดไปข้อ1นะคะจะต้องมีอยู่2คำสั่งคำสั่งที่1ก็คือเส้นเชื่อมใช่ไหมคะคำสั่งที่2ก็ต้องเลื่อนtailนะคะเพราะเราต้องข้างหลังน่ะnodeสุดท้ายมันคงไม่ใช่nodeเดิมแล้วก็ต้องเลื่อนtailไปที่ไหนในการเขียนคำสั่งนะคะต้องดูด้วยว่าจะทำคำสั่งไหนก่อนคำสั่งไหนหลังนะคะถ้าเขียนสลับความหมายก็จะเปลี่ยนทันทีนะคะเราต้องเชื่อมก่อนเราต้องเชื่อมก่อนนะคะแล้วค่อยเลื่อนtailเราต้องวาดเส้นนี้ก่อนนะคะต้องวาดเส้นที่เชื่อมก่อนงเชื่อมได้แล้วต(ค)่อยขยับtailนะคะมาดูพร้อมกันข้อ1ถูกไหมคะครูบอกว่าให้เพิ่มnodeใหม่ไปที่ท้ายlinkedlistเพิ่มnodeใหม่ไปที่ท้ายlinkedlistครูให้เขียนคำสั่งใช่ไหมคะครูให้เขียนคำสั่งเราจะเชื่อมระหว่างnode4กับnode5ได้อย่างไรข้อแรกก็คือต้องเชื่อมnode4กับ5ใช่ไหมจะใช้คำสั่งอะไรเรารู้ว่านี่เราจะเชื่อมnode4กับnode5เราจะสั่งให้คอมพิวเตอร์นี่เพ(ช)ิ(ื)่อมได้อย่างไรนะคะเราก็ลองทำก่อนก็คือเราก็ลากเส้นอยแ(่)บ(า)บ(ง)นี้ใช่ไหมเส้นนี้คือเส้นใหม่ที่เราจะต้องเชื่อมระหว่าง2nodeนี้นะคะเราจะเขียนคำสั่งเพื่อสร้างเส้นเชื่อมเส้นนี้นะคะเส้นนี้เราจะเขียนคำสั่งเพื่อสร้างเส้นเชื่อมเส้นนี้นะคะเราจะใช้คำสั่งอะไรอะไรnodeนี้มันออกมาจากnodeนี้nodeนี้มีอะไรชี้อยู่มีtailใช่ไหมคะนี่จะอ้างถึงโ(n)ห(o)น(d)ด(e)นี้ต้องหาตัวชี้ให้ได้nodeนี้มีtailชี้อยู่ถูกไหมคะเส้นเชื่อมที่เราสร้างออกไปออกจากส่วนที่ชื่อว่าnextนะคะเพราะฉะนั้นก็จะเป็นtail.nextแล้วให้เชื่อมไปที่ไหนเชื่อมไปที่qคือเชื่อมไปที่u(5)e(น)u(ี)e(่)แล้ว5อะไรชี้อยู่queueชี้อยู่ถูกไหมคะพอพูดถึงnextต้องหาตัวชี้ว่าจะชี้ไปที่ไหนพูดถึงdataดูข้อมูลข้างในnodeว่ามันคืออะไรนะคะเสร็จแล้วคำสั่งที่2เมื่อเราสร้างเส้นเชื่อมนี้แล้วโ(n)ห(o)น(d)ด(e)สุดท้ายคืออะไรคะคือ5ใช่ไหมเราจะเลื่อนtailมาที่5ได้อย่างไรก็คือtail=queueก็คือเอาtailนี่ไปชี้ที่queueชี้อยู่1ข้อจบถูกไหมคะนี่คือการเพิ่มโ(n)ห(o)น(d)ด(e)ใหม่tailชี้ที่queueเพราะฉะนั้นtailจะชี้อยู่ที่นี่ที่5นะคะและqueueก็ชี้อยู่ที่นี้เช่นกันเถ(ห)ู(็)ก(น)ไหมคะครูไม่เขียนข้างหน้านะครูยกส่วนปลายมาเลยtailจะชี้อยู่qu(ท)e(ี)u(่)e(q)ชี้อยู่คือชี้ที่เดียวกันนะคะคือชี้ที่node5จดเอาไว้ดูนะคะจดเอาไว้ดูเร็วมีใครสงสัยไหมคะอะไรชี้ไปไหนพยายามทำความเข้าใจนะคะเวลาเราเชื่อมโ(n)ห(o)น(d)ด(e)นี่เราก็ต้องรู้ว่าเส้นเชื่อมจุดแรกที่เราจะเชื่อมไปยังnจ(o)ุ(d)ด(e)ถัดไปนี่nodeนั้นนี่มีอะไรชี้อยู่แล้วเราลากออกไปนี่เราลากออกจากส่วนที่ชื่อว่าnextใช่ไหมคะมันก็เลยกลายเป็นtail.nextแล้วชี้ที่ไหนก็ชี้ไปที่นี่แล้วที่นี้(่)อะไรชี้อยู่queueมันก็เลยเป็นtail.next=queueครูเขียนภาษาไทยไว้ให้นะคะtail.next=queueก็คือให้ตัวชี้tailในส่วนnextชี้ไปที่queueชี้อยู่นะคะจะชี้หรือเชื่อมตรงนี้ก็ได้เชื่อมไปที่queueชี้อยู่ส่วนคำสั่งที่2tail=qก็คเ(ื)ท(อ)่(ใ)า(ห)ก(้)ั(t)บ(a)q(i)u(l)e(น)u(่)e(ะ)ชี้ไปที่queueชี้อยู่อันแรกเสร็จหรือยังครูเปลี่ยนได้ไหมเสร็จหรือยังคะเสร็จหรือยังคะเสร็จแล้วค่ะคราวนี้มาดูข้อที่2โจทย์บอกว่าให้ลบข้อมูลnodeแรกของlinkedlistก็คือลบโ(n)ห(o)น(d)ด(e)แรกใช่ไหมคะก็คือลบอันแรกนี่ลบข้อมูลตัวนี้ล-(บ)1ลบแล้วจะเป็นแบบไหนเป็นแบบนี้นะคะหลังจากลบหลังจากลบnodeแรกแล้วเราจะได้ผลลัพธ์ก็คือตามนี้ใช่ไหมคะแล้วเราจะลบnodeแรกออกไปได้อย่างไรก็บอกเขาว่าก็เลื่อนheaบ(d)ไปยังnodeถัดไปheadชี้อยู่ที่ไหนอันนั้นคือnodeแรกเพราะฉะนั้นเราจะลบโ(n)ห(o)น(d)ด(e)1นะคะheadจะต้องไปท(ช)ี่(้)อยู่ที่2ก็คือคำสั่งก็คือเลื่อนheadไปยังคำส(n)ั(o)่(d)ง(e)ถัดไปใช้คำสั่งว่าhead.head=head.nextหมายความว่าอะไรให้headนะคะให้headไปชี้ที่head.nextชี้อยู่head.nextชี้อยู่ที่2เพราะฉะนั้นเอาheadไปชี้ที่นี้(่)head=head.nextก็คือให้headนี่ไปชี้ที่head.nextชี้อยู่ซึ่งก็คือnodeถัดไปนะคะจดเอาไว้ดูนะคะโจทย์(ด)นะคะเดี๋ยวท้ายชั่วโมท(ง)ครูจะเช็กว่าใครจด2ข้อหรือทำ2ข้อนี้หรือเปล่าเดี๋ยวครูจะติ๊กคะแนนนะคะลอกใส่กระดาษไว้ดูนะคะเดี๋ยวก่อนเลิกนะครูจะดูนะคะว่าใครจดบ้างให้จดก่อนนะคะจะเข้าใจหรือยังไม่เข้าใจไม่เป็นไรจดเอาไว้ดูพอเราจดนะคะแล้วเราก็ต้องทบทวนนะคะค่อยๆดูนะคะว่าเขาเขียนคำสั่งอย่างไรเขาเชื่อมเส้นอย่างไรต้องกลับไปทบทวนนะคะไม่เข้าใจต้องถามเพื่อนจะมีเพื่อนส่วนหนึ่งพอเข้าใจอยู่นะคะเขียนคำสั่งได้ต้องไปถามนะคะต้องถามที่จดๆใส่กระดาษนะคะต้องเก็บเอาไว้ด้วยจดใส่ไหนนะคะเก็บเอาไว้เวลาสอบนะคะครูจะให้เปิดเอกสารวและตรวจเอกสารด้วยนะว่าเอาอะไรบ้างมาถ้าที่จดๆในห้องไม่ถือมานี่ไม่ได้นะคะจะเช็กว่าเอกสารครบไหมมีครบหรือเปล่านะคะไปเช็กกับเพื่อนนะคะเพื่อนมีอะไรเราต้องมีเสร็จไหมคะเสร็จหรือยังเสร็จหมดแล้วนะคือเดี๋ยวครูจะวาง...วางเอกสารไว้บนโต๊ะให้นะคะสามารถมาเอาบนโต๊ะหน้าห้องได้นะคะโอ.เค.ถ้าไม่จดไม่ทันนะคะมาถ่ายรูปที่หน้าห้องนะคะท้ายชั่วโมงทำไมเราต้องเรียนlinkedlistเมื่อกี้นะคะทำไมเราต้องทบทวนlinkedlistเพราะเราจะใช้โครงสต(ร)้างของlinkedlใ(i)ช(s)้(t)นะคะมาใช้ในการดำเนินการกับque(ค)u(ิ)e(ว)คราวนี้แล้วเราใช้คิวทำอะไq(ร)u(บ)e(้)u(า)e(ง)ยกตัวอย่างเช่นนะคะการที่เราส่งเอกสารไปprintที่เครื่องprintนะคะอย่างเช่นด้านหลังเรามีเครื่องป(พ)ริน้(ต)น(์)แค่เครื่องเดียวถูกไหมคะถ้าเราสามารถprintได้จากทุกๆเครื่องส่งไปที่เครื่องพิมพ์เครื่องนั้นะคะใครที่ส่งไปก่อนถูกไหมคะมันก็จะมีการเข้าคิวเรียงลำดับมาเรื่อยๆคนที่ส่งไปก่อนก็จะป(พ)ริน้(ต)น(์)ออกก่อนใช่ไหมคะคนที่ส่งไปที่หลังก็ต้องรอนะคะเหมือนเราloginน่ะเพื่อจองตั๋วอะไรสักอย่างหนึ่งนะคะใครเข้าก่อนก็จะได้จองก่อนนะคะคนเข้าที่หลังก็อาจจะตั๋วเต็มแบบนี้ก็จะไม่ได้จองนะคะอันนี้คือการประยุกต์ใช้คิq(ว)u(แ)e(ล)u(้)e(ว)การดำเนินการกับคิวนะคะเราใช้คำสั่งอะไรบ้างหรือทำอย่างไรในคิq(ว)u(น)e(ะ)u(ค)e(ะ)ก็จะเหมือนกับในstackเลยนะ(เ)ค(ร)ะ(า)ก(ต)็(้)จ(อ)ะ(ง)ใ(ค)ช(ิ)้(ด)คู่กันนะq(ค)u(ะ)e(ค)u(ิ)e(ว)เวลาเราเพิ่มข้อมูลลงไปในque(ค)u(ิ)e(ว)จะใช้คำสั่ง"endqueue"นะคะตัวนี้จะอ่านว่าเอน...เe(อ)n(น)d(-)e(ค)n(ิ)d(ว)q(ก)u(็)e(ค)u(ื)e(อ)การเพิ่มข้อมูลลงไปในque(ค)u(ิ)e(ว)ส่วนการลบque(ค)u(ิ)e(ว)หรือการดึงข้อมูลออกจากque(ค)u(ิ)e(ว)จะใช้คำสั่ง"dequeue"นะคะเพราะฉะนั้นในque(ค)u(ิ)e(ว)ถ้าเอาเข้าก็คือendqueueเอาออกคือdequeueนะคะเข้าคือendqueueออกคือdequeueเราต้องมีการเช็กตรวจสอบสถานะว่าque(ค)u(ิ)e(ว)ตอนนี้เรามีข้อมูลอยู่หรือเปล่าก็คือมีnodeอยู่ไหมถ้าque(ค)u(ิ)e(ว)ของเราไม่มีโ(n)ห(o)น(d)ด(e)อะไรอยู่เลยจะเรียกque(ค)u(ิ)e(ว)นั้นว่าเป็นคิวว่างนะคq(ะ)u(")e(ค)u(ิ)e(ว)ว่าง"คือไม่มีข้อมูลอยู่ในque(ค)u(ิ)e(ว)เลยเราจะเรียกว่าemptyนะคะemptyemptyก็คือ"ว่าง"ใช่ไหมภาษาอังกฤษถ้าเราอยากรู้ว่าข้อมูลตัวแรกสุดที่อยู่ในque(ค)u(ิ)e(ว)คือข้อมูลแรกที่อยู่ค(ะ)ื(ไ)อ(ร)ข้อมูลแรอ(ก)ะ(ส)ไ(ุ)ร(ด)คือข้อมูลที่จะถูกเอาออกเป็นตัวแรกนะคะเราจะใช้คำสั่ง"peek"เราจะเรียกคำสั่งนั้นว่า"pea(e)k"นะคะคราวนี้เรามาดูทีละตัวนะคะการเพิ่มข้อมูลการเพิ่มข้อมูลลงไปในคิวหรือที่เรียกว่าendqueueการเพิ่มข้อมูลใหม่การเพิ่มข้อมูลใหหม่เราจะเอาไปต่อท้ายสุดถูกไหมคะตามโครงสร้างของlinkedlistที่เราเรียนมาเพิ่มข้อมูลใหม่เอาไปต่อท้ายในlinkedlistนะคะถ้าเป็นque(ค)u(ิ)e(ว)ถูกไหมเพิ่มข้อมูลใหม่ถ(เ)้(อ)าเ(ไ)ป็นlinklistเพิ(ต)่ม(อ)ข(ท)้อมู(า)ล(ย)ใ(น)ห(ะ)ม(ค)่(ะ)ต่อด้านหลังคราวนี้ครูให้เวลาอ่านตรงขั้นตอนการเพิ่มข้อมูลใหม่อ่านของใครของมันสิคะ4-5บรรทัดตรงนี้นะคะตรงขั้นต(ี)อ(้)นตรงน(ะ)ี(ค)้(ะ)ตรงขั้นตอนตรงนี้อ่านต่างคนต่างอ่านเร็วอ่านก่อนนะคะอ่านแล้วดูรูปประกอบอ่านแล้วดูรูปประกอบด้วยนะคะครูให้เวลานาทีหนึ่งทุกคนรู้จักheadรู้จักtailแล้วนะคะอ่านหรือยังอ่านนะคะ5บรรทัดเสร็จหรือยังคะเสร็จแล้วนะคะขั้นตอนของการเพิ่มข้อมูลใหม่นะคะเขาก็บอกว่าขั้นแรกนี่กำหนดให้ตัวชี้headใช่ไหมคะheadจะชี้อยู่ที่ต้นnodeก็คือnodeแรกและtailนี่ชี้ที่โ(n)ห(o)น(d)ด(e)สุดท้ายนะคะอันนี้คือกำหนดให้headชี้อยู่ที่nodeแรกtailชี้ที่nodeสุดท้ายในการเพิ่มข้อมูลใหม่ต้องมีการตรวจสอบก่อนว่าในlinkedlistของเรานั้นมีnodeอยู่เดิมหรือไม่นะคะถ้าไม่มีnodeใดอยู่เลยแสดงว่าเรากำลังจะสร้างnodeใหม่ของque(ค)u(ิ)e(ว)นี้นะคะแต่ถ้ามีข้อมูลเดิมอยู่เราต้องเอาไปต่อข้างหลังนะคะในการตรวจสอบว่าเป็นnodeใหม่หรือเปล่าเราเช็กที่headใช่ไหมคะถ้าn(h)o(e)d(a)e(d)มีค่าเป็นnu(o)neแสดงว่าในlinkedlistเรามีnodeอยู่ไหมครูถามว่าถ้าn(h)o(e)d(a)e(d)เท่ากับnu(o)neแสดงว่าในlinkedlistของเรามีnodeอยู่ไหมไม่มีถูกไหมheadไม่ได้ชี้ที่ไหนเลยheadยังไม่รู้อยู่ตรงไหนเลยเพราะฉะนั้นมีnodeไหมไม่มีนะคะเหมือนรถไฟน(อ)ี(ย)่าน(ง)ะ(น)ค(ี)ะ(้)ถ้าไม่มีหัวโบกี้จะรู้ไหมว่าอันไหนคืออันแรกไม่รู้นะคะถ้าheadเท่ากับnoneแสดงว่าเป็u(น)nodeใหม่นี่ไงคะแสดงว่าเป็นnodeใหม่คือเช็กจากheadเว(ท)่ากับnoneหรือเปล่าถ้าเป็นโ(n)ห(o)น(d)ด(e)ใหม่เราก็ให้headและtailชี้ที่nodeใหม่เลยแต่แต่ถ้าไม่ใช้nodeใหม่นะคะแต่ถ้าไม่ใช่โ(n)ห(o)น(d)ด(e)ใหม่ให้เอาnodeที่เราจะใส่เพิ่มน่ะไปต่อด้านท้ายถ้า...พูดผิดค่ะถ้าไม่ใช่que(ค)u(ิ)e(ว)ว่างก็คือไม่มีnodeใดๆอยู่เลยนะคะถ้าไม่ใช่คิวว่างก็เอาไปต่อท้ายด้านหลังด้วยคำสั่งอะไรเมื่อกี้ทำไปแล้วน่ะอันนี้คือlinkedlistอันนี้คือnodeใหม่จะเชื่อมด้วยคำสั่งใหม(อ)่(ะ)น(ไ)ะ(ร)คะtail.อะไร(.)อะไร.nextเท่ากับอะไรจะเชื่อมตัวนี้มาที่นี้(่)ก็คือใช่(้)tail.next=new_dataทำไมเท่ากั้บnew_dataก็เพราะมันมีตัวชี้ชื่อนี้ใช่ไหมถ้าอันนี้ชื่ออะไรก็เปลี่ยนไปนะคะโอ.เค.ไหมงงไหมคะไม่งงถ้าครูถามต่อถ้าเป็นกรณีแรกคือเป็นque(ค)u(ิ)e(ว)ว่างไม่มีnodeอะ(ใ)ไ(ด)ร(ๆ)เลยถ้าครูมีnodeใหม่ครูมีตัวชี้ก็คือตัวpมีค่าเป็น10ตอนนี้linkedlistไม่มีข้อมูลอะ(ใ)ไ(ด)ร(ๆ)เลยเราต้องให้ตัวชี้ชี้อยู่ที่ไหนชี้ที่nodeใหม่คือชี้ที่นี่ถ(ใ)ู(ช)ก(่)ไหมคะแล้วก็ให้อะไรชี้อยู่ที่นี่ด้วยtailใช่ไหมคะจะใช้คำสั่งอะไรhead=pใช่ไหมhead=pหมายความว่าเอาheadไปชี้ที่pชี้อยู่tailก็เช่นเดียวกันก็คือtail=pถูกไหมคะกรณีlinkedlistนั้นไม่มีข้อมูลอยู่เลยเป็นคิวว่างเวลาเราสร้างนะคะหรือเชื่อมnodeใหม่เข้าไปในlinkedlistเราก็ต้องกำหนดให้headและtailชี้ที่nodeใหม่ด้วยคำสั่งนี้จากที่เราพูดกันเมื่อกี้นะคะจากขั้นตอนตรงนี้เราแปลงให้เป็นคำสั่งได้ดังนี้นะคะนะคะฟังก์ชันของendqueueเห็นไหมคะอันดับแรกเราก็ต้องมีการสร้างnodeก่อนสร้างnodeก็คือสร้างสี่เหลี่ยมตัวนี้ถูกไหมคะแล้วก็ใส่ข้อมูลเข้าไปแล้วก็มีตัวชี้ชื่ออะไรnew_dataถูกไหมคะเรากำหนดให้ตัวชี้คือnew_dataสมมุติครูกำหนดให้dataตรงนี้คือ10นะคะนี่คำสั่งแรกก็คือสร้างnodeสี่เหลี่ยมตัวนี้ขึ้นมาเสร็จแล้วก่อนจะเชื่อมเข้าไปที(ใ)่(น)linkedlistเช็กก่อนว่ามันมีnodeเดิมอยู่หรือเปล่านะคะเป็นคิวว่างไหมก็คือเช็กว่าheadisnu(o)l(n)l(e)หรือเปล่าถ้าheadisnu(o)neก็คือเป็นคิวว่างนะคะเราก็ให้headชี้ที่nodeใหม่แล้วก็ให้tailชี้ที่nodeใหม่เช่นกันเราสามารถเขียนคำสั่งตรงนี้ได้อีกแบบก็คือtail=new_dataหรือtail=headได้เหมือนกันนะคะถ้ากรณีเดิมที่มันมีnodeอยู่แล้วเราก็เชื่อมถูกไหมคะตรงนี้เราก็เชื่อมไปที่nodeสุดท้ายแล้วเราก็เลื่อนtailไปยังโ(n)ห(o)น(d)ด(e)สุดท้ายนะคะเลื่อนtailไปยังnodeสุดท้ายโอ.เค.นะคะอันนนี้คือการเพิ่มข้อมูลลงไปในque(ค)u(ิ)e(ว)เอาออกบ้างเอาออกหรือว่าลบข้อมูเวลาเ(อ)อา(ก)อ(จ)อ(า)กนะ(ค)ค(ิ)ะ(ว)เวลาเอาออกเอาด้านหน้าออกนะคะลบด้านหน้าออกดูขั้นตอนมี3ขั้นตอนอ่านก่อนค่ะมีอยู่3ขั้นตอนมีอยู่3ขั้นตอนนี้อ่านให้ครูหน่อยขั้นตอนของการดึงข้อมูลออกจากคิวนะคะเขาก็บq(อ)u(ก)e(ว)u(่)e(า)เราก็ดึงข้อมูลออกมาจากโ(n)ห(o)น(d)ด(e)แรกจะได้รู้ว่าข้อมูลที่ลบหรือข้อมูลที่ดึงออกมานั้นนี่มันเป็นข้อมูลอะไรนะคะเผื่อเราจะเอาไปใช้ต่อหรือเอาไปทำอะไรต่อนะคะเราดึงออกมาแล้วแล้วเราก็เก็บเอาไว้ในตัวแปรที่เราสร้างขึ้นนะคะพอเรารู้แล้วล่ะว่าค่าที่จะเอาออกคือค่าอะไรเราก็เลื่อนheadไปยังnodeถัดไปนะคะขั้นที่2เลื่อนheadไปยังโ(n)ห(o)น(d)ด(e)ถัดไปพอเราเลื่อนheadไปยังโ(n)ห(o)น(d)ด(e)ถัดไปนะคะกรณีที่ถ้าheadไม่ได้ชี้อยู่ที่ไหนเลยนั่นหมายความว่าnodeที่เราลบคือnodeสุดท้ายที่อยู่ในque(ค)u(ิ)e(ว)โ(n)ห(o)น(d)ด(e)ที่เราลบนะคะก็คือnodeสุดท้ายที่อยู่ในคิวเพราะฉะนั้นเมื่อq(เ)u(ร)e(า)u(ล)e(บ)nodeนั้นไปแล้วheadจะต้องชี้อยู่ที่nu(o)l(n)l(e)เมื่อheadชี้อยู่ที่nu(o)l(n)l(e)แล้วtailก็ต้องชี้อยู่ที่nu(o)neด้วยเพราะไม่มีnodeใดๆเลน(ย)อยู่ในคิq(ว)u(น)e(ะ)u(ค)e(ะ)เวลาเราลบเราลบอย่างไรเราใช้สั่งก็คือdelqueueแล้วก็สร้างฟังก์ชันที่ชื่อว่าdequeueนะคะคำสั่งแรกดึงข้อมูลออกมาและไอป(้)ที่headท(ช)ี่(้)อยู่ที่เรากำลังจะลบนั้นน่ะเราเก็บค่าหน่อยว่ามันมีค่าอะไรnodeที่เรากำลังจะลบน่ะมันเก็บค่าอะไรนะคะเราก็เก็บข้อมูลแล้วเอาไ(ม)ป(า)ใส่ในตัวแปรที่ชื่อว่าdataคือเอาขวาเอาผลลัพธ์จากขวามน(า)ะ(ใ)ค(ส)ะ(่)ตัวแปรด้านซ้ายนะคะจากนั้นให้เลื่อนheadไปยังnodeถัดไปก็คือhead=head.nextตรวจสอบหน่อยว่าตอนนี้ไม่มีอะไรอยู่ในlinkedlistเลยก็คือheadเป็นnoneหรือเปล่ย(า)ถ้าheadเป็นnu(o)l(n)l(e)แล้วก็กำหนดให้tailมีค่าเป็นnu(o)l(n)l(e)ด้วยคราวนี้ในการตรวจสอบว่าเป็นque(ค)u(ิ)e(ว)ว่างหรือเปล่านะคะคำว่าqu(")e(ค)u(ิ)e(ว)ว่าง"คแ(ื)ป(อ)ล(อ)ว(ะ)่(ไ)า(ร)ไม่มีข้อมูลอะไรเลยอยู่ในq(ค)u(ิ)e(ว)u(ค)e(ิ)q(ว)u(ว)e(่)u(า)e(ง)ก็คือไม่มีข้อมูลอะไรเลยที่อยู่ในque(ค)u(ิ)e(ว)นะคะจะตรวจสอบได้อย่างไรว่าเป็นคิวว่างหรือเปล่าก็เช็กว่าhead=nu(o)l(n)l(e)หรือเปล่าถ้าhead=noneแสดงว่าเป็นque(ค)u(ิ)e(ว)ว่างต่อนะคะการตรวจสอบข้อมูลแรกสุดที่อยู่ในคิวก็คือข้อมูลที่อยู่ตq(้)u(น)e(ค)u(ิ)e(ว)นั่นล่ะอยากรู้ว่าข้อมูลแรกที่อยู่q(ใ)u(น)e(ค)u(ิ)e(ว)คืออะไรเราก็เช็กแค่ว่าhhead.dataถูกไหมคะhead.dataคืออะไรก็เหมือนที่ครูถามตอนแรกช่วงต้นๆนะคะhead.dataก็คือข้อมูลแรกที่อยู่ในqueue(ค)q(ิ)u(ว)e(ค)u(ิ)e(ว)เวลาข้อมูลเข้ามห(า)ใหม่จะอยู่ด้านหน้าหรืออยู่ด้านหลังค่ะด้านหน้าหรือด้านหลังด้านหลังเวลาเอาข้อมูลออกจากque(ค)u(ิ)e(ว)เอาข้อมูลออกจากด้านหน้าหรือด้านหลังด้านหน้านะคะดูให้ดีๆอันไหนคือด้านหน้าด้านหลังมีกระดาษเพิ่มอยู่ใช่ไหมคะครูมีโจทย์อยู่3ข้อทำเหมือนเดิมเลยข้อแรกครูมีlinkedlistมาให้นะคะครูกำหนดheadกับtailให้ด้วยข้อ1ครูบอกว่าเพิ่มnodeใหม่ที่ตัวชี้โ(n)ห(o)น(d)ด(e)1ชี้อยู่เพิ่มโ(n)ห(o)น(d)ด(e)นี้ข้อแรกเพิ่มnode1ไปต่อด้านหลังวาดรูปอย่างไรแล้วใช้คำสั่งอะไรข้อ2เพิ่มไปแล้วลบออกบ้างลบข้างหน้าใช่ไหมคะถัดมาข้อ3เพิ่มตัวชี้node2นี่nodeที่มีตัวชี้node2นี่ลงไปในque(ค)u(ิ)e(ว)linkedlistคำสั่งครูบอกหมดแล้วใช่ไหมคะเหมือนในแบบฝึกหัดแรกที่ครูให้ทำและเฉลยให้ด้วยเลียนแบบนะคะเลียนแบบทำความเข้าใจว่าทำอย่างไรในแบบฝึกหัดที่ครูให้นี้ดูจากเฉลยอันเก่าแล้วลองทำอันใหม่ดูว่าจะทำได้ไหมนะคะครูเพิ่มข้อมูลใหม่ในque(ค)u(ิ)e(ว)ก็ต้องไปเพิ่มด้านหลังครูลบข้อมูลออกจากque(ค)u(ิ)e(ว)ก็ต้องลบข้างหน้าครูไม่บอกว่าไปต่อท้ายอะไรลบข้อมูลตัวไหนออกแต่ทุกคนต้องเข้าใจว่าque(ค)u(ิ)e(ว)นี้เวลาเราเพิ่มเพิ่มด้านหลังเวลาเราลบลบข้างหน้านะคะลงมือทำ3ข้อโจทย์คราวที่แล้วใครยังลอกไม่เสร็จมาถ่ายรูปเอาข้างหน้านะคะแล้วเอาไปดูทำลงกระดาษลงสมุดนะคะคราข(ว)้(น)อ(ี)3(้)นะคะดูนิดหนึ่งข้อ3นะคะข้อ3จะใช้รูปข้างบนหรือจะใช้รูปต่อจากข้อ1คำสั่งไม่แตกต่างกันเลยนะคะเพราะเราเชื่อมต่อจากtailเพราะฉะนั้นถ้าtailคุณจะชี้อยู่ที่ไหนก็ได้ถูกไหมคะจะใช้รูปข้างบนก็ได้หรือจะใช้ต่อจากรูปข้อ1ก็ได้เลือกเอาอใครเสร็จแล้วเขียนชื่อส่งนะคะใครทำเสร็จแล้วนะคะเอามาส่งครูรวมถึงแบบฝึกหัดก่อนหน้าที่ทำในห้องด้วยนะคะถือมาด้วยเวลาเขียนคำสั่งนะnextnextสะกดให้ถูกn-e-x-tนะคะตัวnเดี๋ยวนะคะเดี๋ยวครูจะเช็กชื่อแล้วก็ปล่อยแล้วก็เอางานมาส่งหน้าห้องนะคะ[[สิ้นสุดการถอดความ]
Public file