สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial DATA STRUCTURE

01 1การเรียงลำดับ(Sorting) 01 2 การเรียงลำดับ2 01 Sorting1 01 Sorting2 02 ArrayList 02 อาร์เรย์ลิสต์ (Array List) 03 LinkedList 03 ลิงค์ลิสต์ (Linked List) 04 Stack 04 สแต๊ค 05 1 คิวและไพออริตี้คิว 05 2 คิวและไพออริตี้คิว 05 Queue and PriorityQueue1 05 Queue and PriorityQueue2 06 1 BinaryTree 06 1 ไบนารีทรี 06 2 BinarySearchTree 06 2 ไบนารีเสิร์ชทรี 06 3 BinarySearchTree 06 3 ไบนารีเสิร์ชทรี 08 Hash 08 แฮช 09 Graph 09 กราฟ

Priority Queue(ต่อ)

void enqueue(ชนิดตัวแปร ชื่อตัวแปร)

            การเพิ่มข้อมูลลงในฮีปจะแตกต่างจากคิวตรงที่ การเอาข้อมูลใส่ในคิวข้อมูลก็สามารถต่อท้ายข้อมูลล่าสุดในคิวได้เลย แต่สำหรับฮีปแม้จะใส่ข้อมูลลงไปท้ายสุดแต่ต้องตรวจสอบด้วยว่าข้อมูลนั้นมากกว่าโหนดพ่อหรือไม่ ถ้ามากกว่าให้สลับตำแหน่งกับโหนดพ่อ ให้โหนดพ่อมาเป็นลูกแทน

 

รูป 5-7

            จากรูปเพิ่ม 80 เข้าไปที่ท้ายสุดของฮีป (ฮีปไล่ข้อมูลจากซ้ายไปขวา) โหนดพ่อตอนนี้เป็น 9 สลับเพราะมีค่ามากกว่าจากนั้นจะได้พ่อเป็นโหนดรากซึ่งมีค่าเท่ากับ 55 สลับ เมื่อเป็นรากย่อมมากสุดแล้ว จบการเพิ่มข้อมูล

 

รูป 5-8

บรรทัดที่ 45 : สร้างเมท็อด enqueue สำหรับเพิ่มข้อมูลลงในฮีป

บรรทัดที่ 47 : เพิ่มข้อมูลลงในช่องที่ size หรือช่องสุดท้าย

บรรทัดที่ 48 : เมื่อข้อมูลแล้วก็เพิ่มขนาดของ size ด้วย

บรรทัดที่ 49 : สร้างตัวแปร n แทนตำแหน่งสุดท้ายของอาร์เรย์

บรรทัดที่ 50 : สร้างตัว p เก็บค่าว่าโหนดพ่อของตำแหน่งสุดท้าย(ข้อมูลที่เพิ่งเพิ่มลงไป)คือโหนดตำแหน่งอะไร

บรรทัดที่ 51 : ตอนวนลูปให้ดูว่า n ยังมากกว่า 0(ข้อมูลช่องแรกหรือเปล่า) และดูว่าเมื่อเทียบ p(โหนดพ่อ) กับ x(ข้อมูลที่เพิ่งเพิ่มลงไป)  ว่าตัวไหนมีค่ามากกว่ากัน

            เมท็อด compare ของ Comparator  ถ้าได้ค่าน้อยกว่า 0 แสดงว่า ข้อมูลพ่อ data[p] น้อยกว่า x  

บรรทัดที่ 53 : ถ้าวนลูปยังไม่ลดเลยขนาดของรากและพบว่าโหนดพ่อน้อยกว่าโหนดลูกให้สลับกัน

บรรทัดที่ 54 : เอาตำแหน่งของ p เป็นไปตำแหน่งของ n

บรรทัดที่ 55 : หาตำแหน่ง p ใหม่ แล้วเทียบไปเรื่อยๆจบสลับไม่ได้ออกจากลูป

 

ชื่อตัวแปร dequeue()

            เมท็อดสำหรับลบข้อมูลออกจากฮีป การลบข้อมูลออกจาก max heap จะลบข้อมูลที่ช่อง 0 ออกเพราะเป็นข้อมูลที่สำคัญที่สุด แต่เมื่อลบข้อมูลต้องเปลี่ยนโครงสร้างของฮีปโดยให้ข้อมูลช่องสุดท้ายมาแทนช่องแรก จากนั้นหาว่าระหว่างลูกทางซ้ายกับลูกทางขวาข้างไหนมีค่ามากกว่ากัน ให้เลือกข้างที่มากกว่าแล้วสลับตำแหน่งกับราก จากนั้นให้เทียบซ้ายขวาอีกรอบแล้วทำการสลับ

 

รูป5-9

            ต้องการลบ 25 ออกจากฮีป เอาขอมูลช่องสุดท้ายซึ่งก็คือ 1 มาแทน จากการเทียบลูกซ้ายขวาของราก ซึ่งตอนนี้เป็น 1 พบว่า 12 มากกว่า 8 จึงให้ 1 สลับกัน 12 จากนั้น 1 มีลูกสองข้าง แต่ 9 มากกว่า 3 จึงให้ 1 สลับกับ 9 ที่ต้องเทียบตัวมากกว่าขึ้นมาเพราะพอมันขึ้นมาแล้วตัวฝั่งที่น้อยกว่าก็จะยังคงน้อยกว่าอยู่ดี

 

รูป5-10

บรรทัดที่ 59 : สร้างเมท็อด dequeue()

บรรทัดที่ 61 : สร้างตัวแปร t เก็บข้อมูลช่องแรก

บรรทัดที่ 62 : ลบขนาดของ size ลง

บรรทัดที่ 63 : ให้ n เท่ากับข้อมูลช่องที่ size

บรรทัดที่ 64 : หลังจากนั้นเอาข้อมูลช่องที่ size ไปแทนข้อมูลช่องแรก

บรรทัดที่ 65 : เปลี่ยน n เป็นเลข 0 เพราะกลายเป็นช่องแรกไปแล้ว

บรรทัดที่ 67 : สร้างลูป true ไว้ก่อนค่อยไป break เอา

บรรทัดที่ 68: สร้างตัวแปร l หาลูกทางซ้ายของ n

บรรทัดที่ 69: สร้างตัวแปร r หาลูกทางขวาของ n

 

 

รูป 5-11

บรรทัดที่ 76: สร้างตัวแปร k

บรรทัดที่ 77-78: เปรียบเทียบข้อมูลโหนดลูกซ้ายขวา ถ้าซ้ายมากกว่าขวา เอาซ้ายไปเก็บใน k

บรรทัดที่ 79-80 : ถ้าขวามากกว่าขวา เอาขวาไปเก็บใน k

บรรทัดที่ 83-84: เมื่อได้ข้อมูลข้างที่มากกว่ากันระหว่างลูกซ้ายและลูกขวาแล้ว เอาข้างที่มากกว่าไปเทียบกับข้อมูลราก ถ้าข้อมูลลูกฝั่งนั้นมากกว่า ให้สลับตำแหน่งกัน

บรรทัดที่ 85: ให้รากเปลี่ยนเป็นเลขตำแหน่งของตัวทีสลับเมื่อกี้

บรรทัดที่ 86-87: ถ้าสลับหมดแล้วก็ break

บรรทัดที่ 92-93: ถ้าลูกซ้ายมากกว่ารากก็สลับตำแหน่งกัน

 

ชื่อตัวแปร peek()

            Peek เป็นการดูข้อมูลตัวที่สำคัญที่สุด ก็ให้ดูข้อมูลช่องที่ศูนย์เลย

 

รูป5-12



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา