class Containers::Stack

A Stack is a container that keeps elements in a last-in first-out (LIFO) order. There are many uses for stacks, including prefix-infix-postfix conversion and backtracking problems.

This implementation uses a doubly-linked list, guaranteeing O(1) complexity for all operations.

Public Class Methods

new(ary=[]) click to toggle source

Create a new stack. Takes an optional array argument to initialize the stack.

s = Containers::Stack.new([1, 2, 3])
s.pop #=> 3
s.pop #=> 2
   # File lib/containers/stack.rb
16 def initialize(ary=[])
17   @container = Containers::Deque.new(ary)
18 end

Public Instance Methods

<<(obj)
Alias for: push
each(&block) click to toggle source

Iterate over the Stack in LIFO order.

   # File lib/containers/stack.rb
63 def each(&block)
64   @container.each_backward(&block)
65 end
empty?() click to toggle source

Returns true if the stack is empty, false otherwise.

   # File lib/containers/stack.rb
58 def empty?
59   @container.empty?
60 end
next() click to toggle source

Returns the next item from the stack but does not remove it.

s = Containers::Stack.new([1, 2, 3])
s.next #=> 3
s.size #=> 3
   # File lib/containers/stack.rb
25 def next
26   @container.back
27 end
pop() click to toggle source

Removes the next item from the stack and returns it.

s = Containers::Stack.new([1, 2, 3])
s.pop #=> 3
s.size #=> 2
   # File lib/containers/stack.rb
45 def pop
46   @container.pop_back
47 end
push(obj) click to toggle source

Adds an item to the stack.

s = Containers::Stack.new([1])
s.push(2)
s.pop #=> 2
s.pop #=> 1
   # File lib/containers/stack.rb
35 def push(obj)
36   @container.push_back(obj)
37 end
Also aliased as: <<
size() click to toggle source

Return the number of items in the stack.

s = Containers::Stack.new([1, 2, 3])
s.size #=> 3
   # File lib/containers/stack.rb
53 def size
54   @container.size
55 end