Advertisement
brsjak

АПС - Подели SLL - Структури со програмирање 2013

Sep 16th, 2019
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.57 KB | None | 0 0
  1. /*
  2. (70 поени) Дадена е единечно поврзана листа во која јазлите претставуваат цели броеви и не се сортирани. Да се напише функција која во нова единечно поврзана листа ќе ги префрли сите јазли од првата листа чие инфо поле е помало од средната вредност (целобројна) на сите јазли во првата листа. Втората листа да биде постојано сортирана во растечки редослед. Во првата листа да останат сите елементи кои не го задоволуваат овој услов.
  3. Префрлањето на јазли од првата во втората листа да се изврши со слевање, односно да не се алоцира нова меморија за јазлите во втората листа.
  4. Пример:
  5. Прва листа: 5 -> 1 -> 12 -> 6 -> 4 -> 8 -> 10, средна вредност=6
  6. Втора листа по префрлање: 1 -> 4 -> 5
  7. Прва листа по префрлање: 12 -> 6 -> 8 -> 10
  8. */
  9.  
  10. import java.util.*;
  11. import java.io.*;
  12.  
  13. class SLLNode<E> {
  14.     protected E element;
  15.     protected SLLNode<E> succ;
  16.  
  17.     public SLLNode(E elem, SLLNode<E> succ) {
  18.         this.element = elem;
  19.         this.succ = succ;
  20.     }
  21.  
  22.     @Override
  23.     public String toString() {
  24.         return element.toString();
  25.     }
  26. }
  27.  
  28. class SLL<E> {
  29.  
  30.     private SLLNode<E> first;
  31.  
  32.     public SLL() {
  33.         // Construct an empty SLL
  34.         this.first = null;
  35.     }
  36.  
  37.     public void deleteList() {
  38.         first = null;
  39.     }
  40.  
  41.     public int length() {
  42.         int ret;
  43.         if (first != null) {
  44.             SLLNode<E> tmp = first;
  45.             ret = 1;
  46.             while (tmp.succ != null) {
  47.                 tmp = tmp.succ;
  48.                 ret++;
  49.             }
  50.             return ret;
  51.         } else {
  52.             return 0;
  53.         }
  54.  
  55.     }
  56.  
  57.     @Override
  58.     public String toString() {
  59.         String ret = new String();
  60.         if (first != null) {
  61.             SLLNode<E> tmp = first;
  62.             ret += tmp + " ";
  63.             while (tmp.succ != null) {
  64.                 tmp = tmp.succ;
  65.                 ret += tmp + " ";
  66.             }
  67.         } else {
  68.             ret = "Prazna lista!!!";
  69.         }
  70.         return ret;
  71.     }
  72.  
  73.     public void insertFirst(E o) {
  74.         SLLNode<E> ins = new SLLNode<E>(o, first);
  75.         first = ins;
  76.     }
  77.  
  78.     public void insertAfter(E o, SLLNode<E> node) {
  79.         if (node != null) {
  80.             SLLNode<E> ins = new SLLNode<E>(o, node.succ);
  81.             node.succ = ins;
  82.         } else {
  83.             System.out.println("Dadenot jazol e null");
  84.         }
  85.     }
  86.  
  87.     public void insertBefore(E o, SLLNode<E> before) {
  88.  
  89.         if (first != null) {
  90.             SLLNode<E> tmp = first;
  91.             if (first == before) {
  92.                 this.insertFirst(o);
  93.                 return;
  94.             }
  95.             //ako first!=before
  96.             while (tmp.succ != before) {
  97.                 tmp = tmp.succ;
  98.             }
  99.             if (tmp.succ == before) {
  100.                 SLLNode<E> ins = new SLLNode<E>(o, before);
  101.                 tmp.succ = ins;
  102.             } else {
  103.                 System.out.println("Elementot ne postoi vo listata");
  104.             }
  105.         } else {
  106.             System.out.println("Listata e prazna");
  107.         }
  108.     }
  109.  
  110.     public void insertLast(E o) {
  111.         if (first != null) {
  112.             SLLNode<E> tmp = first;
  113.             while (tmp.succ != null) {
  114.                 tmp = tmp.succ;
  115.             }
  116.             SLLNode<E> ins = new SLLNode<E>(o, null);
  117.             tmp.succ = ins;
  118.         } else {
  119.             insertFirst(o);
  120.         }
  121.     }
  122.  
  123.     public E deleteFirst() {
  124.         if (first != null) {
  125.             SLLNode<E> tmp = first;
  126.             first = first.succ;
  127.             return tmp.element;
  128.         } else {
  129.             System.out.println("Listata e prazna");
  130.             return null;
  131.         }
  132.     }
  133.  
  134.     public E delete(SLLNode<E> node) {
  135.         if (first != null) {
  136.             SLLNode<E> tmp = first;
  137.             if (first == node) {
  138.                 return this.deleteFirst();
  139.             }
  140.             while (tmp.succ != node&&tmp.succ.succ != null) {
  141.                 tmp = tmp.succ;
  142.             }
  143.             if (tmp.succ == node) {
  144.                 tmp.succ = tmp.succ.succ;
  145.                 return node.element;
  146.             } else {
  147.                 System.out.println("Elementot ne postoi vo listata");
  148.                 return null;
  149.             }
  150.         } else {
  151.             System.out.println("Listata e prazna");
  152.             return null;
  153.         }
  154.  
  155.     }
  156.  
  157.     public SLLNode<E> getFirst() {
  158.         return first;
  159.     }
  160.  
  161.     public SLLNode<E> find(E o) {
  162.         if (first != null) {
  163.             SLLNode<E> tmp = first;
  164.            
  165.             while (tmp.element != o && tmp.succ != null) {
  166.                 tmp = tmp.succ;
  167.             }
  168.             if (tmp.element == o) {
  169.                 return tmp;
  170.             } else {
  171.                 System.out.println("Elementot ne postoi vo listata");
  172.             }
  173.         } else {
  174.             System.out.println("Listata e prazna");
  175.         }
  176.         return first;
  177.     }
  178.  
  179.     public Iterator<E> iterator() {
  180.         // Return an iterator that visits all elements of this list, in left-to-right order.
  181.         return new LRIterator<E>();
  182.     }
  183.  
  184.     // //////////Inner class ////////////
  185.     private class LRIterator<E> implements Iterator<E> {
  186.  
  187.         private SLLNode<E> place, curr;
  188.  
  189.         private LRIterator() {
  190.             place = (SLLNode<E>) first;
  191.             curr = null;
  192.         }
  193.  
  194.         public boolean hasNext() {
  195.             return (place != null);
  196.         }
  197.  
  198.         public E next() {
  199.             if (place == null) {
  200.                 throw new NoSuchElementException();
  201.             }
  202.             E nextElem = place.element;
  203.             curr = place;
  204.             place = place.succ;
  205.             return nextElem;
  206.         }
  207.  
  208.         public void remove() {
  209.             //Not implemented
  210.         }
  211.     }
  212.  
  213.     public void mirror() {
  214.         if (first != null) {
  215.             //m=nextsucc, p=tmp,q=next
  216.             SLLNode<E> tmp = first;
  217.             SLLNode<E> newsucc = null;
  218.             SLLNode<E> next;
  219.  
  220.             while (tmp != null) {
  221.                 next = tmp.succ;
  222.                 tmp.succ = newsucc;
  223.                 newsucc = tmp;
  224.                 tmp = next;
  225.             }
  226.             first = newsucc;
  227.         }
  228.  
  229.     }
  230.  
  231.     public void merge(SLL<E> in) {
  232.         if (first != null) {
  233.             SLLNode<E> tmp = first;
  234.             while (tmp.succ != null) {
  235.                 tmp = tmp.succ;
  236.             }
  237.             tmp.succ = in.getFirst();
  238.         } else {
  239.             first = in.getFirst();
  240.         }
  241.     }
  242. }
  243.  
  244. public class PodeliSLL {
  245.     public static SLL<Integer> sortLista(SLL<Integer> lista) {
  246.        
  247.         for(int i=0;i<lista.length();i++) {
  248.             SLLNode<Integer> dvizi = lista.getFirst();
  249.             while(dvizi!=null) {
  250.                 if(dvizi.succ!=null) {
  251.                     if(dvizi.element<dvizi.succ.element) {
  252.                         int tmp = dvizi.element;
  253.                         dvizi.element=dvizi.succ.element;
  254.                         dvizi.succ.element=tmp;
  255.                     }
  256.                     dvizi=dvizi.succ;
  257.                 }
  258.                 else {
  259.                     break;
  260.                 }
  261.             }
  262.         }
  263.         return lista;
  264.     }
  265.     public static void main(String[] args) throws NumberFormatException, IOException {
  266.         // TODO Auto-generated method stub
  267.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  268.         int n = Integer.parseInt(in.readLine());
  269.         SLL<Integer> lista = new SLL<Integer>();
  270.         SLL<Integer> vtora = new SLL<Integer>();
  271.        
  272.        
  273.         for(int i=0;i<n;i++) {
  274.             lista.insertLast(Integer.parseInt(in.readLine()));
  275.         }
  276.        
  277.         int s = Integer.parseInt(in.readLine());
  278.        
  279.         SLLNode<Integer> dvizi = lista.getFirst();
  280.        
  281.        
  282.         while(dvizi!=null) {
  283.             if(dvizi.element<s) {
  284.                 if(dvizi==lista.getFirst()) {
  285.                     vtora.insertLast(dvizi.element);
  286.                     lista.deleteFirst();
  287.                     dvizi=lista.getFirst();
  288.                 }
  289.                 else {
  290.                     SLLNode<Integer> dviziNazad=lista.getFirst();
  291.                     while(dviziNazad.succ!=dvizi) {
  292.                         dviziNazad=dviziNazad.succ;
  293.                     }
  294.                     dviziNazad.succ=dvizi.succ;
  295.                     vtora.insertLast(dvizi.element);
  296.                     dvizi=dvizi.succ;
  297.                 }
  298.             }
  299.             else {
  300.                 dvizi=dvizi.succ;
  301.             }
  302.         }
  303.        
  304.         System.out.println("PRVA LISTA PO PREFRLANJE: "+lista.toString());
  305.         System.out.println("VTORA LISTA PO PREFRLANJE: "+sortLista(vtora).toString());
  306.     }
  307.  
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement