Foros del Web » Programación para mayores de 30 ;) » C/C++ »

aprendiendo pilas colas parte 2

Estas en el tema de aprendiendo pilas colas parte 2 en el foro de C/C++ en Foros del Web. Hola , yo habia realizado una consulta sobre esto, pero fue un poco extensa... buscando un poco en internet... veo que me cuesta temas del ...
  #1 (permalink)  
Antiguo 17/06/2012, 00:20
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 14 años, 6 meses
Puntos: 5
aprendiendo pilas colas parte 2

Hola , yo habia realizado una consulta sobre esto, pero fue un poco extensa...
buscando un poco en internet... veo que me cuesta temas del principio.. en este caso de una estructura dinamica

QUE ES LO QUE SUCEDE ACA=? PARA QUE ? POR QUE?y ese puntero? donde dice que ant tiene la direccion de memoria de "PiLA" si dicen que este tipo de estructura se redireccionan asi mismas...

struct pila{
char nombre[6];
struct pila *ant;
};

--basicamente me gustaria saber que es lo que sucede aca....

si necesitan el codigo de donde saque esto ...es este...

Código PHP:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


struct pila{
char nombre[6];
struct pila *ant;
};
 
main(){ /* Insertar, extraer y visualizar */
char opc;
struct pila *ultimo=NULL,*actual=NULL;
do{
system("cls");
printf("1.- Insertar");
printf("\n2.- Extraer");
printf("\n3.- Visualizar la pila");
printf("\n4.- Salir");
opc=getch( );
switch(
opc){
case 
'1':
system("cls");
actual= new struct pila;
printf("Nombre: ");
gets(actual->nombre);
actual->ant=ultimo;
ultimo=actual;
break;
case 
'2':
if (
ultimo==NULL)
{
printf("\nNo hay elementos para desapilar");
getch();
break;
}
actual=ultimo;
ultimo=ultimo->ant;
delete actual;
printf("\nElemento desapilado");
getch();
break;
case 
'3':
system("cls");
if (
ultimo==NULL){
printf("No hay elementos para listar");
getch();
break;
}
actual=ultimo;
while (
actual!=NULL){
printf("Nombre: %s\n",actual->nombre);
actual=actual->ant;
}
getch( );
}
}while (
opc!='4');

  #2 (permalink)  
Antiguo 17/06/2012, 01:13
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 13 años
Puntos: 94
Respuesta: aprendiendo pilas colas parte 2

Cita:
QUE ES LO QUE SUCEDE ACA=? PARA QUE ? POR QUE?y ese puntero? donde dice que ant tiene la direccion de memoria de "PiLA" si dicen que este tipo de estructura se redireccionan asi mismas...
creo q deberias reformular las preguntas, ser mas especifico

Mini explicacion: en las pilas las estructuras se ordenan tipo LIFO, osea ultimo en entrar primero en salir. Basicamente lo que hace el case 1 es ir insertando los nodos en la pila. ¿como? a traves de estas lineas:
Código C:
Ver original
  1. actual->ant=ultimo; // aca se hace el enlace
  2. ultimo=actual;
El puntero actual es donde se reserva memoria y donde se ingresa el nombre. Lo que hace actual en la primera linea es: "apunta(a traves de ant) a ultimo". En la segunda linea: "ultimo apunta a actual"

Ejemplo simple: supongamos q se ingresan estos nombre: cesar, vani y diego, en ese orden. En un principio ultimo apunta a NULL:

1º insertar (case 1)
2º se ingresa el nombre cesar en actual // lineas new y gets
3º actual(cesar) apunta a ultimo(NULL) // actual->ant=ultimo
4º ultimo apunta a actual(cesar) // ultimo=actual

La pila qda asi: NULL <- cesar // donde ultimo apunta a cesar

1º insertar (case 1)
2º se ingresa el nombre vani en actual // lineas new y gets
3º actual(vani) apunta a ultimo(cesar) // actual->ant=ultimo
4º ultimo apunta a actual(vani) // ultimo=actual

Pila: NULL <- cesar <- vani // donde ultimo apunta a vani

1º insertar (case 1)
2º se ingresa el nombre diego en actual // lineas new y gets
3º actual(diego) apunta a ultimo(cesar) // actual->ant=ultimo
4º ultimo apunta a actual(vani) // ultimo=actual

Pila: NULL <- cesar <- vani <- diego // donde ultimo apunta a diego

Creo q mas o menos ahi se entiende algo. Desarrollandolo de esta manera podes pensar el case 2. Igual te dejo este link, parece estar bueno y tiene graficos :)
http://es.kioskea.net/faq/2885-las-pilas-en-lenguaje-c


Saludos

Etiquetas: colas, int, parte, pilas, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:15.