Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 7 Stacks I CS Data Structures I COSC 2006 April 22, 2017

Similar presentations


Presentation on theme: "Chapter 7 Stacks I CS Data Structures I COSC 2006 April 22, 2017"— Presentation transcript:

1 Chapter 7 Stacks I CS2006 - Data Structures I COSC 2006 April 22, 2017

2 Tutorial Do not teach new materials Review the lectures
Hand out simple programming problems Solve them Use more examples to explain concepts Answer assignment problems

3 Topics ADT Stack Stack Operations Using ADT Stack
Line editor Bracket checking Special-Palindromes Implementation of ADT Stack

4 Stack Of Cups Remove a cup from new stack. bottom top bottom top
COSC 2006 April 22, 2017 Stack Of Cups bottom top C A B D E F bottom top C A B D E Picture is really a stack of cups and saucers. LIFO = last in first out. The first cup that is removed from a stack of cups is the Last one that was added to the stack. Other examples of LIFO lists in real life: stack of trays in a cafeteria; paper stack in a printer or copy machine; newspaper stack at a news stand. Add a cup to the stack. Remove a cup from new stack. Chapter 6: Stacks

5 Introduction Stack: Ordered group of homogeneous items
Only one item can be accessed at a time (top) Items addition / removal take place only at the top Inserting an item is known as "pushing" onto the stack. Removing an item is known as "popping" off the stack. Has Last-In-First-Out (LIFO) behavior

6 Introduction Real-life examples: Very useful in computer science Books
Pennies More??? Very useful in computer science Converting numeric strings into equivalent values Evaluating algebraic expressions

7 LIFO A stack is a LIFO (Last-in-first-out) list top push pop 5 4 5 4 4
3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 stack depth = 5 bottom

8 Introduction Example: Line-editor a b c c d d d e   e f f g
 means backspace will generate the following output: a b c d e f g Observations

9 Introduction Example: Line-editor Pseudocode:
// Read the line, correcting mistakes along the way while (not end of line) { Read a new character ch if ( ch is not a ‘ ‘ ) Add ch to the ADT else Remove the most recently added item from the ADT } // end while

10 Introduction Example: Line-editor The following operations are needed
Determine if the line is empty Add a character Remove the most-recently added character Retrieve the most recently added item These are exactly the operations needed for a stack The ADT Stack can be used to perform the reading and correction of the line

11 The Stack Interface In Java
COSC 2006 April 22, 2017 The Stack Interface In Java We can define our own stack interface like this: public interface StackInterface { public boolean isFull(); // returns if the stack is full public boolean isEmpty(); // return if the stack is empty public Object top() // return the top element throws StackException; // if the stack is empty public void push(Object obj); // push obj onto the stack public void popAll (); public Object pop() // return and remove the top element of the stack throws StackException; // if the stack is empty } Chapter 6: Stacks

12 Using ADT Stack Read & Correct a text of line: Using stack operations
readAndCorrect ( out aStack : Stack) // Reads input line and either enters characters onto stack S // or corrects contents if the character is the ‘ ‘ symbol aStack.createStack Read newChar while ( newChar != eoln ) { if ( newChar != ‘ ‘ ) aStack.Push( newChar) else if (! aStack.isEmpty()) aStack.Pop( ) read newChar } // end while How to write the contents in a stack backwards?

13 Stack Application Example: Balanced Braces Assumption Example:
All braces are of the same type Example: a b c { d e f g { i j k } { l { m n } } o p } q r Balanced a b c { d e f } } { g h I j { k l } m Unbalanced Any idea to evaluate?

14 Stack Application Balanced Braces Idea:
keep track for unmatched ‘{‘ by pushing them onto a stack When ‘}’ is encountered , pop one of the unmatched ‘{‘ from the stack Stop when The string and stack are both empty  Success Stack is empty, but string still contains closing braces (‘}‘)  Failure: more closing braces String is empty but stack still contains unmatched opening braces (‘{‘’)  Failure: more opening braces

15 Stack Application Balanced Braces: Pseudocode aStack.createStack ( )
balancedSoFar = true i = 0 while ( balancedSoFar and i < length of aString) { ch = character at position i ++ i if ( ch = ‘{‘) aStack.push( ‘{‘ ) else if ( ch = ‘}’ ) aStack.pop( ) // Pop a matching open brace else balancedSoFar = false // ignore all characters other that braces } // end while if ( balancedSoFar && aStack.isEmpty( ) ) aString has balanced braces else aString doesn’t have balanced braces

16 Stack Application Balanced Braces: Examples { a { b } c } { a { b c }

17 Stack Application How about math expression with 3 types of brackets
() [] {} {(A+C)*D

18 Stack Application Algorithm Scan expression from left to right
Each time a left bracket is encountered, push it onto stack When a right bracket is encountered, compare it with the top item on the stack If it is a match, pop the stack If not, report illegal bracketing If the stack id prematurely empty, report illegal If there are items left on the stack after the expression has been scanned, report illegal bracketing

19 Stack Application (3+4)*{7+[4/8]}

20 Stack Application Write the pseudo code by yourself
Special-Palindromes L = { w $ w ' : w is either empty or any string not including $, and w ' = reverse (w) } Idea: Traverse the first half and push its elements onto the stack When $ is reached, ignore it and start traversing and matching each element from the input string with that on the stack Termination: Success: Both stack and string are empty Failure: Character on input doesn't match character on stack top String empty, but stack isn't Stack empty, but string isn't Write the pseudo code by yourself

21 ADT Stack Implementation
Implementations Arrays Linked lists And?

22 ADT Stack Implementation
Array Linked List ADT List Where is the top? Top 10 20 30 10 20 30 Top 10 20 30 Top

23 COSC 2006 April 22, 2017 An Array-Based Stack We can use arrays for our stacks by requiring a maximum size N for our stack (e.g. N = 50) The stack would then consist of an N-element array, s, and the array index of the top element, t Array indices start at 0,so we will initialize t to -1 Chapter 6: Stacks

24 Stack Interface public interface StackInterface {
COSC 2006 April 22, 2017 Stack Interface public interface StackInterface { public boolean isEmpty(); public boolean isFull(); public void push(Object newItem) throws StackException; public Object pop() throws StackException; public void popAll(); public Object peek/top () throws StackException; } // end StackInterface Chapter 6: Stacks

25 Stack Exception public class StackException
COSC 2006 April 22, 2017 Stack Exception public class StackException extends java.lang.RuntimeException { public StackException(String s) { super(s); } // end constructor } // end StackException Chapter 6: Stacks

26 Array Stack Implementation (1)
COSC 2006 April 22, 2017 Array Stack Implementation (1) public class ArrayStackBased implements StackInterface { final int MAX_STACK = 50; // maximum size of stack private Object items[ ]; private int top; public ArrayStackBased() { items = new Object[MAX_STACK]; top = -1; } // end default constructor public boolean isEmpty() { return top < 0; } // end isEmpty public boolean isFull() { return top == MAX_STACK-1; } // end isFull Chapter 6: Stacks

27 Array Stack Implementation (1)
COSC 2006 April 22, 2017 Array Stack Implementation (1) public class ArrayStackBased implements StackInterface { final int MAX_STACK = 50; // maximum size of stack private Object items[ ]; private int top; public ArrayStackBased() { items = new Object[MAX_STACK]; top = -1; } // end default constructor public boolean isEmpty() { return top < 0; } // end isEmpty public boolean isFull() { return top == MAX_STACK-1; } // end isFull Chapter 6: Stacks

28 Array Stack Implementation (2)
COSC 2006 April 22, 2017 Array Stack Implementation (2) public void push(Object newItem) throws StackException { if (!isFull()) { items[++top] = newItem; } else { throw new StackException("StackException on " + "push: stack full"); } // end if } // end push public void popAll() { items = new Object[MAX_STACK]; top = -1; } // end popAll Chapter 6: Stacks

29 Array Stack Implementation (2)
COSC 2006 April 22, 2017 Array Stack Implementation (2) public void push(Object newItem) throws StackException { if (!isFull()) { items[++top] = newItem; } else { throw new StackException("StackException on " + "push: stack full"); } // end if } // end push public void popAll() { items = new Object[MAX_STACK]; top = -1; } // end popAll Chapter 6: Stacks

30 Array Stack Implementation (3)
COSC 2006 April 22, 2017 Array Stack Implementation (3) public Object pop() throws StackException { if (!isEmpty()) { return items[top--]; } else { throw new StackException("StackException on " + "pop: stack empty"); } // end if } // end pop public Object peek() throws StackException { return items[top]; throw new StackException("Stack exception on " + "peek - stack empty"); } // end peek } // end ArrayStack Chapter 6: Stacks

31 Array Stack Implementation (3)
COSC 2006 April 22, 2017 Array Stack Implementation (3) public Object pop() throws StackException { if (!isEmpty()) { return items[top--]; } else { throw new StackException("StackException on " + "pop: stack empty"); } // end if } // end pop public Object peek() throws StackException { return items[top]; throw new StackException("Stack exception on " + "peek - stack empty"); } // end peek } // end ArrayStack Chapter 6: Stacks

32 Array Stack Test public class ArrayStackTest {
COSC 2006 April 22, 2017 Array Stack Test public class ArrayStackTest { public static final int MAX_ITEMS = 15; public static void main(String[ ] args) { ArrayStackBased stack = new ArrayStackBased(); Integer items[ ] = new Integer[MAX_ITEMS]; System.out.println("Pushing:"); for (int i=0; i<MAX_ITEMS; i++) { items[i] = new Integer(i); if (!stack.isFull()) { System.out.print(" "+i); stack.push(items[i]); } // end if } // end for System.out.println("\nPopping:"); while (!stack.isEmpty()) { // cast result of pop to Integer System.out.print(" "+(Integer)(stack.pop())); } // end while System.out.println(); } // end main } // end ArrayStackTest Chapter 6: Stacks

33 Array Stack Questions: How to access each object?
COSC 2006 April 22, 2017 Array Stack Questions: Can we push/pop primitive type value onto the stack? Can we push/pop different objects onto the stack? Student Car How to access each object? Chapter 6: Stacks

34 Review If the array: 6, 2, 7, 13, 5, 4 is added to a stack, in the order given, which number will be the first number to be removed from the stack? 6 2 5 4

35 Review The item that is removed first from a stack is called the ______ of the stack. front top Base prime

36 Review If the array: 6, 21, 35, 3, 6, 2, 13 is added to a stack, in the order given, which of the following is the top of the stack? 2 6 3 13 35

37 Review The ______ method of the ADT stack adds an item to the top of the stack. createStack push Pop peek


Download ppt "Chapter 7 Stacks I CS Data Structures I COSC 2006 April 22, 2017"

Similar presentations


Ads by Google