Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package VetorDeFrequencia;
- public class FrequencyVector {
- private class Node {
- Node previous, next;
- char key;
- int frequency;
- }
- private Node root;
- private int size;
- public FrequencyVector(String text) {
- size = 0;
- root = new Node();
- root.frequency = -1;
- root.next = root;
- root.previous = root;
- readInput(text);
- }
- public int getSize() {
- return size;
- }
- public void readInput(String text) {
- for(int i = 0; i < text.length(); i++) {
- add(text.charAt(i));
- }
- }
- public Node search(char key) {
- Node i = root;
- Node j = root;
- while(true) {
- i = i.next;
- j = j.previous;
- if(i.key == key) {
- return i;
- } else if (j.key == key) {
- return j;
- } else if (i == j) {
- return null;
- }
- }
- }
- public Node search(int frequency) {
- Node i;
- for(i = root.next; i.frequency < frequency; i = i.next){
- if(i.frequency == -1){
- return null;
- }
- }
- return i;
- }
- public void add(char key) {
- root = add(root, key);
- }
- private Node add(Node node, char key) {
- Node temp = search(key);
- if(temp == null) {
- temp = new Node();
- temp.key = key;
- temp.frequency = 1;
- temp.next = node.next;
- temp.previous = node;
- node.next.previous = temp;
- node.next = temp;
- size++;
- } else {
- temp.frequency++;
- temp.previous.next = temp.next;
- temp.next.previous = temp.previous;
- Node temp2 = search(temp.frequency);
- if(temp2 == null) {
- temp.next = node;
- temp.previous = node.previous;
- node.previous.next = temp;
- node.previous = temp;
- } else {
- temp2.previous.next = temp;
- temp.previous = temp2.previous;
- temp2.previous = temp;
- temp.next = temp2;
- }
- }
- return node;
- }
- public int[] keyToVector(){
- int vector[] = new int[size];
- Node temp = root.next;
- for(int i = 0; temp.frequency != -1; i++){
- vector[i] = temp.key;
- temp = temp.next;
- }
- return vector;
- }
- public int[] frequencyToVector(){
- int vector[] = new int[size];
- Node temp = root.next;
- for(int i = 0; temp.frequency != -1; i++){
- vector[i] = temp.frequency;
- temp = temp.next;
- }
- return vector;
- }
- public int[][] toMatrix(){
- int matrix[][] = {keyToVector(), frequencyToVector()};
- return matrix;
- }
- @Override
- public String toString() {
- String matrix = "|";
- for(Node i = root.next; i.frequency != -1; i = i.next) {
- matrix = matrix + i.key + '|';
- }
- matrix = matrix + "\n|";
- for(Node i = root.next; i.frequency != -1; i = i.next) {
- matrix = matrix + i.frequency + '|';
- }
- return matrix;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement