Advertisement
SlavkovB

[АПС] Подели според парност

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