Advertisement
Mitrezzz

[АПС] Лаб 2 - Спој листи

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