![Page 1: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/1.jpg)
A Recursive List Paradigm
Jack Beidler
Yaodong Bi
Bob McCloskey
Computing Sciences
University of Scranton
Scranton, PA 18510
![Page 2: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/2.jpg)
A Recursive List Paradigm
• List Paradigms
• A Recursive List Paradigm
• Examples
• Unfocused vs. focused paradigms
• From the recursive paradigm to a positional paradigm
![Page 3: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/3.jpg)
List Paradigms• Lists and the Java API
– Interface List and its implementations• 25 methods
• Swiss Army Knif Approach (multiple paradigms)
• Focused Paradigms - a few well chosen coordinated methods– Array Analogy Paradigm– Positional Paradigm (One-way)– Positional Paradigm (Two-way)– Recursive Paradigm
![Page 4: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/4.jpg)
A Recursive List Paradigm• McCarthy’s LISP
http://www-formal.stanford.edu/jmc/history/lisp/lisp.html
– No compromise recursive paradigm– A list:
• isEmpty• or (head, tail)
– head is an object– tail is a (possibly empty) sublist
– A Java Implementation• 3 constructors• 6 methods• 2 utility methods
![Page 5: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/5.jpg)
A Recursive List Paradigm
• ConstructorsRecursiveList ()
empty list
RecursiveList (Object Head)
non-empty list w empty tail
RecursiveList
(Object Head, RecursiveList Tail)list with tail
![Page 6: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/6.jpg)
A Recursive List Paradigm
• Methodsboolean isEmpty()
RecursiveList tailOf()
Object getHead()
void setHead(Object NewHead)
void insert(RecursiveList List)
RecursiveList remove()
![Page 7: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/7.jpg)
A Recursive List Paradigm
• Utility Methodsvoid swap(RecursiveList List)
String toString()
![Page 8: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/8.jpg)
A Recursive List Paradigm
• What about iterator support– Recursion is the traversal method
![Page 9: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/9.jpg)
Examples• OrderedList Class (composed with RecursiveList)
import java.util.*;
class OrderedList {
private Comparator c;
protected RecursiveList L;
OrderedList (Comparator c){
this.c=c;
L = new RecursiveList();
}
![Page 10: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/10.jpg)
Examples• OrderedList Class (composed with RecursiveList)
…private void RecInsert (Object Obj, RecursiveList List){ if(List.isEmpty() || (c.compare(Obj, List.getHead())<0)) List.insert(new RecursiveList(Obj)); else RecInsert(Obj, List.tailOf());}
public void insert(Object Obj){ RecInsert(Obj, L);}
![Page 11: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/11.jpg)
Examples• OrderedList Class (composed with RecursiveList)…private void Recmerge (RecursiveList Source1,
RecursiveList Source2, RecursiveList Merged){ if (Source1.isEmpty()) Merged.swap(Source2); else if (Source2.isEmpty()) Merged.swap(Source1); else { if (c.compare(Source1.getHead() , Source2.getHead())<0) Merged.insert(Source1.remove()); else Merged.insert(Source2.remove()); Recmerge(Source1, Source2, Merged.tailOf()); }}
![Page 12: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/12.jpg)
Examples• OrderedList Class (composed with RecursiveList) …
public void merge(OrderedList Source1,
OrderedList Source2){
Recmerge(Source1.L, Source2.L, this.L);
}
public String toString(){
return L.toString();
}
}
![Page 13: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/13.jpg)
Examples
• OrderedList Class (composed with RecursiveList)– Simplicity of insert– Simplicity of merge– But what about iteration?? (be patient)
![Page 14: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/14.jpg)
Examples
• What about iterator support
![Page 15: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/15.jpg)
Unfocused vs. focused paradigms
• G&T– 1 Constructors
– 13 Methods
– 0 Utility Methods
• RecursiveList– 3 Constructors
– 6 Methods
– 2 Utility methods
![Page 16: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/16.jpg)
Unfocused vs. focused paradigms
• S– 2 Constructors
– 14 Methods
– 0 Utility Methods
• RecursiveList– 3 Constructors
– 6 Methods
– 2 Utility methods
![Page 17: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/17.jpg)
Unfocused vs. focused paradigms
• C&P– 1 Constructors
– 7 Methods
– 0 Utility Methods
• RecursiveList– 3 Constructors
– 6 Methods
– 2 Utility methods
![Page 18: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/18.jpg)
From the recursive paradigm to a positional paradigm
• What about iteration?
• What about the positional paradigm?
• Constructed on top of the recursive paradigm.
![Page 19: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/19.jpg)
From the recursive paradigm to a positional paradigm
void front()
void rear()
void next()
void prev()
void append(Object O)
void setObject(Object O)
Object getObject()
boolean offRear()
boolean backingUp()
![Page 20: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/20.jpg)
From the recursive paradigm to a positional paradigm
RecursiveList Order = new RecursiveList(); … RecursiveListIterator It = new RecursiveListIterator(Order); for (It.front(); !It.offRear(); It.next()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println(); for (It.rear(); It.backingUp(); It.prev()) System.out.print(((Integer)It.getObject())+"\t"); System.out.println();
![Page 21: A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510](https://reader035.vdocument.in/reader035/viewer/2022070306/5518d0cf550346a61f8b5cb0/html5/thumbnails/21.jpg)
Conclusions
• Lean, mean, well focused is usually better that the Swiss Army Knife approachhttp://www.cs.scranton.edu/~beidler/java/OneWay/
• It is even nicer with trees– RecBinTree Classhttp://www.cs.scranton.edu/~beidler/java/RecBinTree/