160 likes | 385 Views
Stacks and Queues. Stacks. A stack is an abstract data structure, with some special properties: Insertion and deletion is only allowed at the end of the stack (usually called the top )
E N D
Stacks • A stack is an abstract data structure, with some special properties: • Insertion and deletion is only allowed at the end of the stack (usually called the top) • Due to this restriction, elements are removed from the stack in the opposite order in which they were added • This is called LIFO order (Last In, First Out) RHS – SWC
Stacks public interface Stack<T> { void push(T element); T pop(); T peek(); } RHS – SWC
Stacks push(D) D D = pop() push(C) C C = pop() push(B) B B = pop() A push(A) A = pop() RHS – SWC
Stacks • Note that we have not stated exactly how a Stack is implemented • Can be done in various ways (array, linked list, etc.) • However, data structure should support efficient (O(1)) insertion and removal at the end of the collection RHS – SWC
Stacks • What are stacks used for…? • Expression evaluation • Memory management • …any situation where LIFO order is the proper order for processing data RHS – SWC
Stacks RHS – SWC
Stacks • The (in)famous HP15-C pocket calculator used Reverse Polish Notation for entering and evaluating expressions • This notation is very closely related to stacks • Loved by many, hated by more… RHS – SWC
1 2 x 3 7 = 1 2 E 3 7 x E Stacks • 12 x 37 is not typed in as: • but rather as: RHS – SWC
Stacks Push(X) X X = pop() Push(37) 37 37 = pop() 444 12 Push(12) 12 = pop() Push(12 x 37) RHS – SWC
Queues • A queue is (also) an abstract data structure, with some special properties: • Insertion is only allowed at the end of the queue (usually called the tail) • Deletion is only allowed at the start of the queue (usually called the head) • Elements are removed from the stack in the same order in which they were added • This is called FIFO order (First In, First Out) RHS – SWC
Queues public interface Queue<T> { void add(T element); T remove(); T peek(); } RHS – SWC
Queues add(D) D D = remove() add(C) C C = remove() add(B) B B = remove() A add(A) A = remove() RHS – SWC
Queue • Like for a Stack, a Queue can be implemented in various ways • Data structure should support efficient (O(1)) insertion and removal at the start and end of the collection • Linked list likely choice RHS – SWC
Queue • What are queues used for…? • Event handling • All situations where we need to process data in the order it is produced, but cannot process data immediately RHS – SWC
Stacks and Queues in Java • Stack<T> is part of Java library, and can be used as-is • Queue<T> is an interface! • There are several implementations of the Queue interface availabe • See the documentation for details RHS – SWC