- No, it's clear from problem description.
Input:
Output:
Input:
Output:
class MyCircularQueue(k: Int) {
private val arrays = IntArray(k)
private var front = 0
private var rear = -1
private var size = 0
fun enQueue(value: Int): Boolean {
if (isFull()) return false
rear = (rear + 1) % arrays.size
// Or we can rotate the pointer to the beginning
// rear++
// if (rear >= k) rear = 0
arrays[rear] = value
size++
return true
}
fun deQueue(): Boolean {
if (isEmpty()) return false
front = (front + 1) % arrays.size
// Or we can rotate the pointer
// front++
// if (front >= k) front = 0
size--
return true
}
fun Front(): Int {
if (isEmpty()) return -1
return arrays[front]
}
fun Rear(): Int {
if (isEmpty()) return -1
return arrays[rear]
}
fun isEmpty(): Boolean {
return size == 0
}
fun isFull(): Boolean {
return size == arrays.size
}
}
Or we can derive rear
from front
+ size
in static array so that we don't have to maintain rear
property:
class MyCircularQueue(k: Int) {
private val arrays = IntArray(k)
private var front = 0
private var size = 0
fun enQueue(value: Int): Boolean {
if (isFull()) return false
arrays[(front + size) % size] = value
size++
return true
}
fun deQueue(): Boolean {
if (isEmpty()) return false
front = (front + 1) % arrays.size
size--
return true
}
fun Front(): Int {
if (isEmpty()) return -1
return arrays[front]
}
fun Rear(): Int {
if (isEmpty()) return -1
return arrays[(front + size - 1) % size]
}
fun isEmpty(): Boolean {
return size == 0
}
fun isFull(): Boolean {
return size == arrays.size
}
}
- Call
Front()
orRear()
when queue is empty. - Call
enQueue()
when queue is full. - Call
deQueue()
when queue is empty.