Presentation is loading. Please wait.

Presentation is loading. Please wait.

A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510.

Similar presentations


Presentation on theme: "A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510."— Presentation transcript:

1 A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510

2 A Recursive List Paradigm List Paradigms A Recursive List Paradigm Examples Unfocused vs. focused paradigms From the recursive paradigm to a positional paradigm

3 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

4 A Recursive List Paradigm McCarthys LISP –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

5 A Recursive List Paradigm Constructors RecursiveList () empty list RecursiveList (Object Head) non-empty list w empty tail RecursiveList (Object Head, RecursiveList Tail) list with tail

6 A Recursive List Paradigm Methods boolean isEmpty() RecursiveList tailOf() Object getHead() void setHead(Object NewHead) void insert(RecursiveList List) RecursiveList remove()

7 A Recursive List Paradigm Utility Methods void swap(RecursiveList List) String toString()

8 A Recursive List Paradigm What about iterator support –Recursion is the traversal method

9 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(); }

10 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); }

11 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()); }

12 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(); }

13 Examples OrderedList Class (composed with RecursiveList) –Simplicity of insert –Simplicity of merge –But what about iteration?? (be patient)

14 Examples What about iterator support

15 Unfocused vs. focused paradigms G&T –1 Constructors –13 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

16 Unfocused vs. focused paradigms S –2 Constructors –14 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

17 Unfocused vs. focused paradigms C&P –1 Constructors –7 Methods –0 Utility Methods RecursiveList –3 Constructors –6 Methods –2 Utility methods

18 From the recursive paradigm to a positional paradigm What about iteration? What about the positional paradigm? Constructed on top of the recursive paradigm.

19 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()

20 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();

21 Conclusions Lean, mean, well focused is usually better that the Swiss Army Knife approach It is even nicer with trees –RecBinTree Class


Download ppt "A Recursive List Paradigm Jack Beidler Yaodong Bi Bob McCloskey Computing Sciences University of Scranton Scranton, PA 18510."

Similar presentations


Ads by Google