Java Lecture 6
-
Upload
keitaro-rin -
Category
Documents
-
view
28 -
download
0
description
Transcript of Java Lecture 6
![Page 1: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/1.jpg)
13X11
Java Lecture 6
CS 1311X
Self-Referential Structures
Building a Queue
13X11
![Page 2: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/2.jpg)
13X11
Self-Referential?
• Simply means that a class has a reference to an object of that class
• Common applications– Linked list nodes– Binary tree nodes
![Page 3: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/3.jpg)
13X11
Linked Lists Nodes in Java
• Amazingly similar to a cons cell
• Stripped down version:
class Node
{
Object data;
Node next;
}
![Page 4: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/4.jpg)
13X11
data
next
Node ref
data
next
data
next
Some Object Some Object
A Node ObjectA Node Object
![Page 5: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/5.jpg)
13X11
More useful?class Node{
public Object data;public Node next;
public Node(Object data){
this(data, null); }
public Node(Object data, Node next){
this.data = data;this.next = next;
}
![Page 6: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/6.jpg)
13X11
Node (continued)public String toString(){
return "Node: " + data;}
![Page 7: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/7.jpg)
13X11
Pop Quizpublic String toString(){
return "Node: " + data + " Next:\n" + next;}
What does it do?What does it do?
13X11
data
next
Node ref
data
next
data
next
Some Object Some Object
![Page 8: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/8.jpg)
13X11
Test Mainpublic static void main(String args[]){
Node n1 = new Node("Hello ");Node n2 = new Node("World!")'n1.next = n2;
System.out.println("Test1\n" + n1);System.out.println("Test2\n" + n2);
Node nz = new Node("and Nod.");Node ny = new Node("Blynken ", nz);Node nx = new Node("Wynken, ", ny);System.out.println("Test3\n" + nx);ny = null;nz = null;System.out.println("Test4\n" + nx);
![Page 9: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/9.jpg)
13X11
Test Main OutputTest1Node: Hello Next:Node: World! Next:nullTest2Node: World! Next:nullTest3Node: Wynken, Next:Node: Blynken Next:Node: and Nod. Next:nullTest4Node: Wynken, Next:Node: Blynken Next:Node: and Nod. Next:null
13X11
Test Mainpublic static void main(String args[]){
Node n1 = new Node("Hello ");Node n2 = new Node("World!")'n1.next = n2;
System.out.println("Test1\n" + n1);System.out.println("Test2\n" + n2);
Node nz = new Node("and Nod.");Node ny = new Node("Blynken ", nz);Node nx = new Node("Wynken, ", ny);System.out.println("Test3\n" + nx);ny = null;nz = null;System.out.println("Test4\n" + nx);
![Page 10: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/10.jpg)
13X11
Test Main
Node head = new Node("Bob,", new Node("Carol, ",
new Node("Ted, ",new Node("and Alice."))));
System.out.println("Test5\n" + head);
Scheme like construction
![Page 11: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/11.jpg)
13X11
Test Main OutputTest5Node: Bob, Next:Node: Carol, Next:Node: Ted, Next:Node: and Alice. Next:null
13X11
Test Main
Node head = new Node("Bob,",new Node("Carol, ",
new Node("Ted, ",new Node("and Alice."))));
System.out.println("Test5\n" + head);
Scheme like construction
![Page 12: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/12.jpg)
13X11
Test Main
Node list = new Node("Larry,", new Node(null,
new Node("Moe, ",new Node("and Curly."))));
System.out.println("Test6\n" + list);
} // main
} // Node
Another Scheme like construction
![Page 13: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/13.jpg)
13X11
Test Main Output
Test6Node: Larry, Next:Node: *null* Next:Node: Moe, Next:Node: and Curly. Next:null
13X11
Test Main
Node list = new Node("Larry,",new Node(null,
new Node("Moe, ",new Node("and Curly."))));
System.out.println("Test6\n" + list);
} // main
} // Node
Another Scheme like construction
![Page 14: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/14.jpg)
13X11
Questions?
![Page 15: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/15.jpg)
13X11
![Page 16: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/16.jpg)
13X11
So What's a Queue?
• First-In First-Out Data Structure• British word for line (Queue up for a pint.)• French word for tail (Like a horse's tail).• Multiple ways to implement
– Common to use Linked list– etc.
• Typical behaviors– isEmpty – enqueue– dequeue– head (or front or top or peek)
![Page 17: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/17.jpg)
13X11
Linked List Implementation
• Can use our Node class
• Will need another class with a catchy name like Queue
• What's in the Queue class?– head pointer (reference)– tail pointer (reference)– Note: If head == null then tail == null (and vice versa)
and the Queue isEmpty!– implementation of behaviors
![Page 18: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/18.jpg)
13X11
isEmpty
• Returns a boolean
• Something like:
return (head == null);
![Page 19: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/19.jpg)
13X11
Let's write some code!class Queue{
private Node head;private Node tail;
public Queue(){
head = null;tail = null;
}
public boolean isEmpty(){
return (head == null);}
![Page 20: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/20.jpg)
13X11
Enqueue(Object newData)• Case: isEmpty()
• Create a new Node– data points to newData
• Make head and tail point to the new Node
• Case: ! isEmpty()
• Create a new Node– data points to newData
• Make the old tail Node point to the new Node
• Make the tail pointer point to the new Node
![Page 21: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/21.jpg)
13X11
Enqueue(Object newData)• Create a new Node
– data points to newData
• Case: isEmpty();
• Make head and tail point to the new Node
• Create a new Node– data points to newData
• Case: ! isEmpty()
• Make the old tail Node point to the new Node
• Make the tail pointer point to the new Node
![Page 22: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/22.jpg)
13X11
Enqueue(newData): isEmpty()
head
tail
Queue Object
![Page 23: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/23.jpg)
13X11
Nota Bene
In the case of a Queue we will always make new Nodes with the next
reference set equal to null
In the case of a Queue we will always make new Nodes with the next
reference set equal to null
13X11
More useful?class Node{
public Object data;public Node next;
public Node(Object data){
this(data, null);}
public Node(Object data, Node next){
this.data = data;this.next = next;
}
![Page 24: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/24.jpg)
13X11
Enqueue(newData): isEmpty()
head
tail
Queue Object
data
next
newData
temp
![Page 25: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/25.jpg)
13X11
Enqueue(newData): isEmpty()
head
tail
Queue Object
data
next
newData
temp
![Page 26: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/26.jpg)
13X11
Enqueue(newData): isEmpty()
head
tail
Queue Object
data
next
newData
temp
![Page 27: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/27.jpg)
13X11
Enqueue(newData): isEmpty()
head
tail
Queue Object
data
next
newData
![Page 28: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/28.jpg)
13X11
Questions?
![Page 29: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/29.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
![Page 30: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/30.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
newData
temp
![Page 31: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/31.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
newData
temp
![Page 32: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/32.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
newData
temp
![Page 33: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/33.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
newData
![Page 34: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/34.jpg)
13X11
Questions?
![Page 35: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/35.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
![Page 36: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/36.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
temp
data
next
newData
![Page 37: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/37.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
temp
data
next
newData
![Page 38: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/38.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
temp
data
next
newData
![Page 39: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/39.jpg)
13X11
Enqueue(newData): ! isEmpty()
head
tail
Queue Object
data
next
data
next
data
next
newData
![Page 40: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/40.jpg)
13X11
Questions?
![Page 41: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/41.jpg)
13X11
Let's write some more code!public void enqueue(Object o){
Node temp;temp = new Node(o);if(isEmpty()){
head = temp;tail = temp;
}else // Queue is not empty...{
tail.next = temp;tail = temp;
}}
![Page 42: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/42.jpg)
13X11
Almost done! Now Dequeue• Assume ! isEmpty
– we'll check
• Save value that head data reference is pointing to– (return value)
• Make head pointer point to whatever first node's next is pointing to...
• Case: head is not null
• Assume ! isEmpty– we'll check
• Save value that head data reference is pointing to– (return value)
• Make head pointer point to whatever first node's next is pointing to...
• Case: head is null• Set tail to null
![Page 43: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/43.jpg)
13X11
Red
Dequeue()
head
tail
Queue Object
data
next
data
next
Green
data
next
Blue
![Page 44: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/44.jpg)
13X11
Red
Dequeue()
head
tail
Queue Object
data
next
data
next
Green
data
next
Blue
retval
![Page 45: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/45.jpg)
13X11
Red
Dequeue()
head
tail
Queue Object
data
next
data
next
Green
data
next
Blue
retval
![Page 46: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/46.jpg)
13X11
Red
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
retval
![Page 47: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/47.jpg)
13X11
Red
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
retval
Return
![Page 48: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/48.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
![Page 49: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/49.jpg)
13X11
Questions?
![Page 50: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/50.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
![Page 51: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/51.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
retval
![Page 52: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/52.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Green
data
next
Blue
retval
![Page 53: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/53.jpg)
13X11
Dequeue()
head
tail
Queue ObjectGreen
data
next
Blue
retval
Return
![Page 54: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/54.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
![Page 55: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/55.jpg)
13X11
Questions?
![Page 56: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/56.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
![Page 57: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/57.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
retval
![Page 58: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/58.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
retval
![Page 59: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/59.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
retval
isEmpty???
![Page 60: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/60.jpg)
13X11
Dequeue()
head
tail
Queue Object
data
next
Blue
retval
![Page 61: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/61.jpg)
13X11
Dequeue()
head
tail
Queue Object
Blue
retval
![Page 62: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/62.jpg)
13X11
Dequeue()
head
tail
Queue Object
Blue
retval
Return
![Page 63: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/63.jpg)
13X11
Dequeue()
head
tail
Queue Object
![Page 64: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/64.jpg)
13X11
Dequeue Codepublic Object dequeue() {
Object retval;if(isEmpty()){
retval = null;}else{
retval = head.data;head = head.next;if(isEmpty()){
tail = null;}
}return retval;
}
![Page 65: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/65.jpg)
13X11
Test Mainpublic static void main(String args[]){
Queue q;q = new Queue();q.enqueue("yada1");q.enqueue("yada2");q.enqueue("yada3");
while(! q.isEmpty()){
System.out.println(q.dequeue());}
} // main
} // Queue
![Page 66: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/66.jpg)
13X11
Questions?
![Page 67: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/67.jpg)
13X11
Over break...
• Rewrite class Node with– private head and tail– getHead and setHead methods– getNext and setNext methods
• Rewrite class Queue using your new Node
• Build a working scale model of the Three-Mile Island Power Plant
• Have a Merry Christmas!
![Page 68: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/68.jpg)
13X11
What you should know about now• Syntax
– Operators– Operator overloading– Assignment statements– Control structures
• if else
• case
– Iterative structures• while
• do while
• for
• Data Types– Primitives– References
• class
• attribute– access modifiers
• public/private
– static– final/constants– initialization
![Page 69: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/69.jpg)
13X11
What you should know about now• constructors
– access modifiers– default– chaining– overloading
• methods– access modifiers
• public/private
– static– return type/void– main method– accessors– modifiers– overloading
![Page 70: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/70.jpg)
13X11
What you should know about now• object/instance
• Inheritance– Redefinition (Overriding)– Extension– super class– subclass– abstract
• Polymorphism
• Compilation– reference type checking– method checking– Type mismatch checking
• Run Time– interpreting– dynamic binding– Java virtual machine
![Page 71: Java Lecture 6](https://reader035.fdocuments.net/reader035/viewer/2022070401/5681364c550346895d9dcd17/html5/thumbnails/71.jpg)
13X11