Link public class Link private Object data private
( )שדות ובנאים Link המחלקה public class Link { private Object data; private Link next; // getters … setters… public Object get. Data(){return data; } public void set. Data(Object o){data= o; } public Link get. Next() {return next; } public void set. Next(Link next){this. next = next; }
( )שדות ובנאים Link המחלקה public class Link { private Object data; private Link next; // getters … setters… public Link(Object data, Link next) { this. data = data; this. next = next; } public Link(Object data) { this(data, null); } }
add. Next השיטה public void add. Next(Object to. Add) { // Prepare a new link and make it point to the // next of this Link to. Add. Link = new Link(to. Add, next); next = to. Add. Link; }
remove. Next השיטה public Object remove. Next() { if (next == null) throw new Null. Pointer. Exception("No object to remove"); Object ans = next. get. Data(); next = next. get. Next(); return ans; }
to. String השיטה public String to. String() { return "" + data; }
: Link נראה דוגמה לקוד שמשתמש במחלקה Link starter = new Link("I think"); Link middle = new Link("I have"); Link end = new Link("a De. Ja. Vu!"); starter. set. Next(middle); middle. set. Next(end); end. set. Next(null); for(Link tmp = starter; tmp != null; tmp=tmp. get. Next()) System. out. print(tmp + " "); n
? מספיקה Link האם המחלקה Link starter = new Link("I think"); Link middle = new Link("I have"); Link end = new Link("a De. Ja. Vu!"); starter. set. Next(middle); middle. set. Next(end); end. set. Next(starter); for(Link tmp = starter; tmp != null; tmp=tmp. get. Next()) System. out. print(tmp + " ");
? מספיקה Link האם המחלקה : Link פלט הדוגמה לקוד שהשתמש במחלקה I think I have a De. Ja. Vu! I think I have a De. Ja. Vu! I think I have a De. Ja. Vu! I think I
- בנאי ו , )שדות Linked. List המחלקה (is. Empty public class Linked. List { private Link first; public Linked. List() { first = null; } public boolean is. Empty() { return (first == null); }
add. First השיטה public void add. First(Object o) { Link new. Link = new Link(o, first); first = new. Link; }
remove. First השיטה public Object remove. First() { if (is. Empty()) throw new Null. Pointer. Exception("No object to remove"); Object res = first. get. Data(); first = first. get. Next(); return res; }
contains השיטה public boolean contains(Object o) { boolean ans = false; Link curr = first; while(!ans && curr != null){ if (safe. Equals(curr. get. Data(), o)){ ans = true; } curr = curr. get. Next(); } // while return ans; }
safe. Equals השיטה private boolean safe. Equals(Object o 1, Object o 2){ boolean ans; if (o 1 == null) ans = (o 2 == null); else ans = o 1. equals(o 2); return ans; }
to. String השיטה public String to. String() { String ans = "List: "; if (is. Empty()) ans = ans + "Empty List"; else{ Link curr = first; while(curr != null){ ans = ans + curr. to. String()+ ", "; curr = curr. get. Next(); } } return ans; }
remove. All השיטה public void remove. All(Object o) { while ((first != null) && safe. Equals(first. get. Data(), o)) remove. First(); if (!is. Empty()){ Link curr = first; while(curr. get. Next() != null){ if(safe. Equals(curr. get. Next(). get. Data(), o)){ curr. remove. Next(); } else curr = curr. get. Next(); } // while } // if }//remove. All
גירסה ראשונה - reverse השיטה public void reverse() { Linked. List tmp = new Linked. List(); for(Link i=first; i!=null; i=i. get. Next()) { tmp. add. First(i. get. Data()); } first = tmp. first; }
רשימה כמבנה רקורסיבי : שיטה המדפיסה את אברי הרשימה בסדר הפוך : Link במחלקה public void print. Backward() { if (next != null) next. print. Backward(); System. out. println(data); }
– במחלקה reverse (2) Linked. List null next. Link prev. Link current next. Link = curr. get. Next(); null
next. Link = curr. get. Next(); null curr. set. Next(prev); null
curr. set. Next(prev); null prev = curr; null
prev = curr; null curr = next. Link; null
null
– במחלקה reverse (2) Linked. List public void reverse 2(){ Link prev = null; Link curr = first; Link next. Link = null; while(curr != null){ next. Link = curr. get. Next(); curr. set. Next(prev); prev = curr; curr = next. Link; } first = prev; }
רשימה כמבנה - reverse (3) רקורסיבי : Linked. List במחלקה public void reverse 3() { if (first != null) first = first. reverse 3(); }
רשימה כמבנה - reverse (3) רקורסיבי null Link first = next. reverse 3(); null
null next. set. Next(this);
null next = null;
רשימה כמבנה - reverse (3) רקורסיבי : Link במחלקה public Link reverse 3() { if (next == null) return this; Link first = next. reverse 3(); next. set. Next(this); next = null; return first; }
class Main. Link 2 { public static void main(String[] args) { Linked. List l = new Linked. List(); l. add. First(new Integer(1)); l. add. First(new Integer(2)); l. add. First(new Integer(3)); l. add. First(new Integer(4)); l. print(); //-> 4 3 2 1 l. print. Backward(); //-> 1 2 3 4 l. reverse 3(); l. print(); //-> 1 2 3 4 } }
כמחלקה פרטית Link public class Linked. List 2 { private Link 2 first; public Linked. List 2() { first = null; } private static class Link 2 { private Object data; private Link 2 next; public Link 2(Object data, Link 2 next) { this. data = data; this. next = next; }. . // methods of Link 2. } // class Link 2. . // methods of Linked. List 2. } // class Linked. List 2
- Slides: 45