-
Notifications
You must be signed in to change notification settings - Fork 0
/
HashEncadeado.cpp
99 lines (89 loc) · 2.96 KB
/
HashEncadeado.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "HashEncadeado.h"
// Construtor
HashEncadeado::HashEncadeado() {
this->inicio = nullptr;
this->tamanho = 0;
}
// Fim Construtor
// Destrutor
HashEncadeado::~HashEncadeado() {
// Percorre lista enquanto o inicio for diferente de null
while(this->inicio != nullptr) {
// Se o proximo ao inicio tambem for diferente de null
if(inicio->getProximo() != nullptr) {
// Pega o proximo do inicio como No temporario
HashNo *temp = inicio->getProximo();
// Seta o proximo do inicio como null para evitar erro de lixo de memoria
this->inicio->setProximo(nullptr);
// Deleta o no inicio
delete this->inicio;
// Inicio recebe o antigo proximo dele, o temporario
// Dessa forma vai removendo 1 por 1 do inicio até desalocar toda a lista
this->inicio = temp;
} else {
// Inicio recebe null
this->inicio = nullptr;
}
}
}
// Fim Destrutor
// Inicio Getters e setters
HashNo* HashEncadeado::getInicio() {
return inicio;
}
void HashEncadeado::setInicio(HashNo *inicio) {
this->inicio = inicio;
}
int HashEncadeado::getTamanho() {
return tamanho;
}
void HashEncadeado::setTamanho(int tamanho) {
this->tamanho = tamanho;
}
// Fim Getters e setters
// Inicio verificar lista vazia
bool HashEncadeado::vazia() {
return this->inicio == nullptr;
}
// Fim verificar lista vazia
// Inicio inserir no inicio da lista
void HashEncadeado::inserir(string app_version) {
// Verifica se a lista nao é vazia
if(!app_version.empty()) {
// Cria um novo No
HashNo *no = new HashNo(app_version, 1);
// Seta o proximo como o inicio atual da lista
no->setProximo(this->inicio);
// Inicio da lista recebe o novo No
this->inicio = no;
// Incrementa o tamanho da lista encadeada
this->tamanho++;
}
}
// Fim inserir no inicio da lista
// Inicio buscar No pela app version
HashNo* HashEncadeado::buscarHashNo(string app_version) {
// Se a string app version nao for vazia
if(!app_version.empty()) {
// Percorre toda lista encadeada
for (HashNo *noAtual = this->inicio; noAtual != nullptr; noAtual = noAtual->getProximo()) {
// Compara o no atual com a string app version
if (noAtual->getAppVersion() == app_version) {
// Retorna o No se achar
return noAtual;
}
}
}
// Se nao achar nada retorna ponteiro para null
return nullptr;
}
// Fim buscar No pela app version
// Inicio imprimir lista encadeada
void HashEncadeado::imprimir() {
// Percorre toda lista encadeada e escreve ela
for (HashNo *noAtual = this->inicio; noAtual != nullptr; noAtual = noAtual->getProximo()) {
cout << "App Version: " << noAtual->getAppVersion() << endl;
cout << "Frequencia Colisao: " << noAtual->getFrequencia() << endl;
}
}
// Fim imprimir lista encadeada