Advertisement
dogedoge

Untitled

Dec 5th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.10 KB | None | 0 0
  1. public class Trgovina
  2. {
  3.     /*  Police police - vsebuje vse police, LinkedList
  4.     polica - ena polica, vsebuje izdelke in dolzino
  5.     */
  6.     public LinkedList police = new LinkedList();
  7.     public class Polica {
  8.         int dolzina;
  9.         LinkedList izdelki;
  10.  
  11.     }
  12.     public class Izdelek {
  13.         int polica;
  14.         String ime;
  15.         int velikost;
  16.         int cena;
  17.         int uporabnoDni;
  18.         /*      public Izdelek () {
  19.             polica = this.polica;
  20.             ime = this.ime;
  21.             velikost = this.velikost;
  22.             cena = this.cena;
  23.             uporabnoDni = this.uporabnoDni;
  24.         } */
  25.     }
  26.  
  27.     public void dodajPolico(int dolzina) {
  28.         //System.out.println("1 dolzina police " + police.length());
  29.         Polica polica = new Polica();
  30.         polica.dolzina = dolzina;
  31.         polica.izdelki = new LinkedList();
  32.         police.addFirst(polica);
  33.         /* System.out.println("Dolzina police " + police.length());
  34.         System.out.println(police + "  " + polica + " " + polica.dolzina);
  35.         System.out.println(police.length());
  36.          */
  37.     }
  38.     public boolean dodajIzdelek(int polica, String ime, int velikost, int cena, int uporabnoDni) {
  39.        
  40.         LinkedListElement el, firstPolica, lastPolica, firstIzdelek, lastIzdelek;
  41.         firstPolica = police.getFirst();
  42.         lastPolica = police.getLast();
  43.        
  44.         //zacnemo pri glavi seznama
  45.         el = firstPolica;
  46.        
  47.         //premaknemo se n-krat
  48.         for (int i = 0; i < polica; i++)
  49.         {
  50.             el = el.next;
  51.             if (el == null)
  52.             return false;
  53.         }
  54.         System.out.println(el.element instanceof LinkedList ? 1 : 0);
  55.         LinkedListElement newEl = new LinkedListElement(police);
  56.         newEl.next = el.next;
  57.         el.next = newEl;
  58.         System.out.println(newEl);
  59.         if (lastPolica == null) //ce smo dodali edini element
  60.         lastPolica = firstPolica;
  61.         else if (lastPolica == el) //ce smo dodali predzadnji element
  62.         lastPolica = lastPolica.next;
  63.         else if (lastPolica.next == el) //ce smo dodali zadnji element
  64.         lastPolica = el;
  65.         //v ostalih primerih se kazalec "last" ne spreminja
  66.        
  67.         return false;
  68.     }
  69.     public void posodobi(int steviloDni) {
  70.        
  71.     }
  72.     public void izpis(String izhodnaDatoteka) {
  73.        
  74.     }
  75.     public static String vrniVpisnoStevilko()
  76.     {
  77.         //System.out.println(police.write());
  78.         return "63130301";
  79.     }
  80.    
  81.     public class LinkedList
  82.     {
  83.         protected LinkedListElement first;
  84.         protected LinkedListElement last;
  85.        
  86.         LinkedList()
  87.         {
  88.             makenull();
  89.         }
  90.        
  91.         //Funkcija makenull inicializira seznam
  92.         public void makenull()
  93.         {
  94.             //drzimo se implementacije iz ucbenika:
  95.             //po dogovoru je na zacetku glava seznama (header)
  96.             first = new LinkedListElement(null, null);
  97.             last = null;
  98.         }
  99.        
  100.         //Funkcija addLast doda nov element na konec seznama
  101.         public void addLast(Object obj)
  102.         {
  103.             //najprej naredimo nov element
  104.             LinkedListElement newEl = new LinkedListElement(obj, null);
  105.            
  106.             //ali je seznam prazen?
  107.             // po dogovoru velja: ce je seznam prazen, potem kazalec "last" ne kaze nikamor
  108.             if (last == null)
  109.             {
  110.                 //ce seznam vsebuje samo en element, kazalca "first" in "last" kazeta na glavo seznama
  111.                 first.next = newEl;
  112.                 last = first;
  113.             }
  114.             else
  115.             {
  116.                 last.next.next = newEl;
  117.                 last = last.next;
  118.             }
  119.         }
  120.        
  121.         //Funkcija write izpise elemente seznama
  122.         public void write()
  123.         {
  124.             LinkedListElement el;
  125.            
  126.             //zacnemo pri elementu za glavo seznama
  127.             el = first.next;
  128.             while (el != null)
  129.             {
  130.                 System.out.print(el.element + ", ");
  131.                 el = el.next;
  132.             }
  133.            
  134.             System.out.println();
  135.            
  136.             /*
  137.         //za kontrolo lahko izpisemo tudi vrednosti prvega in zadnjega elementa
  138.         if (first.next != null)
  139.             System.out.println("Prvi element: " + first.next.element);
  140.         else
  141.             System.out.println("Ni prvega elementa");
  142.        
  143.         if (last != null)
  144.             System.out.println("Zadnji element: " + last.next.element);
  145.         else
  146.             System.out.println("Ni zadnjega elementa");
  147.         */
  148.         }
  149.        
  150.         //Funkcija addFirst doda nov element na prvo mesto v seznamu (takoj za glavo seznama)
  151.         void addFirst(Object obj)
  152.         {
  153.             //najprej naredimo nov element
  154.             LinkedListElement newEl = new LinkedListElement(obj);
  155.            
  156.             //novi element postavimo za glavo seznama
  157.             newEl.next = first.next;
  158.             first.next = newEl;
  159.            
  160.             if (last == null)//preverimo, ali je to edini element v seznamu
  161.             last = first;
  162.             else if (last == first)//preverimo, ali je seznam vseboval en sam element
  163.             last = newEl;
  164.         }
  165.        
  166.         //Funkcija length() vrne dolzino seznama (pri tem ne uposteva glave seznama)
  167.         int length()
  168.         {
  169.             int counter;
  170.             LinkedListElement el;
  171.            
  172.             counter = 0;
  173.            
  174.             //zacnemo pri elementu za glavo seznama
  175.             el = first.next;
  176.             while (el != null)
  177.             {
  178.                 counter++;
  179.                 el = el.next;
  180.             }
  181.            
  182.             return counter;
  183.         }
  184.        
  185.         //Rekurzivna funkcija za izracun dolzine seznama
  186.         int lengthRek(LinkedListElement el)
  187.         {
  188.             if (el == null)
  189.             return 0;
  190.             else
  191.             return lengthRek(el.next) + 1;
  192.         }
  193.        
  194.         //Funkcija lengthRek() klice rekurzivno funkcijo za izracun dolzine seznama
  195.         int lengthRek()
  196.         {
  197.             return lengthRek(first.next);
  198.         }
  199.        
  200.         //Funkcija insertNth vstavi element na n-to mesto v seznamu
  201.         //(prvi element seznama, ki se nahaja takoj za glavo seznama, je na indeksu 0)
  202.         boolean insertNth(Object obj, int n)
  203.         {
  204.             LinkedListElement el;
  205.            
  206.             //zacnemo pri glavi seznama
  207.             el = first;
  208.            
  209.             //premaknemo se n-krat
  210.             for (int i = 0; i < n; i++)
  211.             {
  212.                 el = el.next;
  213.                 if (el == null)
  214.                 return false;
  215.             }
  216.            
  217.             LinkedListElement newEl = new LinkedListElement(obj);
  218.             newEl.next = el.next;
  219.             el.next = newEl;
  220.            
  221.             if (last == null) //ce smo dodali edini element
  222.             last = first;
  223.             else if (last == el) //ce smo dodali predzadnji element
  224.             last = last.next;
  225.             else if (last.next == el) //ce smo dodali zadnji element
  226.             last = el;
  227.             //v ostalih primerih se kazalec "last" ne spreminja
  228.            
  229.             return true;
  230.         }
  231.        
  232.         //Funkcija deleteNth izbrise element na n-tem mestu v seznamu
  233.         //(prvi element seznama, ki se nahaja takoj za glavo seznama, je na indeksu 0)
  234.         boolean deleteNth(int n)
  235.         {
  236.             LinkedListElement el, prev_el;
  237.            
  238.             //zacnemo pri glavi seznama
  239.             prev_el = null;
  240.             el = first;
  241.            
  242.             //premaknemo se n-krat
  243.             for (int i = 0; i < n; i++)
  244.             {
  245.                 prev_el = el;
  246.                 el = el.next;
  247.                 if (el == null)
  248.                 return false;
  249.             }
  250.            
  251.             if (el.next != null)
  252.             {
  253.                 //preden izlocimo element preverimo, ali je potrebno popraviti kazalec "last"
  254.                 if (last == el.next) //ce brisemo predzadnji element
  255.                 last = el;
  256.                 else if (last == el) //ce brišemo zadnji element
  257.                 last = prev_el;
  258.                
  259.                 el.next = el.next.next;
  260.                
  261.                 return true;
  262.             }
  263.             else
  264.             return false;
  265.         }
  266.        
  267.         //Funkcija reverse obrne vrstni red elementov v seznamu (pri tem ignorira glavo seznama)
  268.         void reverse()
  269.         {
  270.             LinkedListElement curEl;
  271.             LinkedListElement tempEl;
  272.            
  273.             //preverimo, ali seznam vsebuje vsaj dva elementa
  274.             if (first.next != null && first.next.next != null)
  275.             {
  276.                 //zaceli bomo pri drugem elementu seznama
  277.                 curEl = first.next.next;
  278.                
  279.                 //takoj lahko oznacimo, da se bo niz zakljuèil z elementom, ki je trenutno prvi
  280.                 //vemo tudi, da bo kazalec "last" kazal na element, ki je trenutno na drugem mestu
  281.                 first.next.next = null;
  282.                 last = curEl;
  283.                
  284.                 //premikamo se proti koncu seznama
  285.                 while(curEl != null)
  286.                 {
  287.                     tempEl = curEl.next;
  288.                    
  289.                     //ustrezno prevezemo elemente
  290.                     curEl.next = first.next;
  291.                     first.next = curEl;
  292.                    
  293.                     curEl = tempEl;
  294.                 }
  295.             }
  296.         }
  297.        
  298.         //Rekurzivna funkcija, ki obrne vrstni red elementov v seznamu
  299.         void reverseRek(LinkedListElement el)
  300.         {
  301.             if (el == null)
  302.             return;
  303.            
  304.             if (el.next == null)
  305.             {
  306.                 first.next = el;
  307.                 last = first;
  308.             }
  309.             else
  310.             {
  311.                 reverseRek(el.next);
  312.                 el.next = null;
  313.                 last = last.next;
  314.                 last.next = el;
  315.             }
  316.         }
  317.        
  318.         //Funkcija reverseRek klice rekurzivno funkcijo, ki obrne vrstni red elementov v seznamu
  319.         void reverseRek()
  320.         {
  321.             reverseRek(first.next);
  322.         }
  323.        
  324.         //Funkcija removeDuplicates odstrani ponavljajoce se elemente v seznamu
  325.         void removeDuplicates()
  326.         {
  327.             LinkedListElement curEl;
  328.            
  329.             curEl = first.next;
  330.             while(curEl != null)
  331.             {
  332.                 LinkedListElement tmpEl;
  333.                
  334.                 //preveri ali se element curEl.next nahaja v seznamu
  335.                
  336.                 tmpEl = curEl;
  337.                 while (tmpEl.next != null)
  338.                 {
  339.                     if (tmpEl.next.element.equals(curEl.element))
  340.                     {
  341.                         //element je ze v seznamu, izlocimo ga
  342.                         tmpEl.next = tmpEl.next.next;  
  343.                     }
  344.                     else
  345.                     {
  346.                         //element ni kopija, pustimo ga v seznamu
  347.                         tmpEl = tmpEl.next;
  348.                     }
  349.                 }
  350.                
  351.                 curEl = curEl.next;
  352.             }
  353.            
  354.             //ne pozabimo na kazalec "last"
  355.             last = null;
  356.             curEl = first;
  357.             while(curEl.next != null)
  358.             {
  359.                 if (curEl.next.next == null)
  360.                 {
  361.                     last = curEl;
  362.                     break;
  363.                 }
  364.                 else
  365.                 curEl = curEl.next;
  366.             }
  367.         }
  368.         public LinkedListElement getFirst()
  369.         {
  370.             return first;
  371.         }
  372.         public LinkedListElement getLast()
  373.         {
  374.             return last;
  375.         }
  376.  
  377.        
  378.     }
  379.     public class LinkedListElement
  380.     {
  381.         Object element;
  382.         LinkedListElement next;
  383.        
  384.         LinkedListElement(Object obj)
  385.         {
  386.             element = obj;
  387.             next = null;
  388.         }
  389.        
  390.         LinkedListElement(Object obj, LinkedListElement nxt)
  391.         {
  392.             element = obj;
  393.             next = nxt;
  394.         }
  395.     }
  396.  
  397. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement