Source: http://www.cs.cmu.edu/~15122-archive/n20/handouts/09-stackqueue.pdf