วิธีการใช้คิวลูปโดยใช้ Java:
1. เพิ่มขนาดแอตทริบิวต์เพื่อบันทึกจำนวนองค์ประกอบในปัจจุบัน
จุดประสงค์คือเมื่อหัว = ด้านหลัง โดยขนาด = 0 หรือขนาด = ความยาวอาร์เรย์ เพื่อแยกความแตกต่างของคิวว่าว่างเปล่าหรือคิวเต็ม
2. เฉพาะองค์ประกอบอาร์เรย์ -1 เท่านั้นที่เก็บไว้ในอาร์เรย์เพื่อให้แน่ใจว่าด้านหลังจะไม่เท่ากับหัวหลังจากหันไปรอบ ๆ นั่นคือเมื่อคิวเต็ม ด้านหลัง+1 = หัวมีเพียงองค์ประกอบเดียวที่อยู่ตรงกลาง
เมื่อด้านหลัง = หัว คิวจะต้องว่างเปล่า
ประเภทของการดำเนินการที่ตกลงกันที่ปลายทั้งสองของคิวแตกต่างกัน:
จุดสิ้นสุดที่สามารถลบได้เรียกว่าหัวหน้าทีมและการดำเนินการดังกล่าวเรียกอีกอย่างว่า Dequeue;
จุดสิ้นสุดที่สามารถแทรกได้เรียกว่าหางของทีมและการดำเนินการดังกล่าวเรียกอีกอย่างว่า enqueue
แผนผังไดอะแกรมของคิว
เมื่อดำเนินการคิวคุณควรให้ความสนใจกับปรากฏการณ์ล้นเท็จ ดังที่แสดงในภาพสุดท้ายด้านบน
ล้นปลอมตามที่เห็นในรูป
วิธีแก้ปัญหา: ใช้ที่เก็บโซ่ซึ่งเห็นได้ชัดว่าสามารถ เมื่อจัดเก็บตามลำดับ ทางออกทั่วไปของเราคือการเชื่อมต่อไปยังจุดสิ้นสุดและสร้างคิววงกลม สิ่งนี้ทำให้ใช้พื้นที่จัดเก็บของคิวอย่างเต็มที่
แผนภาพคิวลูป:
ในภาพด้านบน ชี้ไปที่องค์ประกอบแรกในคิว คะแนนด้านหลังไปยังตำแหน่งถัดไปที่ส่วนท้ายของคิว
แต่ยังมีปัญหา: เมื่อด้านหน้าและด้านหลังไปยังตำแหน่งเดียวกันนี่หมายความว่าทีมว่างเปล่าหรือเต็ม? คุณสามารถจินตนาการถึงสถานการณ์เช่นนี้
แนวทางปฏิบัติทั่วไปในการแก้ปัญหานี้คือ:
เครื่องหมายถูกใช้เพื่อแยกแยะสถานการณ์ที่สับสนเช่นนี้
เสียสละพื้นที่องค์ประกอบ เมื่อด้านหน้าและด้านหลังเท่ากันพวกเขาจะว่างเปล่า เมื่อตำแหน่งถัดไปของด้านหลังอยู่ด้านหน้า เต็ม
ตัวอย่างเช่นรูปต่อไปนี้:
ด้านล่างเราให้คิวลูปและใช้วิธีอื่นนั่นคือการเสียสละพื้นที่องค์ประกอบเพื่อแยกความแตกต่างระหว่างทีมที่ว่างเปล่าและเต็มทีม
ประเด็นสำคัญหลายประการ:
1. ชี้ไปที่หัวของทีม คะแนนด้านหลังไปยังตำแหน่งถัดไปในตอนท้ายของทีม
2. การอนุมานว่าทีมว่างเปล่า: ด้านหน้า == ด้านหลัง; การอนุมานว่าทีมเต็ม: (หลัง+1)%maxsize == ด้านหน้า
นำเข้า Java.io.*; ระดับสาธารณะ queuearray {Object [] a; // อาร์เรย์วัตถุคิวเก็บไว้ที่ A.Length-1 วัตถุด้านหน้า; // จากด้านหลัง int ตัวห้อยแรก; // จาก queueArray สาธารณะ () {this (10); // เรียกตัวสร้างอื่น} queueArray สาธารณะ (ขนาด int) {a = วัตถุใหม่ [ขนาด]; ด้านหน้า = 0; ด้านหลัง = 0; } / *** ผนวกวัตถุไปยังจุดสิ้นสุดของคิว* @param obj object* @return return false เมื่อคิวเต็มมิฉะนั้นจริง* / public boolean enqueue (Object obj) {ถ้า (ด้านหลัง+1)%a.length == ด้านหน้า) {return false; } a [ด้านหลัง] = obj; ด้านหลัง = (ด้านหลัง+1)%A. ความยาว; กลับมาจริง; } / *** วัตถุแรกในหัวของคิวจะถูก dequeued* @return วัตถุ dequeued เมื่อคิวว่างเปล่า* / วัตถุสาธารณะ dequeue () {ถ้า (ด้านหลัง == ด้านหน้า) {return null; } Object OBJ = A [ด้านหน้า]; ด้านหน้า = (ด้านหน้า+1)%A. ความยาว; คืน OBJ; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {queuearray q = queuearray ใหม่ (4); System.out.println (q.enqueue ("Zhang San")); System.out.println (q.enqueue ("Li Si")); System.out.println (q.enqueue ("zhao wu")); System.out.println (q.enqueue ("Wang Yi")); // ไม่สามารถป้อนคิวคิวเต็มสำหรับ (int i = 0; i <4; i ++) {system.out.println (q.dequeue ()); -บทสรุปข้างต้นของสองวิธีในการใช้คิวแบบวงกลมตามอาร์เรย์ Java คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น