Advertisement
Sylv3rWolf

zadanieelementylisty

Oct 27th, 2015
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.90 KB | None | 0 0
  1. public class ElemOne<T> {
  2.    
  3.     private T data;
  4.     private ElemOne next;
  5.  
  6.     public ElemOne(T data) {
  7.         this.data = data;
  8.     }
  9.  
  10.     public ElemOne(T data, ElemOne next) {
  11.         this.data = data;
  12.         this.next = next;
  13.     }
  14.  
  15.     public T getData() {
  16.         return data;
  17.     }
  18.  
  19.     public void setData(T data) {
  20.         this.data = data;
  21.     }
  22.  
  23.     public ElemOne getNext() {
  24.         return next;
  25.     }
  26.  
  27.     public void setNext(ElemOne next) {
  28.         this.next = next;
  29.     }
  30.    
  31.     public boolean hasNext(){
  32.         return next != null;
  33.     }
  34. }
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. public class ListOne<T> implements IList<T> {
  44.  
  45.     ElemOne<T> pierwszy;
  46.     ElemOne<T> ostatni;
  47.     int licznik;
  48.  
  49.     public ListOne() {
  50.         pierwszy = null;
  51.         ostatni = null;
  52.         licznik = 0;
  53.     }
  54.  
  55.     @Override
  56.     public void addFirst(T newData) {
  57.         ElemOne<T> eo = new ElemOne(newData, null);
  58.         if (pierwszy == null) {
  59.             pierwszy = eo;
  60.             ostatni = eo;
  61.         } else {
  62.             ElemOne<T> tmp = pierwszy;
  63.             pierwszy = eo;
  64.             pierwszy.setNext(tmp);
  65.         }
  66.         licznik++;
  67.     }
  68.  
  69.     @Override
  70.     public void addLast(T newData) {
  71.         ElemOne<T> last = new ElemOne(newData, null);
  72.         ElemOne<T> tmp = ostatni;
  73.         ostatni = last;
  74.         tmp.setNext(ostatni);
  75.         licznik ++;
  76.     }
  77.  
  78.     @Override
  79.     public void addAtPosition(T newData, int position) throws ListException {
  80.         if (position == licznik + 1){
  81.             addLast(newData);
  82.             return;
  83.         }
  84.        
  85.         ElemOne<T> ee = new ElemOne(newData,null);
  86.         System.out.println("if position > licznik " + position + " > " + licznik);
  87.         if (position > licznik){
  88.             //dupa nie da sie - wywalic wyjatek
  89.         } else {
  90.             ElemOne<T> elementAtPosition = getElementAtPosition(position);
  91.             ElemOne<T> prev = getPrev(pierwszy, elementAtPosition);
  92.             if (prev == null){
  93.                 //dodanie jako pierwszy
  94.                 ElemOne<T> tmp = pierwszy;
  95.                 pierwszy = ee;
  96.                 pierwszy.setNext(tmp);
  97.             } else {
  98.                 System.out.println("prev = " + prev.getData().toString());
  99.                 prev.setNext(ee);
  100.                 ee.setNext(elementAtPosition);
  101.             }
  102.             licznik ++;
  103.         }
  104.     }
  105.  
  106.     @Override
  107.     public int size() {
  108.         return licznik-1;
  109.     }
  110.  
  111.     @Override
  112.     public T removeFirst() throws ListException {
  113.         ElemOne<T> elementAtPosition = getElementAtPosition(1);
  114.         ElemOne<T> prev = getPrev(pierwszy, elementAtPosition);
  115.         prev.setNext(elementAtPosition.getNext());
  116.         return elementAtPosition.getData();
  117.     }
  118.  
  119.     @Override
  120.     public T removeLast() throws ListException {
  121.         ElemOne<T> eo = new ElemOne(ostatni);
  122.         ElemOne<T> prev = getPrev(pierwszy, ostatni);
  123.         ostatni = prev;
  124.         ostatni.setNext(null);
  125.         return eo.getData();
  126.     }
  127.  
  128.     @Override
  129.     public T remove(int position) throws ListException {
  130.         ElemOne<T> elementAtPosition = getElementAtPosition(position);
  131.         ElemOne<T> prev = getPrev(pierwszy, elementAtPosition);
  132.         prev.setNext(elementAtPosition.getNext());
  133.         return elementAtPosition.getData();
  134.     }
  135.  
  136.     @Override
  137.     public int find(T dataToFind) {
  138.         int index = 1;
  139.         ElemOne<T> tmp = pierwszy;
  140.         while(index != licznik){
  141.             if (tmp.getData().equals(dataToFind)){
  142.                 return index;
  143.             } else {
  144.                 tmp = tmp.getNext();
  145.                 index ++;
  146.             }
  147.         }
  148.         //brak oczekiwanej wartosci
  149.         return -1;
  150.     }
  151.  
  152.     @Override
  153.     public boolean contains(T data) {
  154.         ElemOne<T> tmp = pierwszy;
  155.         int index = 0;
  156.         while(index != licznik){
  157.             if (tmp.getData().equals(data)){
  158.                 return true;
  159.             } else {
  160.                 index ++;
  161.                 tmp = tmp.getNext();
  162.             }
  163.         }
  164.         //brak oczekiwanej wartosci
  165.         return false;
  166.     }
  167.        
  168.     @Override
  169.     public void print() {
  170.         ElemOne<T> tmp = pierwszy;
  171.         int index = 1;
  172.        
  173.         System.out.println("element [" + index + "] = " + tmp.getData().toString());
  174.         while(tmp.hasNext()){
  175.             index ++;
  176.             tmp = tmp.getNext();
  177.             System.out.println("element [" + index + "] = " + tmp.getData().toString());
  178.         }        
  179.     }
  180.     private ElemOne<T> getPrev(ElemOne<T> iterator, ElemOne<T> tmp) {
  181.         if (iterator.equals(tmp)){
  182.             return null; //pierweszy element nie ma poprzedniego - nalezy obsluzyc zwracanego nulla
  183.         } else{
  184.             if(iterator.getNext() != null){
  185.                 while(!iterator.getNext().equals(tmp)){
  186.                     if(iterator.getNext() != null){
  187.                         iterator = iterator.getNext();
  188.                     }
  189.                 }
  190.             }
  191.             return iterator;
  192.         }
  193.     }
  194.  
  195.     private ElemOne<T> getElementAtPosition(int position) {
  196.        
  197.         int index = 1;
  198.         ElemOne<T> iterator = pierwszy;
  199.         while(index != position){
  200.             iterator = iterator.getNext();
  201.             index ++;
  202.         }
  203.         return iterator;
  204.  
  205.     }
  206.  
  207.  
  208.  
  209. }
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219. public class Main {
  220.  
  221.     /**
  222.      * @param args the command line arguments
  223.      */
  224.     public static void main(String[] args) throws ListException {
  225.        
  226.         ListOne l = new ListOne();
  227.         l.addFirst(5);
  228.         l.addLast(3);
  229.         l.addLast(4);
  230.         l.addLast(11);
  231.         l.addLast(2);
  232.         l.addLast(1);
  233.         l.addLast(7);
  234.         System.out.println("Pierwszy element: "+l.pierwszy.getData().toString());
  235.         System.out.println("Ostatni element: "+l.ostatni.getData().toString());
  236.        
  237.         l.print();
  238.  
  239.         System.out.println("Gdzie jest 11?: "+l.find(11));
  240.         System.out.println("Czy zawiera 2?: "+l.contains(2));
  241.         System.out.println("Rozmiar listy: "+l.size());
  242.         System.out.println("Usuwam element z pozycji 3: ");
  243.         l.remove(3);
  244.         l.print();
  245.  
  246.         System.out.println("Usuwam ostatni element: ");
  247.         l.removeLast();
  248.         l.print();
  249.        
  250.         System.out.println("Usuwam pierwszy element: ");
  251.         l.removeFirst();
  252.         l.print();
  253.     }
  254.    
  255. }
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. public class ListException extends Exception {
  269.  
  270.     public ListException(String message) {
  271.         super(message);
  272.     }
  273.    
  274. }
  275.  
  276.  
  277.  
  278.  
  279.  
  280. public interface IList<T> {
  281.  
  282.     /**
  283.      * Dodaje dane na poczatek listy.
  284.      *
  285.      * @param newData dane do dodania
  286.      */
  287.     public void addFirst(T newData);
  288.  
  289.     /**
  290.      * Dodaje dane na koniec listy.
  291.      *
  292.      * @param newData dane do dodania
  293.      */
  294.     public void addLast(T newData);
  295.  
  296.     /**
  297.      * Dodaje dane do listy we wskazanym miejscu.
  298.      *
  299.      * @param newData dane do dodania
  300.      * @param position pozycja w liscie, na ktorej maja znajdowac sie nowe dane
  301.      * po pomyslnym wykonaniu operacji. Wartosc zero odpowiada pocztkowi listy.
  302.      * @throws ListException jezeli podana pozycja jest mniejsza niz zero lub
  303.      * wieksza niz liczba elementow w liscie
  304.      */
  305.     public void addAtPosition(T newData, int position) throws ListException;
  306.  
  307.     /**
  308.      * Zwraca liczbe elementow listy.
  309.      *
  310.      * @return liczba elementow listy
  311.      */
  312.     public int size();
  313.  
  314.     /**
  315.      * Usuwa poczatkowy element listy.
  316.      *
  317.      * @return dane z usuwanego elementu
  318.      * @throws ListException jezeli lista jest pusta
  319.      */
  320.     public T removeFirst() throws ListException;
  321.  
  322.     /**
  323.      * Usuwa ostatni element listy.
  324.      *
  325.      * @return dane z usuwanego elementu
  326.      * @throws ListException jezeli lista jest pusta
  327.      */
  328.     public T removeLast() throws ListException;
  329.  
  330.     /**
  331.      * Usuwa element listy o podanym indeksie.
  332.      *
  333.      * @param position indeks elementu do usuniecia. Pierwszy element listy ma
  334.      * indeks zero.
  335.      * @return dane z usuwanego elementu
  336.      * @throws ListException jezeli podany indeks jest mniejszy niz zero lub
  337.      * wiekszy niz aktualny rozmiar listy
  338.      */
  339.     public T remove(int position) throws ListException;
  340.  
  341.     /**
  342.      * Wyszukuje w liscie element o podanej wartosci.
  343.      *
  344.      * @param dataToFind poszukiwane dane
  345.      * @return indeks pierwszego elementu listy, ktory zawiera poszukiwane dane,
  346.      * lub -1, jesli lista nie zawiera poszukiwanej wartosci
  347.      */
  348.     public int find(T dataToFind);
  349.  
  350.     /**
  351.      * Sprawdza, czy lista zawiera podana wartosc.
  352.      * @param data poszukiwane dane
  353.      * @return true, jesli lista zawiera poszukiwane dane, lub false w przeiwnym wypadku
  354.      */
  355.     public boolean contains(T data);
  356.  
  357.     /**
  358.      * Wypisuje na ekran zawartosc listy.
  359.      */
  360.     public void print();
  361. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement