Mitrezzz

АПС Испитна Листа DLL

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