The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... ·...
Transcript of The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... ·...
![Page 1: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/1.jpg)
The Stack and Queue TypesLecture 10
Hartmut Kaiser
http://www.cct.lsu.edu/˜hkaiser/fall_2013/csc1254.html
![Page 2: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/2.jpg)
Programming Principle of the Day
Do the simplest thing that could possibly work
A good question to ask one’s self when programming is “What is the simplest thing that could possibly work?”
This helps keep us on the path towards simplicity in the design.
http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html
![Page 3: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/3.jpg)
Abstract
This lecture will focus on two other sequential data types, the stack and the queue. We will use stacks to implement conversion between ‘normal expressions’ and the equivalent reverse polish notation.
![Page 4: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/4.jpg)
Introduction to Stacks
A stack is a last-in-first-out (LIFO) data structure
Limited access vector (or list)
Main operations:
Adding an itemReferred to as pushing it onto the stack
Removing an itemReferred to as popping it fromthe stack
![Page 5: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/5.jpg)
Introduction to StacksDefinition:
An ordered collection of data itemsCan be accessed at only one end (the top)
Operations:Construct a stack (usually empty)Check if it is emptypush: add an element to the toptop: retrieve the top elementpop: remove the top elementsize: returns number of elements in stack
![Page 6: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/6.jpg)
Introduction to Stacks
Useful for
Reversing a sequence
Managing a series of undo-actions
Tracking history when browsing the web
Function call hierarchy is implemented with a stack
![Page 7: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/7.jpg)
Push
Push means place a new data element at the top of the stack
17
5
11
3
![Page 8: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/8.jpg)
Push (cont.)
Push means place a new data element at the top of the stack
17
5
11
3
![Page 9: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/9.jpg)
Push (cont.)
Push means place a new data element at the top of the stack
17
5
11
3
![Page 10: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/10.jpg)
Push (cont.)
Push means place a new data element at the top of the stack
17
5
11
3
![Page 11: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/11.jpg)
Pop
Pop means take a data element off the top of the stack
17
5
11
3
![Page 12: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/12.jpg)
Pop (cont.)
Pop means take a data element off the top of the stack
17
5
11
3
![Page 13: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/13.jpg)
Pop (cont.)
Pop means take a data element off the top of the stack
17
5
11
3
![Page 14: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/14.jpg)
Pop (cont.)
Pop means take a data element off the top of the stack
17
5
11
3
![Page 15: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/15.jpg)
Top
Top means retrieve the top of the stack without removing it
17
5
11
3
![Page 16: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/16.jpg)
Top (cont.)
Top means retrieve the top of the stack without removing it
17
5
11
3
3
![Page 17: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/17.jpg)
Top (cont.)
Top means retrieve the top of the stack without removing it
17
5
11
3
3
![Page 18: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/18.jpg)
Linked-List StackStacks can also be implemented with a linked list
The front node is the top of the stack
In fact, there is std::stack<> which is an adaptor usable with different types of underlying containers (std::list is one possibility)
std::stack<T>: implements a stack of ‘T’s
T top();
void push(T const&);void pop();
std::stack<T>::size_type size() const;bool empty();
![Page 19: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/19.jpg)
Linked-List Stack (cont.)
To pop, we remove the node at the front of the linked list, and return the element to the client…
top
![Page 20: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/20.jpg)
Linked-List Stack (cont.)
To pop, we remove the node at the front of the linked list, and return the element to the client…
top
![Page 21: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/21.jpg)
Linked-List Stack (cont.)
To push, we place the new element in a node and insert it at the front of the linked list…
top
![Page 22: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/22.jpg)
Linked-List Stack (cont.)
To push, we place a new element in a node and insert it at the front of the linked list…
top
![Page 23: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/23.jpg)
Example: Implementing a Stack
Implementing a stack on top of a list is trivial
Live coding
![Page 24: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/24.jpg)
Application of Stacks
Consider the arithmetic statement in the assignment:
x = a * b + c
Compiler must generate machine instructions:
LOAD a
MULT b
ADD c
STORE x
Note: this is "infix" notation
The operators are between the operands
![Page 25: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/25.jpg)
Reverse Polish Notation
Postfix Notation
Most compilers convert an expression in infix notation to postfix
The operators are written after the operands
So a * b + c becomes a b * c +
Advantage:Expressions can be written without parentheses
![Page 26: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/26.jpg)
Postfix and Prefix ExamplesInfix RPN (Postfix) Prefix
A + B A B + + A B
A * B + C A B * C + + * A B C
A * (B + C) A B C + * * A + B C
A – (B – (C – D)) A B C D – – – – A – B – C – D
A – B – C – D A B – C – D – – – – A B C D
Prefix: Operators come before the operands
![Page 27: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/27.jpg)
Evaluating RPN Expressions
"By hand" (Underlining technique):
1. Scan the expression from left to right to find an operator.
2. Locate ("underline") the last two preceding operands and combine them using this operator.
3. Repeat until the end of the expression is reached.
Example:
2 3 4 + 5 6 - - *
![Page 28: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/28.jpg)
Evaluating RPN Expressions2 3 4 + 5 6 - - *
2 3 4 + 5 6 - - *
2 7 5 6 - - *
2 7 5 6 - - *
2 7 -1 - *
2 7 -1 - *
2 8 *
2 8 *
16
2 * ((3 + 4) – (5 – 6))
![Page 29: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/29.jpg)
Evaluating RPN Expressions
By using a stack algorithm
Initialize an empty stack
Repeat the following until the end of the expression is encountered
Get the next token (const, var, operator) in the expression
Operand – push onto stackOperator – do the following
Pop 2 values from stack
Apply operator to the two values
Push resulting value back onto stack
When end of expression encountered, value of expression is the (only) number left in stack
Note: if only 1 value on stack, this is an invalid RPN expression
![Page 30: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/30.jpg)
Evaluating of Postfix
Note thechangingstatus of the stack
![Page 31: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/31.jpg)
Converting between Notations
By hand: Represent infix expression as an expression tree:
A * B + C
+
C*
A B
A * (B + C)
*
A+
B C
((A + B) * C) / (D - E)
C
A B
D E
*
+
/
-
![Page 32: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/32.jpg)
Converting RPN (Postfix)
Traverse the tree in Left-Right-Parent order (post-order) to get RPN:
C
A B
D E
*
+
/
-
A B + C * D E - /
![Page 33: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/33.jpg)
Converting to Prefix
Traverse tree in Parent-Left-Right order (pre-order) to get prefix:
/ * + A B C - D E
C
A B
D E
*
+
/
-
![Page 34: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/34.jpg)
Converting to Infix
Traverse tree in Left-Parent-Right order (in-order) to get infix(must insert parenthesis)
((A + B)* C)/(D – E))C
A B
D E
*
+
/
-
![Page 35: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/35.jpg)
Another RPN Conversion Method
By hand: "Fully parenthesize-move-erase" method:
1. Fully parenthesize the expression.
2. Replace each right parenthesis by the corresponding operator.
3. Erase all left parentheses.
A * B + C
((A B * C +
A B * C +
A * (B + C)
(A (B C + *
A B C + *
((A * B) + C) (A * (B + C ) )
![Page 36: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/36.jpg)
Introduction to Queue A queue is a first-in-first-out (FIFO) data structure
Limited access vector (or list)
Main operations:Adding an item
Referred to as pushing it onto the queue (enqueue an item, adding to the end)
Removing an itemReferred to as popping it from the queue (dequeue an item, removefrom the front)
![Page 37: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/37.jpg)
Introduction to QueuesDefinition:
An ordered collection of data itemsCan be read at only one end (the front) and written to only at the
other end (the back)
Operations:Construct a queue (usually empty)Check if it is emptypush: add an element to the backfront: retrieve the front elementpop: remove the front elementsize: returns number of elements in queue
![Page 38: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/38.jpg)
Introduction to Queues
Useful for
All kind of simulations (traffic, supermarket, etc.)
Computers use queues for schedulingHandling keyboard events
Handling mouse events
Scrolling the screen
Printer spooler
C++ I/O streams are queues Even if we only access one end, the other end is managed by the operating system
![Page 39: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/39.jpg)
Example: Queue of Stringsvoid manage_queue()
{
queue<string> waiting_strings; // queue of 'waiting' strings
while (true) {
cout << "?> "; // ask for next line of text
string response;
getline(cin, response);
if (response.empty()) break;
if (response == "next") { // try to dequeue
if (waiting_strings.empty())
cout << "No one waiting!" << endl;
else {
cout << waiting_strings.front() << endl;
waiting_strings.pop();
}
}
else { // enqueue the line read
waiting_strings.push(response);
}
}
}
![Page 40: The Stack and Queue Types - Innovative | Inventivehkaiser/fall_2013/csc1254/lectures/Lecture... · The Stack and Queue Types Lecture 10 ... ... data structure Limited access vector](https://reader031.fdocuments.us/reader031/viewer/2022030409/5a91f6547f8b9a8b5d8bca9b/html5/thumbnails/40.jpg)
Example: Implementing a Queue
Implementing a queue on top of a list is equally trivial
Live coding