cs 112 introduction to programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf ·...
TRANSCRIPT
![Page 1: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/1.jpg)
CS 112 Introduction to Programming
(Spring 2012)
Lecture #26: Stacks and Queues
Zhong Shao
Department of Computer Science Yale University
Office: 314 Watson
http://flint.cs.yale.edu/cs112
Acknowledgements: some slides used in this class are taken directly or adapted from those accompanying the textbook: Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne (Copyright 2002-2010)
![Page 2: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/2.jpg)
2
Data Types and Data Structures
Data types. Set of values and operations on those values. Some are built into the Java language: int, double[], String, … Most are not: Complex, Picture, Stack, Queue, ST, Graph, …
Data structures. Represent data or relationships among data. Some are built into Java language: arrays. Most are not: linked list, circular list, tree, sparse array, graph, …
next lecture this lecture TSP assignment
this lecture next lecture
![Page 3: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/3.jpg)
3
Collections
Fundamental data types. Set of operations (add, remove, test if empty) on generic data. Intent is clear when we insert. Which item do we remove?
Stack. [LIFO = last in first out] Remove the item most recently added. Ex: cafeteria trays, Web surfing.
Queue. [FIFO = first in, first out] Remove the item least recently added. Ex: Commons line at 12:30 MW.
Symbol table. Remove the item with a given key. Ex: Phone book.
next lecture
this lecture
![Page 4: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/4.jpg)
4
Stacks
![Page 5: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/5.jpg)
5
Stack API
pop
push
![Page 6: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/6.jpg)
6
Stack Client Example 1: Reverse
public class Reverse { public static void main(String[] args) { StackOfStrings stack = new StackOfStrings(); while (!StdIn.isEmpty()) { String s = StdIn.readString(); stack.push(s); } while (!stack.isEmpty()) { String s = stack.pop(); StdOut.println(s); } } } % more tiny.txt
it was the best of times % java Reverse < tiny.txt times of best the was it
stack contents when standard input is empty
![Page 7: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/7.jpg)
7
Stack Client Example 2: Test Client
stack contents just before first pop operation
public static void main(String[] args) { StackOfStrings stack = new StackOfStrings(); while (!StdIn.isEmpty()) { String s = StdIn.readString(); if (s.equals("-")) StdOut.println(stack.pop()); else stack.push(s); } }
% more test.txt to be or not to – be - - that - - - is % java StackOfStrings < test.txt to be not that or be
![Page 8: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/8.jpg)
8
Stack: Array Implementation
Array implementation of a stack. Use array a[] to store N items on stack. push() add new item at a[N]. pop() remove item from a[N-1].
to be or not
0 1 2 3 4 5 6 7 8 9
a[]
N
public class ArrayStackOfStrings { private String[] a; private int N = 0; public ArrayStackOfStrings(int max) { a = new String[max]; } public boolean isEmpty() { return (N == 0); } public void push(String item) { a[N++] = item; } public String pop() { return a[--N]; } }
temporary solution: make client provide capacity
stack and array contents after 4th push operation
how big to make array? [stay tuned]
![Page 9: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/9.jpg)
9
Array Stack: Test Client Trace
push
pop
![Page 10: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/10.jpg)
10
Array Stack: Performance
Running time. Push and pop take constant time. Memory. Proportional to client-supplied capacity, not number of items. Problem. API does not take capacity as argument (bad to change API). Client might not know what capacity to use. Client might use multiple stacks.
Challenge. Stack where capacity is not known ahead of time.
![Page 11: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/11.jpg)
11
Linked Lists
![Page 12: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/12.jpg)
12
Sequential vs. Linked Allocation
Sequential allocation. Put items one after another. Java: String; array of objects.
Linked allocation. Include in each object a link to the next one. Java: link is reference to next item.
Key distinctions. Array: random access, fixed size. Linked list: sequential access, variable size.
"Carol"
null
C0
C1
-
-
C2
C3
"Alice"
CA
C4
C5
-
-
C6
C7
-
-
C8
C9
"Bob"
C0
CA
CB
value addr
"Alice"
"Bob"
B0
B1
"Carol"
-
B2
B3
-
-
B4
B5
-
-
B6
B7
-
-
B8
B9
-
-
BA
BB
value addr
array (B0)
linked list (C4)
get ith item
get next item
![Page 13: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/13.jpg)
From the point of view of a particular object: all of these structures look the same. Multiply-linked data structures. Many more possibilities.
13
Singly-Linked Data Structures
sequential (this lecture)
parent-link tree rho general case
circular (TSP assignment)
![Page 14: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/14.jpg)
14
Linked list. A recursive data structure. An item plus a pointer to another linked list (or empty list). Unwind recursion: linked list is a sequence of items.
Node data type. A reference to a String. A reference to another Node.
Linked Lists
public class Node { private String item; private Node next; }
Alice Bob Carol
first
item next
special pointer value null terminates list
null
![Page 15: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/15.jpg)
15
Building a Linked List
Node third = new Node(); third.item = "Carol"; third.next = null; Node second = new Node(); second.item = "Bob"; second.next = third; Node first = new Node(); first.item = "Alice"; first.next = second;
"Carol"
null
C0
C1
-
-
C2
C3
"Alice"
CA
C4
C5
-
-
C6
C7
-
-
C8
C9
"Bob"
C0
CA
CB
-
-
CC
CD
-
-
CE
CF
Value addr
Carol null
item next
third
C0 third
main memory
Bob
second
CA second
Alice
first
C4 first
![Page 16: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/16.jpg)
16
Stack Push: Linked List Implementation
Node second = first;
first.item = "of"; first.next = second;
first = new Node();
best the was it
first
of
second
best the was it
first second
best the was it
first
second
best the was it
first
![Page 17: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/17.jpg)
17
Stack Pop: Linked List Implementation
first = first.next;
return item;
best the was it
first
of
best the was it
first
best the was it
first
of
garbage-collected
String item = first.item;
"of"
![Page 18: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/18.jpg)
18
Stack: Linked List Implementation
public class LinkedStackOfStrings { private Node first = null; private class Node { private String item; private Node next; } public boolean isEmpty() { return first == null; } public void push(String item) { Node second = first; first = new Node(); first.item = item; first.next = second; } public String pop() { String item = first.item; first = first.next; return item; } }
"inner class"
stack and linked list contents after 4th push operation
![Page 19: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/19.jpg)
19
Linked List Stack: Test Client Trace
push
pop
![Page 20: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/20.jpg)
20
Stack Data Structures: Tradeoffs
Two data structures to implement Stack data type. Array. Every push/pop operation take constant time. But… must fix maximum capacity of stack ahead of time.
Linked list. Every push/pop operation takes constant time. Memory is proportional to number of items on stack. But… uses extra space and time to deal with references.
to be or not 0 1 2 3 4 5 6 7 8 9
a[]
N
![Page 21: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/21.jpg)
21
List Processing Challenge 1
Q. What does the following code fragment do?
for (Node x = first; x != null; x = x.next) { StdOut.println(x.item); }
Alice Bob Carol null item next
first
![Page 22: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/22.jpg)
22
List Processing Challenge 2
Q. What does the following code fragment do?
Node last = new Node(); last.item = StdIn.readString(); last.next = null; Node first = last; while (!StdIn.isEmpty()) { last.next = new Node(); last = last.next; last.item = StdIn.readString(); last.next = null; }
Alice Bob Carol null item next
first last
![Page 23: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/23.jpg)
23
Parameterized Data Types
![Page 24: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/24.jpg)
24
Parameterized Data Types
We implemented: StackOfStrings. We also want: StackOfURLs, StackOfVans, StackOfInts, … Strawman. Implement a separate stack class for each type. Rewriting code is tedious and error-prone. Maintaining cut-and-pasted code is tedious and error-prone.
![Page 25: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/25.jpg)
25
Generics
Generics. Parameterize stack by a single type.
Stack<Apple> stack = new Stack<Apple>(); Apple a = new Apple(); Orange b = new Orange(); stack.push(a); stack.push(b); // compile-time error a = stack.pop();
parameterized type
sample client
“stack of apples”
can’t push an orange onto a stack of apples
![Page 26: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/26.jpg)
26
Generic Stack: Linked List Implementation
public class Stack<Item> { private Node first = null; private class Node { private Item item; private Node next; } public boolean isEmpty() { return first == null; } public void push(Item item) { Node second = first; first = new Node(); first.item = item; first.next = second; } public Item pop() { Item item = first.item; first = first.next; return item; } }
parameterized type name (chosen by programmer)
![Page 27: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/27.jpg)
27
Autoboxing
Generic stack implementation. Only permits reference types. Wrapper type. Each primitive type has a wrapper reference type. Ex: Integer is wrapper type for int.
Autoboxing. Automatic cast from primitive type to wrapper type. Autounboxing. Automatic cast from wrapper type to primitive type.
Stack<Integer> stack = new Stack<Integer>(); stack.push(17); // autobox (int -> Integer) int a = stack.pop(); // auto-unbox (Integer -> int)
![Page 28: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/28.jpg)
28
Stack Applications
Real world applications. Parsing in a compiler. Java virtual machine. Undo in a word processor. Back button in a Web browser. PostScript language for printers. Implementing function calls in a compiler.
![Page 29: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/29.jpg)
29
Function Calls
How a compiler implements functions. Function call: push local environment and return address. Return: pop return address and local environment.
Recursive function. Function that calls itself. Note. Can always use an explicit stack to remove recursion.
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd (216, 192)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd (192, 24)
static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q); }
gcd (24, 0)
p = 24, q = 0
p = 192, q = 24
p = 216, q = 192
![Page 30: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/30.jpg)
30
Arithmetic Expression Evaluation
Goal. Evaluate infix expressions. Two stack algorithm. [E. W. Dijkstra] Value: push onto the value stack. Operator: push onto the operator stack. Left parens: ignore. Right parens: pop operator and two values;
push the result of applying that operator to those values onto the operand stack.
Context. An interpreter!
operand operator
value stack operator stack
![Page 31: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/31.jpg)
31
Arithmetic Expression Evaluation
public class Evaluate { public static void main(String[] args) { Stack<String> ops = new Stack<String>(); Stack<Double> vals = new Stack<Double>(); while (!StdIn.isEmpty()) { String s = StdIn.readString(); if (s.equals("(")) ; else if (s.equals("+")) ops.push(s); else if (s.equals("*")) ops.push(s); else if (s.equals(")")) { String op = ops.pop(); if (op.equals("+")) vals.push(vals.pop() + vals.pop()); else if (op.equals("*")) vals.push(vals.pop() * vals.pop()); } else vals.push(Double.parseDouble(s)); } StdOut.println(vals.pop()); } }
% java Evaluate ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) 101.0
![Page 32: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/32.jpg)
32
Correctness
Why correct? When algorithm encounters an operator surrounded by two values within parentheses, it leaves the result on the value stack. So it's as if the original input were: Repeating the argument: Extensions. More ops, precedence order, associativity, whitespace.
1 + (2 - 3 - 4) * 5 * sqrt(6*6 + 7*7)
( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
( 1 + ( 5 * ( 4 * 5 ) ) )
( 1 + ( 5 * 20 ) )
( 1 + 100 )
101
![Page 33: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/33.jpg)
33
Stack-Based Programming Languages
Observation 1. Remarkably, the 2-stack algorithm computes the same value if the operator occurs after the two values. Observation 2. All of the parentheses are redundant! Bottom line. Postfix or "reverse Polish" notation. Applications. Postscript, Forth, calculators, Java virtual machine, …
( 1 ( ( 2 3 + ) ( 4 5 * ) * ) + )
1 2 3 + 4 5 * * +
Jan Lukasiewicz
![Page 34: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/34.jpg)
34
Summary
Stacks and queues are fundamental ADTs. Array implementation. Linked list implementation. Different performance characteristics.
Many applications.
![Page 35: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/35.jpg)
35
Queues
![Page 36: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/36.jpg)
36
Queue API
public static void main(String[] args) { Queue<String> q = new Queue<String>(); q.enqueue("Vertigo"); q.enqueue("Just Lose It"); q.enqueue("Pieces of Me"); q.enqueue("Pieces of Me"); while(!q.isEmpty()) StdOut.println(q.dequeue()); }
return an iterator over the keys iterator() Iterator<Key>
enqueue dequeue
![Page 37: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/37.jpg)
37
Enqueue: Linked List Implementation
last = new Node(); last.item = "of"; last.next = null;
oldlast.next = last;
first
it was the best
last
of
first
it was the best
oldlast
it was the best of
last first oldlast
Node oldlast = last; it was the best
last first oldlast
last
![Page 38: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/38.jpg)
38
Dequeue: Linked List Implementation
was the best of
was the best of first = first.next;
was the best of return item;
first
first
first
it String item = first.item;
last
last
last
garbage-collected
it
![Page 39: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/39.jpg)
39
Queue: Linked List Implementation
public class Queue<Item> { private Node first, last; private class Node { Item item; Node next; } public boolean isEmpty() { return first == null; } public void enqueue(Item item) { Node oldlast = last; last = new Node(); last.item = item; last.next = null; if (isEmpty()) first = last; else oldlast.next = last; } public Item dequeue() { Item item = first.item; first = first.next; if (isEmpty()) last = null; return item; } }
![Page 40: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/40.jpg)
40
Queue Applications
Some applications. iTunes playlist. Data buffers (iPod, TiVo). Asynchronous data transfer (file IO, pipes, sockets). Dispensing requests on a shared resource (printer, processor).
Simulations of the real world. Guitar string. Traffic analysis. Waiting times of customers at call center. Determining number of cashiers to have at a supermarket.
![Page 41: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/41.jpg)
41
M/D/1 Queuing Model
M/D/1 queue. Customers are serviced at fixed rate of µ per minute. Customers arrive according to Poisson process at rate of λ per minute.
Q. What is average wait time W of a customer? Q. What is average number of customers L in system?
Arrival rate λ Departure rate µ
Infinite queue Server
!
Pr[X " x] = 1# e#$xinter-arrival time has exponential distribution
![Page 42: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/42.jpg)
42
![Page 43: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/43.jpg)
43
Event-Based Simulation
public class MD1Queue { public static void main(String[] args) { double lambda = Double.parseDouble(args[0]); double mu = Double.parseDouble(args[1]); Queue<Double> q = new Queue<Double>(); double nextArrival = StdRandom.exp(lambda); double nextService = nextArrival + 1/mu; while(true) { if (nextArrival < nextService) { q.enqueue(nextArrival); nextArrival += StdRandom.exp(lambda); } else { double wait = nextService - q.dequeue(); // add waiting time to histogram if (q.isEmpty()) nextService = nextArrival + 1/mu; else nextService = nextService + 1/mu; } } } }
arrival
service
![Page 44: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/44.jpg)
44
Observation. As service rate approaches arrival rate, service goes to h***. Queueing theory.
λ = .2, µ = .25 λ = .2, µ = .21
M/D/1 Queue Analysis
!
W = "2µ (µ #")
+ 1µ
, L = " W
Little's law
![Page 45: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/45.jpg)
Extra Slides
![Page 46: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/46.jpg)
46
public class ArrayStack<Item> { private Item[] a; private int N; public ArrayStack(int capacity) { a = new Item[capacity]; } public boolean isEmpty() { return N == 0; } public void push(Item item) { a[N++] = item; } public Item pop() { return a[--N]; } }
Generic Stack: Array Implementation
The way it should be.
@#$*! generic array creation not allowed in Java
![Page 47: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/47.jpg)
47
public class ArrayStack<Item> { private Item[] a; private int N; public ArrayStack(int capacity) { a = (Item[]) new Object[capacity]; } public boolean isEmpty() { return N == 0; } public void push(Item item) { a[N++] = item; } public Item pop() { return a[--N]; } }
Generic Stack: Array Implementation
The way it is: an ugly cast in the implementation.
the ugly cast
![Page 48: CS 112 Introduction to Programmingzoo.cs.yale.edu/classes/cs112/2012-spring/lectures/lec26p1.pdf · 3 Collections Fundamental data types. Set of operations (add, remove, test if empty)](https://reader031.vdocument.in/reader031/viewer/2022031005/5b88232c7f8b9a1a248e5a6b/html5/thumbnails/48.jpg)
48
Queue: Array Implementation
Array implementation of a queue. Use array q[] to store items on queue. enqueue(): add new object at q[tail]. dequeue(): remove object from q[head]. Update head and tail modulo the capacity.
the best of times
0 1 2 3 4 5 6 7 8 9
q[]
head tail capacity = 10