Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. package VetorDeFrequencia;
  2.  
  3. public class FrequencyVector {
  4. private class Node {
  5. Node previous, next;
  6. char key;
  7. int frequency;
  8. }
  9.  
  10. private Node root;
  11. private int size;
  12.  
  13. public FrequencyVector(String text) {
  14. size = 0;
  15. root = new Node();
  16. root.frequency = -1;
  17. root.next = root;
  18. root.previous = root;
  19. readInput(text);
  20. }
  21.  
  22. public int getSize() {
  23. return size;
  24. }
  25.  
  26. public void readInput(String text) {
  27. for(int i = 0; i < text.length(); i++) {
  28. add(text.charAt(i));
  29. }
  30. }
  31.  
  32. public Node search(char key) {
  33. Node i = root;
  34. Node j = root;
  35.  
  36. while(true) {
  37. i = i.next;
  38. j = j.previous;
  39.  
  40. if(i.key == key) {
  41. return i;
  42. } else if (j.key == key) {
  43. return j;
  44. } else if (i == j) {
  45. return null;
  46. }
  47. }
  48. }
  49.  
  50. public Node search(int frequency) {
  51. Node i;
  52. for(i = root.next; i.frequency < frequency; i = i.next){
  53. if(i.frequency == -1){
  54. return null;
  55. }
  56. }
  57. return i;
  58. }
  59.  
  60. public void add(char key) {
  61. root = add(root, key);
  62. }
  63.  
  64. private Node add(Node node, char key) {
  65. Node temp = search(key);
  66.  
  67. if(temp == null) {
  68. temp = new Node();
  69.  
  70. temp.key = key;
  71. temp.frequency = 1;
  72.  
  73. temp.next = node.next;
  74. temp.previous = node;
  75.  
  76. node.next.previous = temp;
  77. node.next = temp;
  78.  
  79. size++;
  80. } else {
  81. temp.frequency++;
  82.  
  83. temp.previous.next = temp.next;
  84. temp.next.previous = temp.previous;
  85.  
  86. Node temp2 = search(temp.frequency);
  87.  
  88. if(temp2 == null) {
  89. temp.next = node;
  90. temp.previous = node.previous;
  91.  
  92. node.previous.next = temp;
  93. node.previous = temp;
  94. } else {
  95. temp2.previous.next = temp;
  96. temp.previous = temp2.previous;
  97. temp2.previous = temp;
  98. temp.next = temp2;
  99. }
  100. }
  101.  
  102. return node;
  103. }
  104.  
  105. public int[] keyToVector(){
  106. int vector[] = new int[size];
  107. Node temp = root.next;
  108.  
  109. for(int i = 0; temp.frequency != -1; i++){
  110. vector[i] = temp.key;
  111. temp = temp.next;
  112. }
  113.  
  114. return vector;
  115. }
  116.  
  117. public int[] frequencyToVector(){
  118. int vector[] = new int[size];
  119. Node temp = root.next;
  120.  
  121. for(int i = 0; temp.frequency != -1; i++){
  122. vector[i] = temp.frequency;
  123. temp = temp.next;
  124. }
  125.  
  126. return vector;
  127. }
  128.  
  129. public int[][] toMatrix(){
  130. int matrix[][] = {keyToVector(), frequencyToVector()};
  131.  
  132. return matrix;
  133. }
  134.  
  135. @Override
  136. public String toString() {
  137.  
  138. String matrix = "|";
  139. for(Node i = root.next; i.frequency != -1; i = i.next) {
  140. matrix = matrix + i.key + '|';
  141. }
  142.  
  143. matrix = matrix + "\n|";
  144.  
  145. for(Node i = root.next; i.frequency != -1; i = i.next) {
  146. matrix = matrix + i.frequency + '|';
  147. }
  148.  
  149. return matrix;
  150. }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement