How to sort a stack using only Push, Pop, Top, IsEmpty, IsFull?

algorithm, c, data-structures

Solution

It can be done...

Ok: sorted, ahem, "in-place" with only the listed ops, didn't need Top() or IsFull() or another stack or data structure other than the call frames. (Presumably the whole point of the homework problem was to require a recursive solution.)

Ruby

@a = [3, 2, 1, 6, 5, 4]

class Array
  def empty?
    return size == 0
  end
end

def sort e
  if @a.empty?
    @a.push e
    return
  end
  t = @a.pop
  if e > t
    @a.push(t).push(e)
    return
  end
  sort e
  @a.push t
end

def resort
  return if @a.empty?
  t = @a.pop
  resort
  sort t
end

p ['first ', @a]
resort
p ['final ', @a]

Problem

Given a stack S, need to sort the stack using only `Push`, `Pop`, `Top`, `IsEmpty`, `IsFull`. Looking for most simple solution. Edited: Removed in place condition. Can't use another stack or queue.

Original source