Untitled
unknown
c_cpp
2 years ago
3.6 kB
6
Indexable
//ATIVIDADE IMPLEMENTACAO TAD EM PILHAS E FILAS ESTATICAS E DINAMICAS // 29/10/2023 //Grupo: //Itallo Lobo Leite Carneiro RA: //Pedro Fernandes Aguiar RA:2023009216 //Joao Henrique de Menezes Pereira Santos RA:2023002313 //Alisson Fernandes RA: #include <iostream> #define N 10 using namespace std; class No { int chave; No* prox; public: void setChave(int _chave) { chave = _chave; } int getChave() { return chave; } void setProx(No* _prox) { prox = _prox; } No* getProx() { return prox; } }; class PilhaEstatica { int topo = -1, vet[N]; public: void empilha(int x); int desempilha(); int tamanho(); bool vazia() { return topo == -1; } bool cheia() { return topo == N - 1; } }; void PilhaEstatica::empilha(int x) { if (!cheia()) vet[++topo] = x; } int PilhaEstatica::desempilha() { return vazia() ? -1 : vet[topo--]; } int PilhaEstatica::tamanho() { return topo + 1; } class PilhaDinamica { public: No* topo = NULL; void empilha(int _chave); int desempilha(); int tamanho(); bool vazia() { return topo == NULL; } ~PilhaDinamica(); }; void PilhaDinamica::empilha(int _chave) { No* novo_no = new No(); novo_no->setChave(_chave); novo_no->setProx(topo); topo = novo_no; } int PilhaDinamica::desempilha() { if (vazia()) return -1; int chave = topo->getChave(); No* aux = topo; topo = topo->getProx(); delete aux; return chave; } int PilhaDinamica::tamanho() { int tamanho = 0; for (No* aux = topo; aux != NULL; aux = aux->getProx()) tamanho++; return tamanho; } PilhaDinamica::~PilhaDinamica() { while (!vazia()) desempilha(); } class FilaEstatica { private: int inicio = -1, fim = -1, vet[N]; public: void enfileira(int chave); int Desenfileira(); bool Vazia() { return inicio == -1; } }; void FilaEstatica::enfileira(int chave) { if ((fim + 1) % N != inicio) { fim = (fim + 1) % N; vet[fim] = chave; if (inicio == -1) inicio = 0; } } int FilaEstatica::Desenfileira() { if (Vazia()) return -1; int chave = vet[inicio]; inicio == fim ? inicio = fim = -1 : inicio = (inicio + 1) % N; return chave; } class FilaDinamica { private: No* inicio = NULL, * fim = NULL; public: void enfileira(int x); int desenfileira(); bool vazia() { return !inicio; }; }; void FilaDinamica::enfileira(int x) { No* aux = new No(); aux->setChave(x); if (!fim) inicio = fim = aux; else { fim->setProx(aux); fim = aux; } } int FilaDinamica::desenfileira() { if (!inicio) return -1; int item = inicio->getChave(); No* aux = inicio; inicio = inicio->getProx(); if (!inicio) fim = NULL; delete aux; return item; } int main() { PilhaEstatica p; for (int i = 1; i <= 5; i++) p.empilha(i); while (!p.vazia()) cout << p.desempilha() << "\n"; PilhaDinamica* pilha = new PilhaDinamica(); for (int i = 1; i <= 5; i++) pilha->empilha(i); delete pilha; FilaEstatica f; for (int i = 1; i <= 5; i++) f.enfileira(i); for (int i = 0; i < 5; i++) cout << f.Desenfileira() << endl; FilaDinamica* minhaFila = new FilaDinamica(); for (int i = 0; i < 5; i++) minhaFila->enfileira(i); minhaFila->desenfileira(); while (!minhaFila->vazia()) cout << minhaFila->desenfileira() << endl; delete minhaFila; }
Editor is loading...