Loading exercicio4.cpp +67 −19 Changes for exercicio4.cpp: 67 added lines, 19 removed lines. Original line number Original line Diff line number Diff line #include <iostream> #include <iostream> template <class D> class container { template <class D> class container { public: public: container *proximo; container *proximo; Loading Loading @@ -75,6 +76,10 @@ class Pilha { else else return -1; return -1; } } int tamanho() { return N; } private: private: static const int MAX = 900; static const int MAX = 900; int N = 0; int N = 0; Loading @@ -82,45 +87,88 @@ class Pilha { }; }; template <class T> Pilha<T> inverterPilha(Pilha<T> pilha) { /** * Dado uma pilha, inverter ela utilizando uma pilha auxiliar * * para isso eu percorro toda a pilha * 1° passo: Guardo o topo da pilha numa aux * 2° passo: Desempilha o primeiro ítem da pilha * 3° passo: Passo (todos os itens que ainda não foram trocados) da pilha para a pilha auxiliar * 4° passo: Empilho o item salvo no aux para ficar como base da pilha. * dessa forma, o que eu fiz foi inverter o elemento que estava * no topo, indo para o começo. * 5° passo: volto (todos os ítens que ainda não foram trocados) da pilhaAux para a pilha * 6° passo: repito os passos até finalizar a troca * * */ template <class T> void inverterPilha(Pilha<T> *pilha) { Pilha<T> pilhaAux; Pilha<T> pilhaAux; while (pilha.topo() != -1) { int n = pilha->tamanho(); pilhaAux.empilha(pilha.desempilha()); T aux; for (int i = 0; i < n; i++) { aux = pilha->topo(); pilha->desempilha(); for (int j=0; j < n - i -1 ; j++) { pilhaAux.empilha(pilha->desempilha()); } pilha->empilha(aux); for (int j=0; j < n - i -1 ; j++) { pilha->empilha(pilhaAux.desempilha()); } } } return pilhaAux; } } template <class T> Pilha<T> inverterPilhaComFila(Pilha<T> pilha) { /** * @brief Dada uma pilha, inverter os valores utilizando uma fila * 1° passo: percorrer toda a pilha, desempilhando e enfileirando numa fila * 2° passo: desinfilerar toda a fila, empilhando na pilha * * @tparam T * @param pilha */ template <class T> void inverterPilhaComFila(Pilha<T> *pilha) { Fila<T> filaAux; Fila<T> filaAux; while (pilha.topo() != -1) { while (pilha->topo() != -1) { filaAux.enfilera(pilha.desempilha()); filaAux.enfilera(pilha->desempilha()); } } while (filaAux.frente() != -1) { while (filaAux.frente() != -1) { pilha.empilha(filaAux.desenfilera()); pilha->empilha(filaAux.desenfilera()); } } return pilha; } } template <class T> Pilha<T> inverterPilhaComDuasPilhas(Pilha<T> pilha) { /** * @brief dado uma pilha, inverta utilizando duas pilhas * * 1° Passo: passo todos os itens para uma pilha auxiliar * 2° Passo: passo todos os iten para uma segunda pilha auxiliar * 3° Passo: volto todos os itens para a primeira pilha * * Dessa forma a pilha ficará invertida * * @tparam T * @param pilha */ template <class T> void inverterPilhaComDuasPilhas(Pilha<T> *pilha) { Pilha<T> pilhaAux, pilhaAux2; Pilha<T> pilhaAux, pilhaAux2; while (pilha.topo() != -1) { while (pilha->topo() != -1) { pilhaAux.empilha(pilha.desempilha()); pilhaAux.empilha(pilha->desempilha()); } } while (pilhaAux.topo() != -1) { while (pilhaAux.topo() != -1) { pilhaAux2.empilha(pilhaAux.desempilha()); pilhaAux2.empilha(pilhaAux.desempilha()); } } while (pilhaAux2.topo() != -1) { while (pilhaAux2.topo() != -1) { pilhaAux.empilha(pilhaAux2.desempilha()); pilha->empilha(pilhaAux2.desempilha()); } } return pilhaAux; } } void preencherPilha(Pilha<char> &pilha) { void preencherPilha(Pilha<char> &pilha) { Loading Loading @@ -171,15 +219,15 @@ int main(int argc, char* argv[]) { preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilha(pilha); inverterPilha(&pilha); printarPilha(pilha, "Pilha invertida com pilha"); printarPilha(pilha, "Pilha invertida com pilha"); preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilhaComFila(pilha); inverterPilhaComFila(&pilha); printarPilha(pilha, "Pilha invertida com FILA"); printarPilha(pilha, "Pilha invertida com FILA"); preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilhaComDuasPilhas(pilha); inverterPilhaComDuasPilhas(&pilha); printarPilha(pilha, "Pilha invertida com duas Pilhas"); printarPilha(pilha, "Pilha invertida com duas Pilhas"); Loading Loading
exercicio4.cpp +67 −19 Changes for exercicio4.cpp: 67 added lines, 19 removed lines. Original line number Original line Diff line number Diff line #include <iostream> #include <iostream> template <class D> class container { template <class D> class container { public: public: container *proximo; container *proximo; Loading Loading @@ -75,6 +76,10 @@ class Pilha { else else return -1; return -1; } } int tamanho() { return N; } private: private: static const int MAX = 900; static const int MAX = 900; int N = 0; int N = 0; Loading @@ -82,45 +87,88 @@ class Pilha { }; }; template <class T> Pilha<T> inverterPilha(Pilha<T> pilha) { /** * Dado uma pilha, inverter ela utilizando uma pilha auxiliar * * para isso eu percorro toda a pilha * 1° passo: Guardo o topo da pilha numa aux * 2° passo: Desempilha o primeiro ítem da pilha * 3° passo: Passo (todos os itens que ainda não foram trocados) da pilha para a pilha auxiliar * 4° passo: Empilho o item salvo no aux para ficar como base da pilha. * dessa forma, o que eu fiz foi inverter o elemento que estava * no topo, indo para o começo. * 5° passo: volto (todos os ítens que ainda não foram trocados) da pilhaAux para a pilha * 6° passo: repito os passos até finalizar a troca * * */ template <class T> void inverterPilha(Pilha<T> *pilha) { Pilha<T> pilhaAux; Pilha<T> pilhaAux; while (pilha.topo() != -1) { int n = pilha->tamanho(); pilhaAux.empilha(pilha.desempilha()); T aux; for (int i = 0; i < n; i++) { aux = pilha->topo(); pilha->desempilha(); for (int j=0; j < n - i -1 ; j++) { pilhaAux.empilha(pilha->desempilha()); } pilha->empilha(aux); for (int j=0; j < n - i -1 ; j++) { pilha->empilha(pilhaAux.desempilha()); } } } return pilhaAux; } } template <class T> Pilha<T> inverterPilhaComFila(Pilha<T> pilha) { /** * @brief Dada uma pilha, inverter os valores utilizando uma fila * 1° passo: percorrer toda a pilha, desempilhando e enfileirando numa fila * 2° passo: desinfilerar toda a fila, empilhando na pilha * * @tparam T * @param pilha */ template <class T> void inverterPilhaComFila(Pilha<T> *pilha) { Fila<T> filaAux; Fila<T> filaAux; while (pilha.topo() != -1) { while (pilha->topo() != -1) { filaAux.enfilera(pilha.desempilha()); filaAux.enfilera(pilha->desempilha()); } } while (filaAux.frente() != -1) { while (filaAux.frente() != -1) { pilha.empilha(filaAux.desenfilera()); pilha->empilha(filaAux.desenfilera()); } } return pilha; } } template <class T> Pilha<T> inverterPilhaComDuasPilhas(Pilha<T> pilha) { /** * @brief dado uma pilha, inverta utilizando duas pilhas * * 1° Passo: passo todos os itens para uma pilha auxiliar * 2° Passo: passo todos os iten para uma segunda pilha auxiliar * 3° Passo: volto todos os itens para a primeira pilha * * Dessa forma a pilha ficará invertida * * @tparam T * @param pilha */ template <class T> void inverterPilhaComDuasPilhas(Pilha<T> *pilha) { Pilha<T> pilhaAux, pilhaAux2; Pilha<T> pilhaAux, pilhaAux2; while (pilha.topo() != -1) { while (pilha->topo() != -1) { pilhaAux.empilha(pilha.desempilha()); pilhaAux.empilha(pilha->desempilha()); } } while (pilhaAux.topo() != -1) { while (pilhaAux.topo() != -1) { pilhaAux2.empilha(pilhaAux.desempilha()); pilhaAux2.empilha(pilhaAux.desempilha()); } } while (pilhaAux2.topo() != -1) { while (pilhaAux2.topo() != -1) { pilhaAux.empilha(pilhaAux2.desempilha()); pilha->empilha(pilhaAux2.desempilha()); } } return pilhaAux; } } void preencherPilha(Pilha<char> &pilha) { void preencherPilha(Pilha<char> &pilha) { Loading Loading @@ -171,15 +219,15 @@ int main(int argc, char* argv[]) { preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilha(pilha); inverterPilha(&pilha); printarPilha(pilha, "Pilha invertida com pilha"); printarPilha(pilha, "Pilha invertida com pilha"); preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilhaComFila(pilha); inverterPilhaComFila(&pilha); printarPilha(pilha, "Pilha invertida com FILA"); printarPilha(pilha, "Pilha invertida com FILA"); preencherPilha(pilha); preencherPilha(pilha); pilha = inverterPilhaComDuasPilhas(pilha); inverterPilhaComDuasPilhas(&pilha); printarPilha(pilha, "Pilha invertida com duas Pilhas"); printarPilha(pilha, "Pilha invertida com duas Pilhas"); Loading