Problema con punteros.

Iniciado por vazquinhos, 19 Septiembre 2012, 11:01 AM

0 Miembros y 1 Visitante están viendo este tema.

vazquinhos

Tengo un poco de lio con los punteros.
Me he declarado una clase

lifo.h
#include<iostream>

struct Tnodo
{
  Tnodo *ant;
  int datos; 
};
typedef Tnodo *Tpila;

class lifo
{
private:
Tnodo *stack;
public:
//Constructores
lifo(void);
//Mira si la pila esta vacia
bool isEmpty(void);
//Mira el primer elemento de la pila sin quitarlo
int peek(void);
//Elimina el ultimo elemento
void pop(void);
//Inserta un nuevo elemento en la pila
void push(int new_element);
//Muestra por pantalla los elementos de nuestra pila
void print(void);
};


He hecho su implementacion, pero no me hace bien las cosas por tema de acceso a punteros.

lifo.cpp
#include"lifo.h"

//Constructor de la clase lifo
lifo::lifo(void)
{
stack->datos = 0;
stack->ant = NULL;
}

void lifo::push(int new_element)
{
Tnodo *nodo;
nodo->datos = new_element;
if(stack->ant == NULL)
{
nodo->ant = NULL;
}else
{
[s]nodo->ant = stack->ant;[/s]
}
stack->ant = &(*nodo);
}

void lifo::pop(void)
{
if(stack->ant == NULL)
{
std::cout<<"No hay elementos"<<std::endl;
}else
{
Tnodo * aux;
aux->ant = stack->ant;
delete(stack->ant);
stack->ant=aux->ant;
delete(aux);
}
}

int lifo::peek(void)
{
if (stack->ant != NULL)
{
return(stack->ant->datos);
}else
{
std::cout<<"No hay elementos"<<std::endl;
}
}

bool lifo::isEmpty(void)
{
if(stack->ant == NULL)
{
return(false);
}else
{
return(true);
}
}

void lifo::print(void){

Tnodo *aux;
aux->ant = stack->ant;
while(aux->ant != NULL)
{
std::cout<<"|"<<aux->ant->datos<<"|-->";
}
}


y aqui estaba comprobando que  funcionase.
main.cpp
#include"lifo.h"

void main()
{
lifo pila;
pila.push(5);
pila.print();

}


He estado debugando y el problema son los punteros, pero al declarlos dentro de la clase no se como acceder a ellos bien bien o asignarles valores. Algunos puntos que veo criticos.

stack->ant = &(*nodo);
aux->ant->datos;
stack->datos = 0;
delete(stack->ant);

Gracias

do-while

¡Buenas!

Veo un problema aqui (no he seguido leyendo) corrijelo y nos cuentas:

Código (cpp) [Seleccionar]

void lifo::push(int new_element)
{
Tnodo *nodo;

//No asignas memoria a nodo, solo asignas a nodo->datos el valor del parametro
nodo->datos = new_element;

if(stack->ant == NULL)
{
nodo->ant = NULL;
}else
{
[s]nodo->ant = stack->ant;[/s]
}

//asignas una direccion de una variable local, ya que no has asignado memoria a nodo
stack->ant = &(*nodo);


¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

anonimo12121

claro se te olvida el operador new
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

vazquinhos

He quitado el puntero a Tnodo y ya me funciona la asignacion y todo lo demas, ahora tengo problemas al printar que no me printa nada xdddd.

Gracias!

do-while

Cita de: vazquinhos en 20 Septiembre 2012, 10:33 AM
He quitado el puntero a Tnodo

¡¡¡¡¡¿¿¿¿¿?????!!!!!

No visualizo lo que dices. ¿Donde estas almacenando la informacion? ¿Puedes poner el codigo?
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!