62 lines
No EOL
1,007 B
Text
62 lines
No EOL
1,007 B
Text
#hidden
|
|
class Queue is Sequence{
|
|
data{_data}
|
|
count{_count}
|
|
|
|
construct new(){
|
|
_data = []
|
|
_count = 0
|
|
_head = -1
|
|
}
|
|
|
|
clear(){
|
|
_count = 0
|
|
_head = -1
|
|
}
|
|
|
|
enqueue(value){
|
|
_count = _count + 1
|
|
_head = _head + 1
|
|
if(_data.count >= _count){
|
|
if(_head >= _data.count){
|
|
_head = _head - _data.count
|
|
}
|
|
_data[_head] = value
|
|
} else {
|
|
_data.insert(_head, value)
|
|
}
|
|
return value
|
|
}
|
|
|
|
dequeue(){
|
|
if(_count == 0) return null
|
|
var res = peek()
|
|
_count = _count - 1
|
|
return res
|
|
}
|
|
|
|
peek(){
|
|
if(_count == 0) return null
|
|
var tail = _head - _count + 1
|
|
if(tail < 0) tail = _data.count + tail
|
|
return _data[tail]
|
|
}
|
|
|
|
empty(){_count == 0}
|
|
|
|
[index]{
|
|
index = _head - _count + 1 + index
|
|
if(index < 0) index = _data.count + index
|
|
return _data[index]
|
|
}
|
|
|
|
iterate(iter){
|
|
if(!iter) return _count > 0 ? 0 : false
|
|
if(iter >= _count - 1) return false
|
|
return iter + 1
|
|
}
|
|
|
|
iteratorValue(iter){
|
|
return this[iter]
|
|
}
|
|
} |