Heim > Web-Frontend > js-Tutorial > Hauptteil

Implementieren Sie einen kreisförmigen Warteschlangenringpuffer in JavaScript

王林
Freigeben: 2023-08-22 17:57:08
nach vorne
827 Leute haben es durchsucht

Implementieren Sie einen kreisförmigen Warteschlangenringpuffer in JavaScript

Circular Queue

Circular Queue ist eine lineare Datenstruktur, ihre Funktionsweise basiert auf dem FIFO-Prinzip (First In, First Out), und die letzte Position ist wieder mit der ersten Position verbunden und bildet eine Schleife. Er wird auch „Ringpuffer“ genannt.

Ein Vorteil einer kreisförmigen Warteschlange besteht darin, dass wir den Platz vor der Warteschlange nutzen können. Wenn in einer normalen Warteschlange die Warteschlange voll ist, können wir das nächste Element nicht einfügen, selbst wenn vor der Warteschlange Platz vorhanden ist. Mithilfe einer zirkulären Warteschlange können wir jedoch Speicherplatz zum Speichern neuer Werte nutzen.

Frage

Wir müssen die Implementierung einer zirkulären Warteschlange in JavaScript entwerfen, um die folgenden Operationen zu unterstützen:

  • MyCircularQueue(k) – Konstruktor, legen Sie die Größe der Warteschlange auf k fest.

  • Front() – Ruft das vordere Element aus der Warteschlange ab. Wenn die Warteschlange leer ist, wird -1 zurückgegeben.

  • Rear() – Ruft das letzte Element aus der Warteschlange ab. Wenn die Warteschlange leer ist, wird -1 zurückgegeben.

  • enQueue(value) – Ein Element in eine kreisförmige Warteschlange einfügen. Gibt true zurück, wenn der Vorgang erfolgreich ist.

  • deQueue() – Entfernt ein Element aus einer kreisförmigen Warteschlange. Gibt true zurück, wenn der Vorgang erfolgreich ist.

  • isEmpty() – Prüft, ob die Ringwarteschlange leer ist.

  • isFull() – Überprüfen Sie, ob die Ringwarteschlange voll ist.

Beispiel

Hier ist der Code -

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());
Nach dem Login kopieren

Ausgabe

true
true
false
2
true
true
true
3
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonImplementieren Sie einen kreisförmigen Warteschlangenringpuffer in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!