a recursive list paradigm jack beidler yaodong bi bob mccloskey computing sciences university of...

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

Upload: laura-kittles

Post on 30-Mar-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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/