professor frank kreimendahl
TRANSCRIPT
![Page 1: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/1.jpg)
Stacks
Professor Frank Kreimendahl
School of Computing and Data Science
Wentworth Institute of Technology
September 27, 2021
![Page 2: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/2.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications Stack ADT
School of Computing and Data Science - 2/26 - Frank Kreimendahl | [email protected]
![Page 3: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/3.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Stack ADT
A stack is a fundamental data structure in computer scienceA stack behaves similarly to a Pez dispenser:• Only the top item can be accessed• Only one item can be inserted or extracted at a time
The top of the stack is the most recently added item in thestack
The stack is a Last-in, First-out (LIFO) data structure
School of Computing and Data Science - 3/26 - Frank Kreimendahl | [email protected]
![Page 4: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/4.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Stack Specification
We can only interact with the top of the stack (no randomaccess), so there are not many operations possibleStack operations:• empty(): determine if a stack is empty• peek(): get the top item on the stack• pop(): remove and return the top item on the stack• push(E): put a new item on top of the stack and return that
item
School of Computing and Data Science - 4/26 - Frank Kreimendahl | [email protected]
![Page 5: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/5.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Stack Interface
public interface StackInt<E> {E push(E obj);E peek();E pop();boolean isEmpty();
}
School of Computing and Data Science - 5/26 - Frank Kreimendahl | [email protected]
![Page 6: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/6.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Example Peek
Rich was added longestago, and Jonathan mostrecently
Jonathan is at the top ofthe stack, which is whereevery interaction takesplace
String last =names.peek(); wouldresult in last referencingthe “Jonathan” string
Stack of Strings
School of Computing and Data Science - 6/26 - Frank Kreimendahl | [email protected]
![Page 7: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/7.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Example Pop
Before pop()After pop()
String temp = names.pop(); modifies the stack andresults in temp referencing the “Jonathan” string
School of Computing and Data Science - 7/26 - Frank Kreimendahl | [email protected]
![Page 8: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/8.jpg)
Stack ADTStack ADT
Specification
Interface
Example
Array Imple-mentation
StackApplications
Example Push
Before push(“Philip”)After push(“Philip”)
names.push(“Philip”); modifies the stack
School of Computing and Data Science - 8/26 - Frank Kreimendahl | [email protected]
![Page 9: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/9.jpg)
Stack ADT
Array Imple-mentationArray Implementation
StackApplications
Array Implementation
School of Computing and Data Science - 9/26 - Frank Kreimendahl | [email protected]
![Page 10: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/10.jpg)
Stack ADT
Array Imple-mentationArray Implementation
StackApplications
Array Implementation
We can use an array to store the data held in a stack
Treat the end of the list as the head of the stack – it is themost efficient to modify
What list operation is similar to push?
What list operation is similar to pop?
We will actually use an ArrayList to keep the data, since ithas operations we can translate
School of Computing and Data Science - 10/26 - Frank Kreimendahl | [email protected]
![Page 11: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/11.jpg)
Stack ADT
Array Imple-mentationArray Implementation
StackApplications
Class Definition
public class ListStack<E> implements StackInt<E> {private List<E> theData;
public ListStack() {theData = new ArrayList<>();
}
// stack interface implementations}
School of Computing and Data Science - 11/26 - Frank Kreimendahl | [email protected]
![Page 12: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/12.jpg)
Stack ADT
Array Imple-mentationArray Implementation
StackApplications
push and pop
public E push(E obj) {theData.add(obj);return obj;
}
public E pop() {if (isEmpty())
throw new NoSuchElementException();return theData.remove(theData.size() — 1);
}
School of Computing and Data Science - 12/26 - Frank Kreimendahl | [email protected]
![Page 13: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/13.jpg)
Stack ADT
Array Imple-mentationArray Implementation
StackApplications
peek and isEmpty
public E peek() {if (isEmpty())
throw new NoSuchElementException();return theData.get(theData.size() — 1);
}
public boolean isEmpty() {return theData.isEmpty();
}
School of Computing and Data Science - 13/26 - Frank Kreimendahl | [email protected]
![Page 14: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/14.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Stack Applications
School of Computing and Data Science - 14/26 - Frank Kreimendahl | [email protected]
![Page 15: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/15.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Checking for Balanced Parentheses
(a+b∗ (c/(d− e)))+(d/e)
Computers are good at reading and solving arithmeticexpressions
We need to describe to a program what expressions are validor invalid
Balanced parentheses are important in an expression beingvalid – we can validate an expression’s parenthesis use
We can use stacks to verify if an expression is valid or not
School of Computing and Data Science - 15/26 - Frank Kreimendahl | [email protected]
![Page 16: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/16.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
isBalanced Algorithm
ISBALANCED(expression)1: s← empty stack2: index← 03: while index < expression.len() do4: if next character == ‘(’ then5: s.push(next character)6: else if next character == ‘)’ then7: if s.isEmpty() then8: return false9: s.pop()
10: increment index11: return s.isEmpty()
School of Computing and Data Science - 16/26 - Frank Kreimendahl | [email protected]
![Page 17: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/17.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
isBalanced Testing
Test a variety of both valid and invalid inputs
Test both nested and sequential parentheses
Test unbalanced parentheses
Test no parentheses
School of Computing and Data Science - 17/26 - Frank Kreimendahl | [email protected]
![Page 18: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/18.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Infix To Postfix Converter
Infix notation is standard expression notation – binaryoperators are between their operands
Postfix is easier for a computer to process
Postfix has another useful property: no need for parentheses!
We will use a stack to convert from infix to postfix
School of Computing and Data Science - 18/26 - Frank Kreimendahl | [email protected]
![Page 19: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/19.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Conversion Example
Given the infix equation w−5.1/sum∗2, convert to postfix
What is the postfix form?
How can we build it in an automated way?
How can we build it so that we only have to scan through theinfix equation once?
School of Computing and Data Science - 19/26 - Frank Kreimendahl | [email protected]
![Page 20: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/20.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
convert pseudocode
CONVERT(expression)1: postfix← empty StringBuilder2: operator stack← empty Stack3: while expression has tokens left do4: t← next token5: if t is an operand then6: append t to postfix7: else if t is an operator then8: PROCESSOPERATOR(t)9: else Syntax error
10: pop all operators off stack and append to postfix11: return postfix
School of Computing and Data Science - 20/26 - Frank Kreimendahl | [email protected]
![Page 21: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/21.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
processOperator Pseudocode
PROCESSOPERATOR(t)1: if operator stack is empty then2: push t onto operator stack3: else4: topOp← top of operator stack5: if t precedence > topOp precedence then6: push t onto operator stack7: else8: while stack is not empty and t precedence ≤ topOp
precedence do9: pop topOp and append to postfix
10: if operator stack is not empty then11: topOp← top of operator stack12: push t onto operator stack
School of Computing and Data Science - 21/26 - Frank Kreimendahl | [email protected]
![Page 22: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/22.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Solution Breakdown
Mostly the code is if/else statements in a loop:• operands go directly to output• operators get pushed onto the stack• operators already on the stack might get popped• the stack is emptied to the output at the end
School of Computing and Data Science - 22/26 - Frank Kreimendahl | [email protected]
![Page 23: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/23.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Running the Converter
School of Computing and Data Science - 23/26 - Frank Kreimendahl | [email protected]
![Page 24: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/24.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Running the Converter
School of Computing and Data Science - 24/26 - Frank Kreimendahl | [email protected]
![Page 25: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/25.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Evaluate Postfix Expressions
Now that we can convert infix to postfix, how can we findthe results of the expression?
Using a stack, of course!
We will scan through the postfix expression only once tocalculate the result
This means that we can evaluate any infix expression byscanning through an expression just twice – no jumpingaround in the expression or repeated scans
School of Computing and Data Science - 25/26 - Frank Kreimendahl | [email protected]
![Page 26: Professor Frank Kreimendahl](https://reader031.vdocuments.site/reader031/viewer/2022013000/61c981c0a3cb2217b17bd8ea/html5/thumbnails/26.jpg)
Stack ADT
Array Imple-mentation
StackApplicationsBalanced Parentheses
isBalanced
Testing
Postfix Generator
Postfix Evaluator
Postfix Evaluation Algorithm
EVALUATE(expression)1: operand stack← empty Stack2: while expression has tokens left do3: t← next token4: if t is an operand then5: push t onto operand stack6: else if t is an operator then7: pop right operand off stack8: pop left operand off stack9: evaluate operator with two operands
10: push result onto stack11: return popped stack result
School of Computing and Data Science - 26/26 - Frank Kreimendahl | [email protected]