Advertisement
SashkoKlincharov

[Java][НП] - Генерички ред

Aug 26th, 2021
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.78 KB | None | 0 0
  1.  
  2.  
  3. Треба да се развие класа Queuе која претставува податочна структура ред, a во позадина e имплементирана како поврзана листа. Прво треба да се напише класа за еден елемент во листата (еден јазел) Node. Kласаta Node треба да има еден генерички параметар Т кој се однесува на елементот во јазелот и една референца кон следниот јазел во листата. Поформално класата Node треба да ги нуди следниве методи:
  4.  
  5. Node(T element, Node<T> next) - конструктор кој ги иницијализира двете променливи
  6. getElement():T
  7. getNext():Node<T>
  8. setNext(Node<T> next)
  9.  
  10. Користејќи ја класата Node ја пишуваме класата Queue со следниве методи:
  11.  
  12. Queue() – креира нов празен ред
  13. isEmpty():boolean - враќа true, ако редот е празен (не содржи ниеден елемент)
  14. enqueue(T element) - го додава елементот на крајот на редот
  15. dequeue():T - го отстранува елементот на почеток од редот и истиот го враќа, доколку редот е празен фрла исклучок EmptyQueueException
  16. peek():T - го враќа елементот на почетокот од редот (не ја менува листата), доколку редот е празен фрла исклучок EmptyQueueException
  17. inspect():T - го враќа елементот на крајот на редот (не ја менува листата), доколку редот е празен фрла исклучок EmptyQueueException
  18. count():int - го враќа бројот на елементи во редот
  19.  
  20. Забелешка: Класата Queue има еден генерички параметар кој се однесува на типот не елементи кои се чуваат во редот.
  21.  
  22. **Важно: Не смее да се користат готови податочни структури како ArrayList или LinkedList, за да се имплементира класата Queue**.
  23.  
  24.  
  25. import java.util.LinkedList;
  26. import java.util.List;
  27. import java.util.Scanner;
  28.  
  29. class EmptyQueueException extends Exception {
  30.  
  31. public EmptyQueueException() {
  32. super("EmptyQueueException");
  33. }
  34. }
  35.  
  36. class Node<T>{
  37. private T element;
  38. private Node<T> next;
  39.  
  40. public Node(T element, Node<T> next) {
  41. this.element = element;
  42. this.next = next;
  43. }
  44.  
  45. public T getElement() {
  46. return element;
  47. }
  48.  
  49.  
  50. public Node<T> getNext() {
  51. return next;
  52. }
  53.  
  54. public void setNext(Node<T> next) {
  55. this.next = next;
  56. }
  57. }
  58.  
  59. class Queue<T> {
  60.  
  61. private Node<T> first;
  62. private Node<T> pomesti;
  63. private int countNodes;
  64.  
  65. public Queue() {
  66. first = null;
  67. pomesti = null;
  68. countNodes = 0;
  69. }
  70.  
  71. boolean isEmpty(){
  72. return countNodes == 0;
  73. }
  74.  
  75. void enqueue(T element){
  76. Node<T> create = new Node<>(element,null);
  77. if(first==null){
  78. first = create;
  79. pomesti = create;
  80. }else {
  81. pomesti.setNext(create);
  82. pomesti = create;
  83. }
  84. countNodes++;
  85. }
  86.  
  87. T dequeue() throws EmptyQueueException {
  88. if(countNodes==0)
  89. throw new EmptyQueueException();
  90. T getFirstElement = first.getElement();
  91. first = first.getNext();
  92. countNodes--;
  93. return getFirstElement;
  94. }
  95.  
  96. T peek() throws EmptyQueueException {
  97. if(countNodes==0)
  98. throw new EmptyQueueException();
  99. return first.getElement();
  100. }
  101. T inspect() throws EmptyQueueException {
  102. if(countNodes==0)
  103. throw new EmptyQueueException();
  104. return pomesti.getElement();
  105. }
  106.  
  107. int count(){
  108. return countNodes;
  109. }
  110. }
  111.  
  112. public class QueueTest {
  113.  
  114.  
  115. public static void main(String[] args) throws EmptyQueueException {
  116. Scanner jin = new Scanner(System.in);
  117. int k = jin.nextInt();
  118. if ( k == 0 ) { //Simple test case with one int element
  119. int t = jin.nextInt();
  120. Queue<Integer> queue = new Queue<Integer>();
  121. System.out.println("Queue empty? - "+queue.isEmpty());
  122. System.out.println("Queue count? - "+queue.count());
  123. System.out.println("Queue enqueue "+t);
  124. queue.enqueue(t);
  125. System.out.println("Queue empty? - "+queue.isEmpty());
  126. System.out.println("Queue count? - "+queue.count());
  127. System.out.println("Queue dequeue? - "+queue.dequeue());
  128. System.out.println("Queue empty? - "+queue.isEmpty());
  129. System.out.println("Queue count? - "+queue.count());
  130. }
  131. if ( k == 1 ) { //a more complex test with strings
  132. Queue<String> queue = new Queue<String>();
  133. int counter = 0;
  134. while ( jin.hasNextInt() ) {
  135. String t = jin.next();
  136. queue.enqueue(t);
  137. ++counter;
  138. }
  139. for ( int i = 0 ; i < counter ; ++i ) {
  140. System.out.println(queue.dequeue());
  141. }
  142. queue.enqueue(jin.next());
  143. System.out.println("Queue inspect? - "+queue.inspect());
  144. System.out.println("Queue peek? - "+queue.peek());
  145. queue.enqueue(queue.dequeue());
  146. queue.enqueue(jin.next());
  147. System.out.println("Queue inspect? - "+queue.inspect());
  148. System.out.println("Queue peek? - "+queue.peek());
  149. }
  150. if ( k == 2 ) {
  151. Queue<String> queue = new Queue<String>();
  152. String next = "";
  153. int counter = 0;
  154. while ( true ) {
  155. next = jin.next();
  156. if ( next.equals("stop") ) break;
  157. queue.enqueue(next);
  158. ++counter;
  159. }
  160. while ( !queue.isEmpty() ) {
  161. if ( queue.count()<counter) System.out.print(" ");
  162. System.out.print(queue.dequeue());
  163. }
  164. }
  165. if ( k == 3 ) { //random testing
  166. Queue<Double> queue = new Queue<Double>();
  167. LinkedList<Double> java_queue = new LinkedList<Double>();
  168. boolean flag = true;
  169. int n = jin.nextInt();
  170. for ( int i = 0 ; i < n ; ++i ) {
  171. double q = Math.random();
  172. if ( q < 0.5 ) {
  173. double t = Math.random();
  174. queue.enqueue(t);
  175. java_queue.addFirst(t);
  176. }
  177. if ( q < 0.8&&q >= 0.5 ) {
  178. if ( ! java_queue.isEmpty() ) {
  179. double t1 = java_queue.removeLast();
  180. double t2 = queue.dequeue();
  181. flag &= t1==t2;
  182. }
  183. else {
  184. flag &= java_queue.isEmpty()==queue.isEmpty();
  185. }
  186. }
  187. if ( q < 0.9 && q >= 0.8 ) {
  188. if ( ! java_queue.isEmpty() ) {
  189. double t1 = java_queue.peekLast();
  190. double t2 = queue.peek();
  191. flag &= t1==t2;
  192. }
  193. else {
  194. flag &= java_queue.isEmpty()==queue.isEmpty();
  195. }
  196. }
  197. if ( q < 1 && q >= 0.9 ) {
  198. if ( ! java_queue.isEmpty() ) {
  199. double t1 = java_queue.peekFirst();
  200. double t2 = queue.inspect();
  201. flag &= t1==t2;
  202. }
  203. else {
  204. flag &= java_queue.isEmpty()==queue.isEmpty();
  205. }
  206. }
  207. flag &= java_queue.size()==queue.count();
  208. }
  209. System.out.println("Compared to the control queue the results were the same? - "+flag);
  210. }
  211. if ( k == 4 ) { //performance testing
  212. Queue<Double> queue = new Queue<Double>();
  213. int n = jin.nextInt();
  214. for ( int i = 0 ; i < n ; ++i ) {
  215. if ( Math.random() < 0.5 ) {
  216. queue.enqueue(Math.random());
  217. }
  218. else {
  219. if ( ! queue.isEmpty() ) {
  220. queue.dequeue();
  221. }
  222. }
  223. }
  224. System.out.println("You implementation finished in less then 3 seconds, well done!");
  225. }
  226. if ( k == 5 ) { //Exceptions testing
  227. Queue<String> queue = new Queue<String>();
  228. try {
  229. queue.dequeue();
  230. }
  231. catch ( Exception e ) {
  232. System.out.println(e.getClass().getSimpleName());
  233. }
  234. try {
  235. queue.peek();
  236. }
  237. catch ( Exception e ) {
  238. System.out.println(e.getClass().getSimpleName());
  239. }
  240. try {
  241. queue.inspect();
  242. }
  243. catch ( Exception e ) {
  244. System.out.println(e.getClass().getSimpleName());
  245. }
  246. }
  247. }
  248.  
  249. }
  250.  
  251.  
  252.  
  253.  
  254. Sample input
  255.  
  256. 0 0
  257.  
  258. Sample output
  259.  
  260. Queue empty? - true
  261. Queue count? - 0
  262. Queue enqueue 0
  263. Queue empty? - false
  264. Queue count? - 1
  265. Queue dequeue? - 0
  266. Queue empty? - true
  267. Queue count? - 0
  268.  
  269.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement