Advertisement
Chris2o2

[APS] DLLVojska

Nov 24th, 2022 (edited)
570
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.30 KB | None | 1 0
  1. /*
  2. Пред командантот на војската наредени се сите војници и во двојно поврзана листа дадени се нивните ID-a. На командантот не му се допаѓа како се наредени војниците и решава да одбере два под-интервали од војници и да им ги замени местата, односно војниците што се наоѓаат во едниот под-интервал ќе ги смести во другиот, и обратно.
  3.  
  4. Влез: Во првиот ред даден е бројот на војници. Во вториот ред дадени се ID-то на секој од војниците. Во третиот ред дадени се два броеви, ID на првиот војник и ID на последниот војник од првиот интервал. Во четвртиот ред дадени се два броеви, ID на првиот војник и ID на последниот војник од вториот интервал.
  5.  
  6. Излез: Да се испечати новиот редослед на војниците (т.е. на нивните ID-a)
  7.  
  8.  
  9.  
  10. Забелешка 1: Интервалите никогаш нема да се преклопуваат и ќе содржат барем еден војник. Целата низа ќе содржи најмалку два војника.
  11.  
  12. Забелешка 2: Обратете посебно внимание кога интервалите се еден до друг и кога некој од интервалите почнува од првиот војник или завршува со последниот војник.
  13.  
  14. Внимавајте:
  15.  
  16. 1. Даден е целосниот код на структурата којашто треба да се користи. Дадена е и тест класата DLLVojska.java, со целосно имплементиран input и output. Потребно е да се менува само во рамки на DLL<Integer> vojska(DLL<Integer> lista, int a, int b, int c, int d) функцијата.
  17.  
  18. 2. Притоа, поместувањето на интервалите треба да се однесува на менувањето на самите врски во јазлите од листата.
  19.  
  20. 3. Не смее да менувате во main функцијата !
  21. */
  22.  
  23. import java.util.Scanner;
  24.  
  25. class DLLNode<E> {
  26.     protected E element;
  27.     protected DLLNode<E> pred, succ;
  28.     public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  29.         this.element = elem;
  30.         this.pred = pred;
  31.         this.succ = succ;
  32.     }
  33.  
  34.     @Override
  35.     public String toString() {
  36.         return element.toString();
  37.     }
  38. }
  39.  
  40. class DLL<E> {
  41.     private DLLNode<E> first, last;
  42.  
  43.     public DLL() {
  44.         // Construct an empty SLL
  45.         this.first = null;
  46.         this.last = null;
  47.     }
  48.  
  49.     public void insertFirst(E o) {
  50.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  51.         if (first == null)
  52.             last = ins;
  53.         else
  54.             first.pred = ins;
  55.         first = ins;
  56.     }
  57.  
  58.     public void insertLast(E o) {
  59.         if (first == null)
  60.             insertFirst(o);
  61.         else {
  62.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  63.             last.succ = ins;
  64.             last = ins;
  65.         }
  66.     }
  67.  
  68.     public void insertAfter(E o, DLLNode<E> after) {
  69.         if (after == last) {
  70.             insertLast(o);
  71.             return;
  72.         }
  73.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  74.         after.succ.pred = ins;
  75.         after.succ = ins;
  76.     }
  77.  
  78.     public void insertBefore(E o, DLLNode<E> before) {
  79.         if (before == first) {
  80.             insertFirst(o);
  81.             return;
  82.         }
  83.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  84.         before.pred.succ = ins;
  85.         before.pred = ins;
  86.     }
  87.  
  88.     public E deleteFirst() {
  89.         if (first != null) {
  90.             DLLNode<E> tmp = first;
  91.             first = first.succ;
  92.             if (first != null) first.pred = null;
  93.             if (first == null)
  94.                 last = null;
  95.             return tmp.element;
  96.         } else
  97.             return null;
  98.     }
  99.  
  100.     public E deleteLast() {
  101.         if (first != null) {
  102.             if (first.succ == null)
  103.                 return deleteFirst();
  104.             else {
  105.                 DLLNode<E> tmp = last;
  106.                 last = last.pred;
  107.                 last.succ = null;
  108.                 return tmp.element;
  109.             }
  110.         } else
  111.             return null;
  112.     }
  113.  
  114.     public E delete(DLLNode<E> node) {
  115.         if (node == first) {
  116.             return deleteFirst();
  117.         }
  118.         if (node == last) {
  119.             return deleteLast();
  120.         }
  121.         node.pred.succ = node.succ;
  122.         node.succ.pred = node.pred;
  123.         return node.element;
  124.  
  125.     }
  126.  
  127.     public DLLNode<E> find(E o) {
  128.         if (first != null) {
  129.             DLLNode<E> tmp = first;
  130.             while (!tmp.element.equals(o) && tmp.succ != null)
  131.                 tmp = tmp.succ;
  132.             if (tmp.element.equals(o)) {
  133.                 return tmp;
  134.             } else {
  135.                 System.out.println("Elementot ne postoi vo listata");
  136.             }
  137.         } else {
  138.             System.out.println("Listata e prazna");
  139.         }
  140.         return null;
  141.     }
  142.  
  143.     public void deleteList() {
  144.         first = null;
  145.         last = null;
  146.     }
  147.  
  148.     public int getSize() {
  149.         int listSize = 0;
  150.         DLLNode<E> tmp = first;
  151.         while(tmp != null) {
  152.             listSize++;
  153.             tmp = tmp.succ;
  154.         }
  155.         return listSize;
  156.     }
  157.  
  158.     @Override
  159.     public String toString() {
  160.         String ret = new String();
  161.         if (first != null) {
  162.             DLLNode<E> tmp = first;
  163.             ret += tmp.toString();
  164.             while (tmp.succ != null) {
  165.                 tmp = tmp.succ;
  166.                 ret += "<->" + tmp.toString();
  167.             }
  168.         } else
  169.             ret = "Prazna lista!!!";
  170.         return ret;
  171.     }
  172.  
  173.     public String toStringR() {
  174.         String ret = new String();
  175.         if (last != null) {
  176.             DLLNode<E> tmp = last;
  177.             ret += tmp.toString();
  178.             while (tmp.pred != null) {
  179.                 tmp = tmp.pred;
  180.                 ret += "<->" + tmp.toString();
  181.             }
  182.         } else
  183.             ret = "Prazna lista!!!";
  184.         return ret;
  185.     }
  186.  
  187.     public DLLNode<E> getFirst() {
  188.         return first;
  189.     }
  190.  
  191.     public DLLNode<E> getLast() {
  192.  
  193.         return last;
  194.     }
  195.    
  196.     public void setFirst(DLLNode<E> node) {
  197.         this.first = node;
  198.     }
  199.    
  200.     public void setLast(DLLNode<E> node) {
  201.         this.last = node;
  202.     }
  203.  
  204.     public void mirror() {
  205.  
  206.         DLLNode<E> tmp = null;
  207.         DLLNode<E> current = first;
  208.         last = first;
  209.         while(current!=null) {
  210.             tmp = current.pred;
  211.             current.pred = current.succ;
  212.             current.succ = tmp;
  213.             current = current.pred;
  214.         }
  215.  
  216.         if(tmp!=null && tmp.pred!=null) {
  217.             first=tmp.pred;
  218.         }
  219.     }
  220. }
  221.  
  222. public class DLLVojska {
  223.  
  224.     public static DLL<Integer> vojska(DLL<Integer> lista, int a, int b, int c, int d) {
  225.  
  226.        DLLNode<Integer> tmp;
  227.        
  228.         tmp = lista.getFirst();
  229.  
  230.         DLLNode<Integer> aN, bN, cN, dN;
  231.  
  232.         while (!tmp.element.equals(a)) {
  233.             tmp = tmp.succ;
  234.         }
  235.  
  236.         aN = tmp;
  237.         while (!tmp.element.equals(b)) {
  238.             tmp = tmp.succ;
  239.         }
  240.  
  241.         bN = tmp;
  242.         while (!tmp.element.equals(c)) {
  243.             tmp = tmp.succ;
  244.         }
  245.  
  246.         cN = tmp;
  247.         while (!tmp.element.equals(d)) {
  248.             tmp = tmp.succ;
  249.         }
  250.  
  251.         dN = tmp;
  252.  
  253.  
  254.         DLLNode<Integer> aPred = aN.pred;
  255.         DLLNode<Integer> bSucc = bN.succ;
  256.  
  257.         boolean listsNextToEachOther = bSucc.equals(cN);
  258.         boolean firstListOnBeginning = aPred == null;
  259.         boolean secondListOnEnd = dN.succ == null;
  260.  
  261.         if (!firstListOnBeginning) {
  262.             aN.pred.succ = cN;
  263.         } else {
  264.             lista.setFirst(cN);
  265.         }
  266.        
  267.         if (listsNextToEachOther) {
  268.             aN.pred = dN;
  269.         } else {
  270.             aN.pred = cN.pred;
  271.             cN.pred.succ = aN;
  272.             bN.succ.pred = dN;
  273.         }
  274.  
  275.         cN.pred = aPred;
  276.         bN.succ = dN.succ;
  277.  
  278.         if (!secondListOnEnd) {
  279.             dN.succ.pred = bN;
  280.         } else {
  281.             lista.setLast(dN);
  282.         }
  283.        
  284.         if (listsNextToEachOther) {
  285.             dN.succ = aN;
  286.         } else {
  287.             dN.succ = bSucc;
  288.         }
  289.  
  290.         return lista;
  291.     }
  292.  
  293.     public static void main(String[] args) {
  294.  
  295.         Scanner input = new Scanner(System.in);
  296.  
  297.         int n = input.nextInt();
  298.  
  299.         DLL<Integer> lista = new DLL<>();
  300.         for(int i=0;i<n;i++) {
  301.             lista.insertLast(input.nextInt());
  302.         }
  303.  
  304.         int a = input.nextInt();
  305.         int b = input.nextInt();
  306.  
  307.         int c = input.nextInt();
  308.         int d = input.nextInt();
  309.  
  310.         DLL<Integer> result = vojska(lista, a, b, c, d);
  311.  
  312.         System.out.println(result);
  313.  
  314.     }
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement