circular-stack: a, capacity count = 0 top = 0 circular-stack(capacity): capacity = capacity a = new [capacity] push(x): a[top] = x top = wrapIndex(top +1, capacity) if count < capacity: count++ x pop(): if isempty(): throw top = wrapIndex(top -1, capacity) count-- return a[top] x peek(): if isempty(): throw return a[wrapIndex(top -1, capacity)] isempty(): return count == 0 count(): return count clear(): top = count = 0 foreach(): tos = top for i = 0, i < count, i++: tos = wrapIndex(tos -1, capacity) yield a[tos] wrapIndex(i, n): index = i %n if index < 0: index += n return index
[Hat tip to 2048]
No comments:
Post a Comment