Advertisement
SashkoKlincharov

[Java][НП] - Блоковска структура

Aug 27th, 2021
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1.  
  2.  
  3. Да се имплементира генеричка класа за блок контејнер BlockContainer. Контејнерот треба да има блоковска структура, со тоа што секој блок содржи N елементи. Контејнерот треба да ги задоволува следните услови:
  4.  
  5. константно време на пристап до секој блок O(1)
  6. логаритамско време на пристап до елементите во блокот O(logN)
  7. елементите во секој блок треба да бидат сортирани.
  8.  
  9. Класата треба да ги имплементира следните методи:
  10.  
  11. public BlockContainer(int n) - конструктор со еден аргумент, максималниот број на елементи во блокот
  12. public void add(T a) - метод за додавање елемент во последниот блок од контејнерот (ако блокот е полн, се додава нов блок)
  13. public boolean remove(T a) - метод за бришње на елемент од последниот блок (ако се избришат сите елементи од еден блок, тогаш и блокот се брише)
  14. public void sort() - метод за сортирање на сите елементи во контејнерот
  15. public String toString() - препокривање на методот да враќа String во следниот формат: пример: [7, 8, 9],[1, 2, 3],[5, 6, 12],[4, 10, 8]
  16.  
  17.  
  18.  
  19.  
  20. import java.util.*;
  21. import java.util.stream.Collectors;
  22.  
  23. class Block<T extends Comparable<T>> {
  24. public Set<T> elements;
  25.  
  26. public Block() {
  27. elements = new TreeSet<>();
  28. }
  29.  
  30. public int getSize() {
  31. return elements.size();
  32. }
  33.  
  34. @Override
  35. public String toString() {
  36. StringBuilder sb = new StringBuilder();
  37. for (T el :
  38. elements) {
  39. sb.append(el).append(", ");
  40. }
  41. return sb.substring(0, sb.length() - 2);
  42. }
  43.  
  44.  
  45. }
  46.  
  47. class BlockContainer<T extends Comparable<T>> {
  48. private int n;
  49. private List<Block<T>> blocks;
  50.  
  51. public BlockContainer(int n) {
  52. this.n = n;
  53. blocks = new ArrayList<>();
  54. }
  55.  
  56. public void add(T a) {
  57.  
  58. if (!blocks.isEmpty()&&!(blocks.get(blocks.size() - 1).getSize() == n)) {
  59. blocks.get(blocks.size() - 1).elements.add(a);
  60. } else {
  61. Block<T> nov = new Block<>();
  62. nov.elements.add(a);
  63. blocks.add(nov);
  64. }
  65.  
  66.  
  67. }
  68.  
  69.  
  70. public boolean remove(T a) {
  71. Block<T> getLast = blocks.get(blocks.size() - 1);
  72. if (getLast == null) return false;
  73. if (getLast.getSize() == 1) {
  74. getLast.elements.remove(a);
  75. blocks.remove(getLast);
  76. } else {
  77. getLast.elements.remove(a);
  78. }
  79. return true;
  80. }
  81.  
  82.  
  83. public void sort() {
  84. ArrayList<T> elems = new ArrayList<>();
  85. blocks.forEach(block -> elems.addAll(block.elements));
  86. elems.sort(T::compareTo);
  87.  
  88. blocks.clear();
  89. for (T el : elems) {
  90. this.add(el);
  91. }
  92. }
  93.  
  94. @Override
  95. public String toString() {
  96. StringBuilder sb = new StringBuilder();
  97.  
  98. for (Block<T> block :
  99. blocks) {
  100. sb.append("[");
  101. sb.append(block.toString()).append("],");
  102. }
  103. String s = sb.substring(0, sb.length() - 1);
  104. return s;
  105. }
  106.  
  107.  
  108. }
  109.  
  110. public class BlockContainerTest {
  111. public static void main(String[] args) {
  112. Scanner scanner = new Scanner(System.in);
  113. int n = scanner.nextInt();
  114. int size = scanner.nextInt();
  115. BlockContainer<Integer> integerBC = new BlockContainer<Integer>(size);
  116. scanner.nextLine();
  117. Integer lastInteger = null;
  118. for (int i = 0; i < n; ++i) {
  119. int element = scanner.nextInt();
  120. lastInteger = element;
  121. integerBC.add(element);
  122. }
  123. System.out.println("+++++ Integer Block Container +++++");
  124. System.out.println(integerBC);
  125. System.out.println("+++++ Removing element +++++");
  126. integerBC.remove(lastInteger);
  127. System.out.println("+++++ Sorting container +++++");
  128. integerBC.sort();
  129. System.out.println(integerBC);
  130. BlockContainer<String> stringBC = new BlockContainer<String>(size);
  131. String lastString = null;
  132. for (int i = 0; i < n; ++i) {
  133. String element = scanner.next();
  134. lastString = element;
  135. stringBC.add(element);
  136. }
  137. System.out.println("+++++ String Block Container +++++");
  138. System.out.println(stringBC);
  139. System.out.println("+++++ Removing element +++++");
  140. stringBC.remove(lastString);
  141. System.out.println("+++++ Sorting container +++++");
  142. stringBC.sort();
  143. System.out.println(stringBC);
  144. }
  145. }
  146.  
  147.  
  148.  
  149. 11 2
  150. 89 12 54 11 5 1 7 8 2 4 14
  151. abc ccc bcxs abcde fdsr aerdd fdsa fdf etie lidj trdf
  152.  
  153. Sample output
  154.  
  155. +++++ Integer Block Container +++++
  156. [12, 89],[11, 54],[1, 5],[7, 8],[2, 4],[14]
  157. +++++ Removing element +++++
  158. +++++ Sorting container +++++
  159. [1, 2],[4, 5],[7, 8],[11, 12],[54, 89]
  160. +++++ String Block Container +++++
  161. [abc, ccc],[abcde, bcxs],[aerdd, fdsr],[fdf, fdsa],[etie, lidj],[trdf]
  162. +++++ Removing element +++++
  163. +++++ Sorting container +++++
  164. [abc, abcde],[aerdd, bcxs],[ccc, etie],[fdf, fdsa],[fdsr, lidj]
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement