Advertisement
teodor_dalavera

Подели според самогласки

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