Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.26 KB | None | 0 0
  1. package ads;
  2.  
  3. import java.util.Iterator;
  4. import java.util.NoSuchElementException;
  5. import java.util.logging.Level;
  6. import java.util.logging.Logger;
  7.  
  8. public class AbstrDoubleList<T>
  9.   implements IAbstrDoubleList<T>
  10. {
  11.   private AbstrDoubleList<T>.Node _prvni;
  12.   private AbstrDoubleList<T>.Node _posledni;
  13.   private AbstrDoubleList<T>.Node _aktualni;
  14.  
  15.   private class Node
  16.   {
  17.     private AbstrDoubleList<T>.Node _predchozi;
  18.     private AbstrDoubleList<T>.Node _nasledujici;
  19.     private T _data;
  20.    
  21.     public Node()
  22.     {
  23.       this._data = _data;
  24.       this._predchozi = null;
  25.       this._nasledujici = null;
  26.     }
  27.    
  28.     public Node(AbstrDoubleList<T>.Node _predchozi, T _nasledujici)
  29.     {
  30.       this._predchozi = _predchozi;
  31.       this._nasledujici = _nasledujici;
  32.       this._data = _data;
  33.     }
  34.    
  35.     public AbstrDoubleList<T>.Node getPredchozi()
  36.     {
  37.       return this._predchozi;
  38.     }
  39.    
  40.     public void setPredchozi(AbstrDoubleList<T>.Node _predchozi)
  41.     {
  42.       this._predchozi = _predchozi;
  43.     }
  44.    
  45.     public AbstrDoubleList<T>.Node getNasledujici()
  46.     {
  47.       return this._nasledujici;
  48.     }
  49.    
  50.     public void setNasledujici(AbstrDoubleList<T>.Node _nasledujici)
  51.     {
  52.       this._nasledujici = _nasledujici;
  53.     }
  54.    
  55.     public T getData()
  56.     {
  57.       return this._data;
  58.     }
  59.    
  60.     public void setData(T _data)
  61.     {
  62.       this._data = _data;
  63.     }
  64.   }
  65.  
  66.   private void testPrazdny()
  67.     throws NoSuchElementException
  68.   {
  69.     if (jePrazdny()) {
  70.       throw new NoSuchElementException();
  71.     }
  72.   }
  73.  
  74.   private void testAktualni()
  75.     throws NoSuchElementException
  76.   {
  77.     if (this._aktualni == null) {
  78.       throw new NoSuchElementException();
  79.     }
  80.   }
  81.  
  82.   private void testData(T data)
  83.     throws NullPointerException
  84.   {
  85.     if (data == null) {
  86.       throw new NullPointerException();
  87.     }
  88.   }
  89.  
  90.   private boolean isAktualniPrvni()
  91.   {
  92.     return this._aktualni == this._prvni;
  93.   }
  94.  
  95.   private boolean isAktualniPosledni()
  96.   {
  97.     return this._aktualni == this._posledni;
  98.   }
  99.  
  100.   public void zrus()
  101.   {
  102.     if (!jePrazdny())
  103.     {
  104.       AbstrDoubleList<T>.Node temp = this._prvni;
  105.       while (temp != null)
  106.       {
  107.         temp = temp.getNasledujici();
  108.         this._prvni = null;
  109.         this._prvni = temp;
  110.       }
  111.       this._prvni = (this._posledni = this._aktualni = null);
  112.     }
  113.   }
  114.  
  115.   public boolean jePrazdny()
  116.   {
  117.     return this._prvni == null;
  118.   }
  119.  
  120.   public void vlozPrvni(T prvek)
  121.     throws NullPointerException
  122.   {
  123.     testData(prvek);
  124.    
  125.     AbstrDoubleList<T>.Node temp = new Node(prvek);
  126.     if (jePrazdny())
  127.     {
  128.       this._prvni = temp;
  129.       this._posledni = temp;
  130.     }
  131.     else
  132.     {
  133.       this._prvni.setPredchozi(temp);
  134.       temp.setNasledujici(this._prvni);
  135.       this._prvni = temp;
  136.     }
  137.   }
  138.  
  139.   public void vlozPosledni(T prvek)
  140.     throws NullPointerException
  141.   {
  142.     testData(prvek);
  143.     if (jePrazdny())
  144.     {
  145.       vlozPrvni(prvek);
  146.     }
  147.     else
  148.     {
  149.       AbstrDoubleList<T>.Node temp = new Node(prvek);
  150.       temp.setPredchozi(this._posledni);
  151.       this._posledni.setNasledujici(temp);
  152.       this._posledni = temp;
  153.     }
  154.   }
  155.  
  156.   public void vlozNaslednika(T prvek)
  157.     throws NullPointerException, NoSuchElementException
  158.   {
  159.     testData(prvek);
  160.     testAktualni();
  161.     testPrazdny();
  162.     if (isAktualniPosledni())
  163.     {
  164.       vlozPosledni(prvek);
  165.     }
  166.     else
  167.     {
  168.       AbstrDoubleList<T>.Node temp = new Node(this._aktualni, this._aktualni.getNasledujici(), prvek);
  169.       this._aktualni.getNasledujici().setPredchozi(temp);
  170.       this._aktualni.setNasledujici(temp);
  171.     }
  172.   }
  173.  
  174.   public void vlozPredchudce(T prvek)
  175.     throws NullPointerException, NoSuchElementException
  176.   {
  177.     testData(prvek);
  178.     testAktualni();
  179.     testPrazdny();
  180.     if (isAktualniPrvni())
  181.     {
  182.       vlozPrvni(prvek);
  183.     }
  184.     else
  185.     {
  186.       AbstrDoubleList<T>.Node temp = new Node(this._aktualni.getPredchozi(), this._aktualni, prvek);
  187.       this._aktualni.getPredchozi().setNasledujici(temp);
  188.       this._aktualni.setPredchozi(temp);
  189.     }
  190.   }
  191.  
  192.   public T zpristupniAktualni()
  193.     throws NoSuchElementException
  194.   {
  195.     testAktualni();
  196.     testPrazdny();
  197.    
  198.     return this._aktualni.getData();
  199.   }
  200.  
  201.   public T zpristupniPrvni()
  202.     throws NoSuchElementException
  203.   {
  204.     testPrazdny();
  205.    
  206.     this._aktualni = this._prvni;
  207.     return this._aktualni.getData();
  208.   }
  209.  
  210.   public T zpristupniPosledni()
  211.     throws NoSuchElementException
  212.   {
  213.     testPrazdny();
  214.    
  215.     this._aktualni = this._posledni;
  216.     return this._aktualni.getData();
  217.   }
  218.  
  219.   public T zpristupniNaslednika()
  220.     throws NoSuchElementException
  221.   {
  222.     testPrazdny();
  223.     testAktualni();
  224.     if (this._aktualni.getNasledujici() == null) {
  225.       throw new NoSuchElementException();
  226.     }
  227.     this._aktualni = this._aktualni.getNasledujici();
  228.     return this._aktualni.getData();
  229.   }
  230.  
  231.   public T zpristupniPredchudce()
  232.     throws NoSuchElementException
  233.   {
  234.     testPrazdny();
  235.     testAktualni();
  236.     if (this._aktualni.getPredchozi() == null) {
  237.       throw new NoSuchElementException();
  238.     }
  239.     this._aktualni = this._aktualni.getPredchozi();
  240.     return this._aktualni.getData();
  241.   }
  242.  
  243.   public T odeberAktualni()
  244.     throws NoSuchElementException
  245.   {
  246.     testPrazdny();
  247.     testAktualni();
  248.     T retData;
  249.     T retData;
  250.     if (isAktualniPrvni())
  251.     {
  252.       retData = odeberPrvni();
  253.     }
  254.     else
  255.     {
  256.       T retData;
  257.       if (isAktualniPosledni())
  258.       {
  259.         retData = odeberPosledni();
  260.       }
  261.       else
  262.       {
  263.         retData = this._aktualni.getData();
  264.         this._aktualni.getPredchozi().setNasledujici(this._aktualni.getNasledujici());
  265.         this._aktualni.getNasledujici().setPredchozi(this._aktualni.getPredchozi());
  266.         this._aktualni = null;
  267.       }
  268.     }
  269.     this._aktualni = this._prvni;
  270.     return retData;
  271.   }
  272.  
  273.   public T odeberPrvni()
  274.     throws NoSuchElementException
  275.   {
  276.     testPrazdny();
  277.     T retData;
  278.     if (this._prvni == this._posledni)
  279.     {
  280.       T retData = this._prvni.getData();
  281.       zrus();
  282.     }
  283.     else
  284.     {
  285.       retData = this._prvni.getData();
  286.       this._prvni.getNasledujici().setPredchozi(null);
  287.       this._prvni = this._prvni.getNasledujici();
  288.     }
  289.     return retData;
  290.   }
  291.  
  292.   public T odeberPosledni()
  293.     throws NoSuchElementException
  294.   {
  295.     testPrazdny();
  296.     T retData;
  297.     T retData;
  298.     if (this._prvni == this._posledni)
  299.     {
  300.       retData = odeberPrvni();
  301.     }
  302.     else
  303.     {
  304.       retData = this._posledni.getData();
  305.       this._posledni.getPredchozi().setNasledujici(null);
  306.       this._posledni = this._posledni.getPredchozi();
  307.     }
  308.     return retData;
  309.   }
  310.  
  311.   public T odeberNaslednika()
  312.     throws NoSuchElementException, NullPointerException
  313.   {
  314.     testPrazdny();
  315.     testAktualni();
  316.     if (isAktualniPosledni()) {
  317.       throw new NoSuchElementException();
  318.     }
  319.     T retData;
  320.     T retData;
  321.     if (this._aktualni == this._posledni.getPredchozi())
  322.     {
  323.       retData = odeberPosledni();
  324.     }
  325.     else
  326.     {
  327.       retData = this._aktualni.getNasledujici().getData();
  328.      
  329.       this._aktualni.getNasledujici().getNasledujici().setPredchozi(this._aktualni);
  330.       this._aktualni.setNasledujici(this._aktualni.getNasledujici().getNasledujici());
  331.     }
  332.     return retData;
  333.   }
  334.  
  335.   public T odeberPredchudce()
  336.     throws NoSuchElementException, NullPointerException
  337.   {
  338.     testPrazdny();
  339.     testAktualni();
  340.     if (isAktualniPrvni()) {
  341.       throw new NoSuchElementException();
  342.     }
  343.     T retData;
  344.     T retData;
  345.     if (this._aktualni == this._prvni.getNasledujici())
  346.     {
  347.       retData = odeberPrvni();
  348.     }
  349.     else
  350.     {
  351.       retData = this._aktualni.getPredchozi().getData();
  352.      
  353.       this._aktualni.getPredchozi().getPredchozi().setNasledujici(this._aktualni);
  354.       this._aktualni.setPredchozi(this._aktualni.getPredchozi().getPredchozi());
  355.       return retData;
  356.     }
  357.     return retData;
  358.   }
  359.  
  360.   public Iterator<T> iterator()
  361.   {
  362.     new Iterator()
  363.     {
  364.       private AbstrDoubleList<T>.Node akt = AbstrDoubleList.this._prvni;
  365.       private T pom = null;
  366.       private boolean opak = false;
  367.       private boolean empty = false;
  368.      
  369.       public boolean hasNext()
  370.       {
  371.         if (!AbstrDoubleList.this.jePrazdny())
  372.         {
  373.           if (this.empty) {
  374.             return false;
  375.           }
  376.           return (this.akt != AbstrDoubleList.this._prvni) || (this.opak != true);
  377.         }
  378.         return false;
  379.       }
  380.      
  381.       public T next()
  382.       {
  383.         if (hasNext())
  384.         {
  385.           this.opak = true;
  386.           this.pom = this.akt._data;
  387.           if (this.akt._nasledujici != null) {
  388.             this.akt = this.akt._nasledujici;
  389.           } else {
  390.             this.empty = true;
  391.           }
  392.           return this.pom;
  393.         }
  394.         throw new NoSuchElementException("no more elements");
  395.       }
  396.      
  397.       public void remove()
  398.       {
  399.         try
  400.         {
  401.           AbstrDoubleList.this.odeberAktualni();
  402.         }
  403.         catch (Exception ex)
  404.         {
  405.           Logger.getLogger(AbstrDoubleList.class.getName()).log(Level.SEVERE, null, ex);
  406.         }
  407.       }
  408.     };
  409.   }
  410. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement