Baris Giliran ialah struktur data linear, operasinya berdasarkan prinsip FIFO (masuk dahulu, keluar dahulu) dan kedudukan terakhir disambungkan kembali ke kedudukan pertama, membentuk gelung. Ia juga dipanggil "penampan cincin".
Satu faedah giliran bulat ialah kita dapat memanfaatkan ruang di hadapan barisan. Dalam baris gilir biasa, apabila baris gilir menjadi penuh, kita tidak boleh memasukkan elemen seterusnya walaupun terdapat ruang di hadapan baris gilir. Tetapi menggunakan baris gilir bulat, kita boleh menggunakan ruang untuk menyimpan nilai baharu.
Kami perlu mereka bentuk pelaksanaan baris gilir pekeliling dalam JavaScript untuk menyokong operasi berikut:
MyCircularQueue(k) - Pembina, tetapkan saiz baris gilir kepada k.
Front() - Mendapat item hadapan daripada baris gilir. Jika baris gilir kosong, -1 dikembalikan.
Belakang() - Mendapat item terakhir daripada baris gilir. Jika baris gilir kosong, -1 dikembalikan.
enQueue(value) - Masukkan elemen ke dalam baris gilir bulat. Mengembalikan benar jika operasi berjaya.
deQueue() - Mengalih keluar elemen daripada baris gilir bulat. Mengembalikan benar jika operasi berjaya.
isEmpty() - Menyemak sama ada baris gilir pekeliling kosong.
isFull() - Menyemak sama ada baris gilir pekeliling penuh.
Ini kodnya -
Demo
const CircularQueue = function(k) { this.size = k this.queue = [] this.start1 = 0 this.end1 = 0 this.start2 = 0 this.end2 = 0 } CircularQueue.prototype.enQueue = function(value) { if(this.isFull()) { return false } if(this.end2 <= this.size - 1) { this.queue[this.end2++] = value } else { this.queue[this.end1++] = value } return true } CircularQueue.prototype.deQueue = function() { if(this.isEmpty()) { return false } if(this.queue[this.start2] !== undefined) { this.queue[this.start2++] = undefined } else { this.queue[this.start1++] = undefined } return true } CircularQueue.prototype.Front = function() { if(this.isEmpty()) { return -1 } return this.queue[this.start2] === undefined ? this.queue[this.start1] : this.queue[this.start2] } CircularQueue.prototype.Rear = function() { if(this.isEmpty()) { return -1 } return this.queue[this.end1 - 1] === undefined ? this.queue[this.end2 - 1] : this.queue[this.end1 - 1] } CircularQueue.prototype.isEmpty = function() { if(this.end2 - this.start2 + this.end1 - this.start1 <= 0) { return true } return false } CircularQueue.prototype.isFull = function() { if(this.end2 - this.start2 + this.end1 - this.start1 >= this.size) { return true } return false } const queue = new CircularQueue(2); console.log(queue.enQueue(1)); console.log(queue.enQueue(2)); console.log(queue.enQueue(3)); console.log(queue.Rear()); console.log(queue.isFull()); console.log(queue.deQueue()); console.log(queue.enQueue(3)); console.log(queue.Rear());
true true false 2 true true true 3
Atas ialah kandungan terperinci Laksanakan penimbal gelang baris gilir bulat dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!