คิวลำดับความสำคัญ
หากเรากำหนดหมายเลขแต่ละองค์ประกอบให้ทำเครื่องหมายลำดับความสำคัญเราอาจทำให้ตัวเลขที่เล็กกว่ามีลำดับความสำคัญสูงกว่าเพื่อให้เราสามารถเข้าถึงองค์ประกอบลำดับความสำคัญสูงสุดในคอลเลกชันและการค้นหาและลบออก ด้วยวิธีนี้เราแนะนำโครงสร้างข้อมูลเช่นคิวลำดับความสำคัญ คิวลำดับความสำคัญคือคอลเลกชันขององค์ประกอบ 0 หรือมากกว่าแต่ละองค์ประกอบมีลำดับความสำคัญ การดำเนินการที่ดำเนินการในคิวลำดับความสำคัญรวมถึง (1) การค้นหา (2) แทรกองค์ประกอบใหม่ (3) การลบ โดยทั่วไปการดำเนินการค้นหาจะใช้เพื่อค้นหาองค์ประกอบที่มีลำดับความสำคัญมากที่สุดและการดำเนินการลบใช้เพื่อลบองค์ประกอบ สำหรับองค์ประกอบที่มีลำดับความสำคัญเท่ากันพวกเขาสามารถประมวลผลได้ในลำดับแรกในลำดับแรกหรือในลำดับความสำคัญใด ๆ
คิวการจำลองจาวาอาเรย์
คิวเป็นตารางเชิงเส้นพิเศษที่อนุญาตให้มีการลบที่ปลายด้านหน้าของตารางและแทรกการดำเนินการที่ส่วนท้ายของตาราง จุดสิ้นสุดที่ดำเนินการแทรกจะเรียกว่าหางของทีมและจุดสิ้นสุดที่ดำเนินการลบเรียกว่าหัวหน้าทีม นี่เป็นหลักการแรกในครั้งแรก (FIFO) ที่เรามักจะใช้ รายการใน Java สามารถใช้เป็นคิวได้ หากคุณเพิ่มองค์ประกอบในตอนท้ายของคิวให้ใช้วิธี list.add และหากคุณลบองค์ประกอบออกจากหัวของคิวให้ใช้รายการ remove method
Java Array Simulation ลำดับความสำคัญของโครงสร้างคิวตัวอย่าง:
แพ็คเกจข้อมูล นำเข้า Java.util.Arrays; นำเข้า Java.util.Comparator; / *** ใช้อาร์เรย์เพื่อจำลองโครงสร้างตารางเชิงเส้นแรกและออกแรกที่มีลำดับความสำคัญสูง* คล้ายกับ TreeSet และ Treemap โดยใช้ตัวเปรียบเทียบ*/ คลาสสาธารณะ SimulatePriorityQueue {โมฆะสาธารณะคงที่ (สตริง [] args) // simulatequeue queue = ใหม่ simulatequeue (); // system.out.println ("ดึงองค์ประกอบ:" + queue.remove ()); queue.insert (1); queue.insert (3); queue.insert (2); queue.insert (5); queue.insert (4); System.out.println ("ขนาด:" + queue.size ()); System.out.println ("peek:" + queue.peek ()); System.out.println ("นำองค์ประกอบ:" + queue.peek ()); System.out.println ("นำองค์ประกอบ:" + queue.remove ()); System.out.println ("นำองค์ประกอบ:" + queue.remove ()); System.out.println ("องค์ประกอบแยก:" + queue.remove ()); // system.out.println ("องค์ประกอบแยก:" + queue.remove ()); System.out.println ("ขนาด:" + queue.size ()); System.out.println (); } int ส่วนตัว msize = 3; // ขนาด INT ส่วนตัว [] Marray; // อาร์เรย์ private int mnextitem; // ตำแหน่งถัดไปยังถือได้ว่าเป็นจำนวนองค์ประกอบปัจจุบันของ Public SimulateGriorityQueue () {marray = new int [msize]; mnextItem = 0; } public simulatePriorityQueue (ขนาด int) {this.msize = size; marray = new int [msize]; mnextItem = 0; } / *** แทรกองค์ประกอบ* @param รายการ* / โมฆะสาธารณะแทรก (รายการ int) {ถ้า (! isfull ()) {marray [mnextitem ++] = รายการ; สำหรับ (int i = 0; i <mnextitem; i ++) {// bubblestone สำหรับ (int j = 0; j <mnextitem - 1; j ++) {ถ้า (marray [j]> marray [j + 1]) {marray [j] = marray [j + 1] + 0 * System.out.println (array.toString (marray)); }} system.out.println (array.toString (marray)); } else {system.out.println ("----------------"); }} / *** ลบองค์ประกอบแรกออกก่อน* @return* / public int ลบ () {ถ้า (! isempty ()) {return marray [-mnextitem]; } else {โยน ungloralargumentException ใหม่ ("ไม่สามารถนำองค์ประกอบออกมาได้"); }} / *** ตรวจสอบองค์ประกอบก่อนหน้า* @return* / public int peek () {return marray [mnextitem - 1]; } / *** ว่างเปล่า* @return* / บูลีนสาธารณะ isempty () {return mnextitem == 0; } / *** เต็ม* @return* / บูลีนสาธารณะ isfull () {return mnextitem == msize; } / ** * ขนาด * @return * / ขนาด int สาธารณะ () {return mnextitem; - ผลลัพธ์ผลลัพธ์:
[1, 0, 0, 0] [1, 3, 0, 0] [1, 2, 3, 0] [1, 2, 3, 0] [1, 2, 3, 5] ----------------------------------------------------------------------------------------------------------------------