1 #include <iostream>
2
3 using namespace std;
4 const int tamanho = 8;
5
6 //DEFININDO A ESTRUTURA DE HASH
7 struct hash
8 {
9 int chave;
10 hash* proximo;
11 };
12
13 //FUNÇÃO PARA INSERIR NA TABELA
14 void inserir(hash* tabela[], int posicao, int numero)
15 {
16 cout << " n == INSERINDO == n ";
17 hash* novo;
18 novo = new hash();
19 novo->chave = numero;
20 novo->proximo = tabela[posicao];
21 tabela[posicao] = novo;
22 cout << " n Elemento " << novo->chave << " inserido com sucesso! n ";
23 }
24
25 //FUNÇÃO QUE CALCULA A CHAVE - FUNÇÃO HASHING
26 int hashing(int numero)
27 {
28 cout << " n == FUNCAO HASHING == n";
29 return numero % tamanho;
30 }
31
32 //FUNÇÃO PARA IMPRIMIR A TABELA
33 void imprimir(hash* tabela[])
34 {
35 cout << " n == IMPRIMINDO == n";
36 hash* aux;
37 for(int i =0; i<tamanho; i++)
38 {
39 aux = tabela[i];
40 while(aux != NULL)
41 {
42 cout << " n Entrada: " << i << " Chave: " << aux->chave;
43 aux = aux->proximo;
44 }
45 }
46 cout << "n";
47 }
48
49 //FUNÇÃO PARA EXCLUIR UM ELEMENTO DA TABELA
50 void excluir(hash* tabela[], int numero)
51 {
52 cout << " n == EXCLUINDO == n";
53 int posicao = hashing(numero);
54 hash* aux;
55 if(tabela[posicao] != NULL)
56 {
57 if(tabela[posicao]->chave == numero)
58 {
59 aux = tabela[posicao];
60 tabela[posicao] = tabela[posicao]->proximo;
61 cout << " n Numero " << aux->chave << " excluido com sucesso! n";
62 delete aux;
63 }
64 else
65 {
66 aux = tabela[posicao]->proximo;
67 hash* ant = tabela[posicao];
68
69 while(( aux != NULL ) && ( aux->chave != numero ))
70 {
71 ant = aux;
72 aux = aux->proximo;
73 }
74
75 if( aux != NULL )
76 {
77 ant->proximo = aux->proximo;
78 cout << " n Numero " << aux->chave << " excluido com sucesso! n";
79 delete aux;
80
81 }
82 else
83 {
84 cout << " n Numero nao encontrado! n";
85 }
86
87 }
88 }
89 else
90 {
91 cout << " n Numero nao encontrado! n";
92 }
93 }
94
95 //FUNÇÃO PARA INICIALIZAR A TABELA
96 void inicializar(hash* tabela[])
97 {
98 cout << " n == INICIALIZANDO == n";
99 for(int i =0; i<tamanho; i++)
100 {
101 tabela[i] = NULL;
102 }
103 }
104
105 void destruir(hash* tabela[])
106 {
107 cout << " n == DESTRUINDO == n";
108 hash* aux;
109 for(int i =0; i<tamanho; i++)
110 {
111 while(tabela[i]!=NULL)
112 {
113 aux = tabela[i];
114 tabela[i] = tabela[i]->proximo;
115 delete aux;
116 }
117 }
118 }
119
120 int main()
121 {
122 hash* tabela[tamanho];
123 hash* aux;
124 int opcao, posicao, numero;
125
126 //MENU
127 do
128 {
129 cout << " n | MENU |";
130 cout << " n | 1. Inicializar |";
131 cout << " n | 2. Inserir |";
132 cout << " n | 3. Excluir |";
133 cout << " n | 4. Imprimir |";
134 cout << " n | 5. Destruir |";
135 cout << " n | 6. Sair |";
136 cout << "n";
137 cout << " n Digite a opcao desejada: ";
138 cin >> opcao;
139
140 switch(opcao)
141 {
142 case 1:
143 inicializar(tabela);
144 break;
145 case 2:
146 cout << " n Digite um numero: ";
147 cin >> numero;
148 posicao = hashing(numero);
149 inserir(tabela, posicao, numero);
150 break;
151 case 3:
152 cout << " n Digite um numero: ";
153 cin >> numero;
154 excluir(tabela, numero);
155 break;
156 case 4:
157 imprimir(tabela);
158
159 break;
160 case 5:
161 destruir(tabela);
162 break;
163 default:
164 cout << " n OPCAO INVALIDA ";
165 }
166
167 }
168 while(opcao!=6);
169 return 0;
170 }
171
172

Tabela Hash com Lista Encadeada

  • 1.
    1 #include <iostream> 2 3using namespace std; 4 const int tamanho = 8; 5 6 //DEFININDO A ESTRUTURA DE HASH 7 struct hash 8 { 9 int chave; 10 hash* proximo; 11 }; 12 13 //FUNÇÃO PARA INSERIR NA TABELA 14 void inserir(hash* tabela[], int posicao, int numero) 15 { 16 cout << " n == INSERINDO == n "; 17 hash* novo; 18 novo = new hash(); 19 novo->chave = numero; 20 novo->proximo = tabela[posicao]; 21 tabela[posicao] = novo; 22 cout << " n Elemento " << novo->chave << " inserido com sucesso! n "; 23 } 24 25 //FUNÇÃO QUE CALCULA A CHAVE - FUNÇÃO HASHING 26 int hashing(int numero) 27 { 28 cout << " n == FUNCAO HASHING == n"; 29 return numero % tamanho; 30 } 31 32 //FUNÇÃO PARA IMPRIMIR A TABELA 33 void imprimir(hash* tabela[]) 34 { 35 cout << " n == IMPRIMINDO == n"; 36 hash* aux; 37 for(int i =0; i<tamanho; i++) 38 { 39 aux = tabela[i]; 40 while(aux != NULL) 41 { 42 cout << " n Entrada: " << i << " Chave: " << aux->chave; 43 aux = aux->proximo; 44 } 45 } 46 cout << "n"; 47 } 48 49 //FUNÇÃO PARA EXCLUIR UM ELEMENTO DA TABELA 50 void excluir(hash* tabela[], int numero) 51 { 52 cout << " n == EXCLUINDO == n"; 53 int posicao = hashing(numero); 54 hash* aux; 55 if(tabela[posicao] != NULL) 56 { 57 if(tabela[posicao]->chave == numero) 58 { 59 aux = tabela[posicao]; 60 tabela[posicao] = tabela[posicao]->proximo; 61 cout << " n Numero " << aux->chave << " excluido com sucesso! n"; 62 delete aux; 63 } 64 else 65 { 66 aux = tabela[posicao]->proximo; 67 hash* ant = tabela[posicao]; 68 69 while(( aux != NULL ) && ( aux->chave != numero )) 70 { 71 ant = aux; 72 aux = aux->proximo; 73 } 74 75 if( aux != NULL ) 76 { 77 ant->proximo = aux->proximo; 78 cout << " n Numero " << aux->chave << " excluido com sucesso! n"; 79 delete aux; 80 81 } 82 else 83 { 84 cout << " n Numero nao encontrado! n";
  • 2.
    85 } 86 87 } 88} 89 else 90 { 91 cout << " n Numero nao encontrado! n"; 92 } 93 } 94 95 //FUNÇÃO PARA INICIALIZAR A TABELA 96 void inicializar(hash* tabela[]) 97 { 98 cout << " n == INICIALIZANDO == n"; 99 for(int i =0; i<tamanho; i++) 100 { 101 tabela[i] = NULL; 102 } 103 } 104 105 void destruir(hash* tabela[]) 106 { 107 cout << " n == DESTRUINDO == n"; 108 hash* aux; 109 for(int i =0; i<tamanho; i++) 110 { 111 while(tabela[i]!=NULL) 112 { 113 aux = tabela[i]; 114 tabela[i] = tabela[i]->proximo; 115 delete aux; 116 } 117 } 118 } 119 120 int main() 121 { 122 hash* tabela[tamanho]; 123 hash* aux; 124 int opcao, posicao, numero; 125 126 //MENU 127 do 128 { 129 cout << " n | MENU |"; 130 cout << " n | 1. Inicializar |"; 131 cout << " n | 2. Inserir |"; 132 cout << " n | 3. Excluir |"; 133 cout << " n | 4. Imprimir |"; 134 cout << " n | 5. Destruir |"; 135 cout << " n | 6. Sair |"; 136 cout << "n"; 137 cout << " n Digite a opcao desejada: "; 138 cin >> opcao; 139 140 switch(opcao) 141 { 142 case 1: 143 inicializar(tabela); 144 break; 145 case 2: 146 cout << " n Digite um numero: "; 147 cin >> numero; 148 posicao = hashing(numero); 149 inserir(tabela, posicao, numero); 150 break; 151 case 3: 152 cout << " n Digite um numero: "; 153 cin >> numero; 154 excluir(tabela, numero); 155 break; 156 case 4: 157 imprimir(tabela); 158 159 break; 160 case 5: 161 destruir(tabela); 162 break; 163 default: 164 cout << " n OPCAO INVALIDA "; 165 } 166 167 } 168 while(opcao!=6);
  • 3.