-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d27c7a7
commit 9952c5f
Showing
4 changed files
with
247 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
#include <iostream> | ||
#include "Pilha.hpp" | ||
|
||
using namespace std; | ||
|
||
void FazPilhaVazia(TipoPilha *pilha) | ||
{ | ||
pilha->topo = NULL; | ||
pilha->tamanho = 0; | ||
} | ||
|
||
bool VerificaPilhaVazia(TipoPilha *pilha) | ||
{ | ||
return (pilha->topo == NULL); | ||
} | ||
|
||
void Empilha(TipoPilha *pilha, TipoItem item) | ||
{ | ||
Apontador aux; | ||
|
||
aux = new TipoElemento; // Aloca memória para o novo elemento (célula) | ||
aux->item = item; | ||
aux->prox = pilha->topo; | ||
pilha->topo = aux; | ||
pilha->tamanho++; | ||
} | ||
|
||
void Desempilha(TipoPilha *pilha, TipoItem *item) | ||
{ | ||
Apontador aux; | ||
|
||
if (VerificaPilhaVazia(pilha)) | ||
{ | ||
cout << "Pilha vazia!" << endl; | ||
return; | ||
} | ||
|
||
aux = pilha->topo; | ||
*item = aux->item; | ||
pilha->topo = aux->prox; | ||
delete aux; | ||
pilha->tamanho--; | ||
} | ||
|
||
void ExibePilha(TipoPilha *pilha) | ||
{ | ||
Apontador aux; | ||
|
||
if (VerificaPilhaVazia(pilha)) | ||
{ | ||
cout << "Pilha vazia!" << endl; | ||
return; | ||
} | ||
|
||
aux = pilha->topo; | ||
while (aux != NULL) | ||
{ | ||
cout << aux->item.id << " - " << aux->item.nome << endl; | ||
aux = aux->prox; | ||
} | ||
} | ||
|
||
int Tamanho(TipoPilha *pilha) | ||
{ | ||
return pilha->tamanho; | ||
} | ||
|
||
void ConsultaPorID(TipoPilha *pilha, int id) | ||
{ | ||
Apontador aux; | ||
|
||
if (VerificaPilhaVazia(pilha)) | ||
{ | ||
cout << "Pilha vazia!" << endl; | ||
return; | ||
} | ||
|
||
aux = pilha->topo; | ||
while (aux != NULL) | ||
{ | ||
if (aux->item.id == id) | ||
{ | ||
cout << "ID: " << aux->item.id << " - Nome: " << aux->item.nome << endl; | ||
return; | ||
} | ||
aux = aux->prox; | ||
} | ||
cout << "ID não encontrado!" << endl; | ||
} | ||
|
||
void ConsultaPorNome(TipoPilha *pilha, char nome[50]) | ||
{ | ||
Apontador aux; | ||
|
||
if (VerificaPilhaVazia(pilha)) | ||
{ | ||
cout << "Pilha vazia!" << endl; | ||
return; | ||
} | ||
|
||
aux = pilha->topo; | ||
while (aux != NULL) | ||
{ | ||
if (strcmp(aux->item.nome, nome) == 0) | ||
{ | ||
cout << "ID: " << aux->item.id << " - Nome: " << aux->item.nome << endl; | ||
return; | ||
} | ||
aux = aux->prox; | ||
} | ||
cout << "Nome não encontrado!" << endl; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#ifndef PILHA_H | ||
#define PILHA_H | ||
|
||
// Item para armazenar os dados contidos na pilha | ||
typedef struct TipoItem | ||
{ | ||
int id; | ||
char nome[50]; | ||
} TipoItem; | ||
|
||
// Ponteiro para o elemento da pilha | ||
typedef struct TipoElemento *Apontador; | ||
|
||
// Elemento (célula) da pilha | ||
typedef struct TipoElemento | ||
{ | ||
TipoItem item; | ||
Apontador prox; | ||
} TipoElemento; | ||
|
||
// Estrutura da pilha | ||
typedef struct TipoPilha | ||
{ | ||
Apontador topo; | ||
int tamanho; | ||
} TipoPilha; | ||
|
||
// Funções da pilha | ||
void FazPilhaVazia(TipoPilha *pilha); | ||
bool VerificaPilhaVazia(TipoPilha *pilha); | ||
void Empilha(TipoPilha *pilha, TipoItem item); | ||
void Desempilha(TipoPilha *pilha, TipoItem *item); | ||
void ExibePilha(TipoPilha *pilha); | ||
int Tamanho(TipoPilha *pilha); | ||
void ConsultaPorID(TipoPilha *pilha, int id); | ||
void ConsultaPorNome(TipoPilha *pilha, char nome[50]); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#include <iostream> | ||
#include <cstring> | ||
#include "Pilha.cpp" | ||
|
||
using namespace std; | ||
|
||
void Menu() | ||
{ | ||
cout << "1. Exibe Pilha" << endl; | ||
cout << "2. Consulta por ID" << endl; | ||
cout << "3. Consulta por Nome" << endl; | ||
cout << "4. Sair" << endl; | ||
cout << "\nOpcao: "; | ||
} | ||
|
||
int main() | ||
{ | ||
TipoItem item; | ||
TipoPilha pilha; | ||
int opcao, id; | ||
|
||
FazPilhaVazia(&pilha); | ||
|
||
item.id = 1; | ||
strcpy(item.nome, "Joao"); | ||
Empilha(&pilha, item); | ||
|
||
item.id = 2; | ||
strcpy(item.nome, "Maria"); | ||
Empilha(&pilha, item); | ||
|
||
item.id = 3; | ||
strcpy(item.nome, "Jose"); | ||
Empilha(&pilha, item); | ||
|
||
do | ||
{ | ||
system("cls"); | ||
Menu(); | ||
cin >> opcao; | ||
|
||
switch (opcao) | ||
{ | ||
case 1: | ||
cout << endl; | ||
ExibePilha(&pilha); | ||
cout << endl; | ||
system("PAUSE"); | ||
break; | ||
case 2: | ||
cout << "Digite o ID: "; | ||
cin >> id; | ||
cout << endl; | ||
ConsultaPorID(&pilha, id); | ||
cout << endl; | ||
system("PAUSE"); | ||
break; | ||
case 3: | ||
cout << "Digite o Nome: "; | ||
cin.ignore(); | ||
cin.getline(item.nome, 50); | ||
cout << endl; | ||
ConsultaPorNome(&pilha, item.nome); | ||
cout << endl; | ||
system("PAUSE"); | ||
break; | ||
case 4: | ||
cout << "Saindo..." << endl; | ||
break; | ||
} | ||
} while (opcao != 4); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
## Atividades Práticas | ||
|
||
1. Utilizando a TAD de Pilha com Ponteiro, escreva uma função para converter um número decimal para binário. Lembre-se de: | ||
|
||
- Dividir por 2 e anotar o resto (da direita para a esquerda); | ||
- Pegar a parte inteira; | ||
- Dividir por 2 e anotar o resto. | ||
|
||
Exemplo: | ||
|
||
* 13/2 = 6 Resto **1** | ||
* 6/2 = 3 Resto **0** | ||
* 3/2 = 1 Resto **1** | ||
* 1/2 = 0 Resto **1** | ||
* 0 **Fim** | ||
|
||
Resultado: **1101** | ||
|
||
2. Elabore duas funções para consultar em uma pilha dinâmica a existência de um item. Considere que o item possa ser pesquisado por id (primeira função) ou nome (segunda função), utilizando a TAD vista em aula. | ||
|
||
void ConsultaPorID(TipoPilha *pilha, int id); | ||
|
||
void ConsultaPorNome(TipoPilha *pilha, char nome[]); |