Básicamente tengo que invertir una pila, una estructura de datos que la represento como:
Código
typedef struct _AStack { int data[MAX_STACK]; int back; }AStack;
Acá va la duda:
Código
void astack_reverse (AStack *s){ int i; AStack *reverse = astack_create(); for (i=s->back; i >=0; i--){ astack_push(reverse,s->data[i]); } *s = *reverse; }
La duda está en la última linea *s=*reverse, lo que estoy haciendo es igualar todos los elementos de s a reverse, (ya sé que no es lo más eficiente).
Ahora si yo hago s = reverse (sin *) lo que pasa es que yo estoy modificando una variable global (estoy modificando la dirección donde apunta) y cuando vuelve al main perdí la información. Eso si entiendo ...
¿Pero por qué acá no pasa lo mismo?
Acá estoy implementando pilas pero con otra estructura:
Código
typedef struct _AStack { int *data; int size; int back; }AStack;
Código
void astack_push(AStack *s, int v){ if (s != NULL){ if (s->size > s->back){ s->back++; s->data[s->back] = v; }else{ s->size*=2; if (new_data != NULL) s->data = new_data; } } }
Me refiero a esta parte:
Código:
int *new_data = realloc(s->data,(s->size));
if (new_data != NULL) s->data = new_data;
else printf ("No se pudo asignar memoria.\n");
if (new_data != NULL) s->data = new_data;
else printf ("No se pudo asignar memoria.\n");
... s->data = new_data;
Siendo que new_data la declaré dentro de la función y s->data también me lo pasaron, ¿es por como funciona el realloc?, estoy casi seguro que sí.
Se me hizo medio largo.
Saludos!