10分間LTLに投稿なし……
もしかしてぼ民絶滅した?
:: Deque {
@init() {
return {len: 0, offset: 0, data: []}
}
@at(q, i) {
var ind = i+q.offset
if (ind>=q.data.len) {ind-=q.data.len}
return q.data[ind]
}
@push_back(q, v) {
if (q.data.len==0) {
q.len = 1
q.data = [v]
return null
} elif (q.len==q.data.len) {
var tmp = []
var ind = q.offset
for (q.len) {
tmp.push(q.data[ind])
ind += 1
if (ind==q.data.len) {ind-=q.data.len}
}
tmp.push(v)
for (q.len-1) {tmp.push(null)}
q.len += 1
q.offset = 0
q.data = tmp
return null
} else {
var ind = q.len+q.offset
if (ind>=q.data.len) {ind-=q.data.len}
q.len += 1
q.data[ind] = v
return null
}
}
@pop_back(q) {
q.len -= 1
var ind = q.len+q.offset
if (ind>=q.data.len) {ind-=q.data.len}
return q.data[ind]
}
@push_front(q, v) {
if (q.data.len==0) {
q.len = 1
q.data = [v]
return null
} elif (q.len==q.data.len) {
var tmp = []
var ind = q.offset
tmp.push(v)
for (q.len) {
tmp.push(q.data[ind])
ind += 1
if (ind==q.data.len) {ind-=q.data.len}
}
for (q.len-1) {tmp.push(null)}
q.len += 1
q.offset = 0
q.data = tmp
return null
} else {
if (q.offset==0) {q.offset=q.data.len}
q.offset -= 1
q.len += 1
q.data[q.offset] = v
return null
}
}
@pop_front(q) {
q.len -= 1
let v = q.data[q.offset]
q.offset += 1
if (q.offset==q.data.len) {q.offset=0}
return v
}
}
let q = Deque:init()
Deque:push_back(q,3)
Deque:push_back(q,1)
Deque:push_front(q,4)
<:Deque:at(q,1)//3
<:Deque:pop_front(q) //4
<:Deque:pop_front(q) //3
Deque:push_front(q,5)
<:q.len //2
<:Deque:pop_back(q) //1
<:Deque:pop_back(q) //5