Commit 00a64462 by Alan de Oliveira

Conclusão do exercício 7

parent 870cf896
...@@ -104,21 +104,12 @@ int main(int argc, char* argv[]) { ...@@ -104,21 +104,12 @@ int main(int argc, char* argv[]) {
meuDeque.insereInicio(7); meuDeque.insereInicio(7);
auto d = meuDeque.removeFim(); auto d = meuDeque.removeFim();
/*printf ("primeiro %d ", d);
d = meuDeque.removeFim();
printf ("segundo %d ", d);
d = meuDeque.removeFim();
printf ("terceiro %d ", d);
d = meuDeque.removeinicio();
printf ("quarto %d ", d);
d = meuDeque.removeinicio();*/
while (d != -1) { while (d != -1) {
printf ("%d ", d); printf ("%d ", d);
d = meuDeque.removeinicio(); d = meuDeque.removeinicio();
} }
return 0; return 0;
} }
\ No newline at end of file
#include <iostream>
template <class T>
class PilhaMin {
public:
void empilha(T elemento) {
N++;
elementos[N -1] = elemento;
}
T desempilha() {
if (N > 0) {
N--;
return elementos[N];
}
else
return -1;
}
T topo() {
if (N > 0)
return elementos[N -1];
else
return -1;
}
T obterMinimo() {
T *minimo = &elementos[0];
for (int i = 1; i < N; i++) {
if (elementos[i] < *(minimo))
minimo = &elementos[i];
}
return *(minimo);
}
private:
static const int MAX = 900;
int N = 0;
T elementos[MAX];
};
void preencherPilha(PilhaMin<char> &pilha) {
pilha.empilha('b');
pilha.empilha('c');
pilha.empilha('d');
pilha.empilha('e');
pilha.empilha('f');
pilha.empilha('g');
pilha.empilha('h');
pilha.empilha('i');
pilha.empilha('j');
pilha.empilha('k');
pilha.empilha('l');
pilha.empilha('m');
pilha.empilha('a');
pilha.empilha('1');
pilha.empilha('n');
pilha.empilha('o');
pilha.empilha('p');
pilha.empilha('q');
pilha.empilha('r');
pilha.empilha('s');
pilha.empilha('t');
pilha.empilha('u');
pilha.empilha('v');
pilha.empilha('w');
pilha.empilha('x');
pilha.empilha('y');
pilha.empilha('z');
}
int main(int argc, char* argv[]) {
PilhaMin<char> pilha;
preencherPilha(pilha);
std::cout << "Mínimo: " << pilha.obterMinimo() << std::endl;
return 0;
}
\ No newline at end of file
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
template <class D> class container {
public:
container *proximo;
D elemento;
};
template <class T, class Container=container<T>>
class Fila {
public:
void enfilera(T elem) {
auto cont = new container<T>();
cont->elemento = elem;
if (fim != nullptr)
fim->proximo = cont;
else
inicio = cont;
fim = cont;
}
T desenfilera() {
if (inicio != nullptr) {
T elemento = inicio->elemento;
Container *i = inicio;
inicio = inicio->proximo;
if (inicio == nullptr)
fim = nullptr;
delete i;
return elemento;
}
else
return -1;
}
T frente() {
if (inicio != nullptr)
return inicio->elemento;
else
return -1;
}
private:
Container *inicio = nullptr;
Container *fim = nullptr;
};
template <class T>
class Pilha {
public:
void empilha(T elemento) {
N++;
elementos[N -1] = elemento;
}
T desempilha() {
if (N > 0) {
N--;
return elementos[N];
}
else
return -1;
}
T topo() {
if (N > 0)
return elementos[N -1];
else
return -1;
}
private:
static const int MAX = 900;
int N = 0;
T elementos[MAX];
};
bool operador(char s) {
vector<char> operadores = {'*','+', '-', '/' };
for(char o: operadores) {
if (o == s)
return true;
}
return false;
}
bool parenteses(char s) {
vector<char> operadores = {'(',')'};
for(char o: operadores) {
if (o == s)
return true;
}
return false;
}
string polonisar(string expr) {
auto stream = stringstream{expr};
char aux;
Pilha<char> operadores;
Fila<char> fila_retorno;
while (stream >> aux) {
if (aux != '(')
if (operador(aux))
operadores.empilha(aux);
else
if (aux == ')') {
while (operadores.topo() != -1){
fila_retorno.enfilera(operadores.desempilha());
}
}
else
fila_retorno.enfilera(aux);
}
string exp_retorno;
while (fila_retorno.frente() != -1) {
exp_retorno += fila_retorno.desenfilera();
}
return exp_retorno;
}
int main(int argc, char* argv[]) {
string expr = "((A+B)*(C-(F/D)))";
cout <<"Expressão: " << expr << endl;
cout <<"Expressão Polonesa Reversa: " << polonisar(expr) << endl;
return 0;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment