Ayuda Practica c++
Buenas!!!! Estoy haciendo la Carrera de Informatica y necesito una practica muy jodida de C++ sobre representacion de expresiones en arboles binarios. Es una practica de una calculadora polaca inversa y la verdad es que esta muy jodido el tema pk se ha de implementarr con memoria dinamica y calses como token,expresion,variables... Teneis alguna practica similar para hacer esto???? Gracias peña!!!
Asumo que no has trabajado nunca con estructuras de datos como listas, arboles, etc...
te recomiendo que primero aprendas a trabajar con listas dinàmicas y luego te metes a trabajar con arboles...
aquì te ayudo con algo...
para crear un nodo dinamico:
struct nodo{
/* el dato que yo quiera en cada nodo */
struct nodo *izq;
struct nodo *der;
};
las hojas mas distantes en el arbol llevan NULL en izq y der.
raiz es un puntero de tipoNodo que tiene el primer elemento del arbol apuntado...
para instanciar un nodo.
struct nodo *aux = new struct nodo;
aux->dato = lo que yo quiera.....
si yo prengunto si aux == NULL significa que no hay memoria....
para borrar un nodo
- lo apunto con otro puntero
utilizo delete ptr; o free(ptr);
trabaja con cadenas y funciones para generar tokens porque quieres dividir la expresion.
existen 3 metodos para introducirla: inorden, preorden, postorden.
para preorden:
void preorden(struct nodo *tmp){
if(tmp != NULL){
mostrar(tmp->dato);
preorden(tmp->izq);
preorden(tmp->der);
}
}
para postorden, mostrar va al final
en inorden, mostrar va en medio....
en este site podràs encontrar bastante codigo de asignacion dinamica....
te recomiendo que primero aprendas a trabajar con listas dinàmicas y luego te metes a trabajar con arboles...
aquì te ayudo con algo...
para crear un nodo dinamico:
struct nodo{
/* el dato que yo quiera en cada nodo */
struct nodo *izq;
struct nodo *der;
};
las hojas mas distantes en el arbol llevan NULL en izq y der.
raiz es un puntero de tipoNodo que tiene el primer elemento del arbol apuntado...
para instanciar un nodo.
struct nodo *aux = new struct nodo;
aux->dato = lo que yo quiera.....
si yo prengunto si aux == NULL significa que no hay memoria....
para borrar un nodo
- lo apunto con otro puntero
utilizo delete ptr; o free(ptr);
trabaja con cadenas y funciones para generar tokens porque quieres dividir la expresion.
existen 3 metodos para introducirla: inorden, preorden, postorden.
para preorden:
void preorden(struct nodo *tmp){
if(tmp != NULL){
mostrar(tmp->dato);
preorden(tmp->izq);
preorden(tmp->der);
}
}
para postorden, mostrar va al final
en inorden, mostrar va en medio....
en este site podràs encontrar bastante codigo de asignacion dinamica....
me equivoque en lo de preorden,postorden e inorden...
esas funciones son para recorrer el arbol....
esas funciones son para recorrer el arbol....
