Stacks review A LastIn FirstOut LIFO structure Basic
Stacks – review • A Last-In First-Out (LIFO) structure • Basic Operations: top – push: insert data item onto top of stack – pop: remove data item from top of stack • Additional Operations – is. Empty: determine if stack is empty – is. Full: determine if stack is full – top: return (but don’t remove) top data item • Easy implementation using either arrays or linked lists COSC 2 P 03 Week 2 1
Queues – review • A First-In First-Out (FIFO) structure • Basic Operations: – enqueue: add data item to back of queue – dequeue: remove data item front of queue • Additional Operations: – is. Empty: determine if queue is empty – is. Full: determine if queue is full – front: return (but don’t remove) front data item • Easy implementation using either arrays or linked lists front COSC 2 P 03 Week 2 back 2
Double-Ended Queues (Deques) • Items can be added or removed from either end • Conceptual difference to standard queues: – “left” and “right” rather than “front” and back” • Operations: – enqueue. Left, enqueue. Right – dequeue. Left, dequeue. Right left COSC 2 P 03 Week 2 right 3
Special Deques • Input-Restricted Deque: input restricted to one end (e. g. enqueue. Left only) • Output-Restricted Deque: output restricted to one end (e. g. dequeue. Left only) • Stack: usage restricted to enqueue. Left and dequeue. Left • Queue: usage restricted to enqueue. Right and dequeue. Left COSC 2 P 03 Week 2 4
Priority Queues • Each data item has a key or priority • Ordering within queue is based on key • Basic Operations: – insert: add data item according to its key – delete. Min: remove data item with smallest key front – item with smallest key is here COSC 2 P 03 Week 2 back – item with largest key is here 5
Priority Queue Example – Emergency Room if(q. is. Empty()) treat. Patient(p); else { t = q. front; if(p. level < t. level) insert p before t; else { while((t. next != null) && (p. level >= t. next. level) t = t. next; insert p after t; } } COSC 2 P 03 Week 2 6
Representation of a general tree • No restriction on number of children per node • Keep children in something similar to a linked list class Tree. Node // see Weiss section 4. 1 { <declarations for info stored in node, e. g. int info; > Tree. Node first. Child; Tree. Node next. Sibling; public void display. Node(){…} // display info stored in node } first. Child info next. Sibling COSC 2 P 03 Week 2 7
Representation of a binary tree class Binary. Node // see Weiss section 4. 2 { < declarations for info stored in node, e. g. int info; > Binary. Node left; Binary. Node right; public void display. Node(){…} // display info stored in node } left info right COSC 2 P 03 Week 2 8
Tree Traversals Breadth-first traversal: • starting from root, visit all nodes on each level in turn, from left to right Depth-first traversals: • Preorder: visit root, traverse left, traverse right – General case: visit root, then traverse subtrees L R • Postorder: traverse left, traverse right, visit root – General case: traverse subtrees L R, then visit root • Inorder: traverse left, visit root, traverse right COSC 2 P 03 Week 2 9
Breadth-first traversal (also called level-order traversal) We use an initially-empty queue, TQ, of type Binary. Node. BFT(Binary. Node T) { TQ. enqueue(T); while(!TQ. is. Empty()) { temp = TQ. dequeue(); temp. display. Node(); if(temp. left != null) TQ. enqueue(temp. left); if(temp. right != null) TQ. enqueue(temp. right); } } COSC 2 P 03 Week 2 10
- Slides: 10