elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Una pila en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una pila en C  (Leído 3,972 veces)
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Una pila en C
« en: 25 Junio 2011, 18:37 pm »

Hola a todos,

Me parecia interesante postear una pila que hice,para que los que se inicien en las pilas(yo no estoy diciendo que sea un experto,bastante lejos de la realidad  :xD )tengan un modelo de como es,si hay algun error o algo por mejorar,sea bueno o malo no dudeis en decirmelo:
Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. struct pila{
  4.       int dato;
  5.       struct pila *sig;
  6.       };
  7.  
  8. void inicializapila(struct pila **p){
  9.     *p =NULL;
  10.     }
  11.     void push(struct pila **p,int k){
  12.  
  13.     struct pila *n;
  14.     n = new pila;
  15.     if (n==NULL){
  16.  printf("\nError!No se ha podido crear un nodo en memoria");
  17. exit(0);
  18.  }else{
  19. printf("\nnuevo nodo en memoria creado");
  20.   n->dato = k;
  21.   n->sig = *p;
  22.   *p=n;
  23.    }
  24.    }
  25.  
  26.    int pop(struct pila **p){
  27.    struct pila *m;
  28.    int k;
  29.    m = *p;
  30.    k = m->dato;
  31.    *p = m->sig;
  32.     delete m;
  33.     return k;
  34.      }
  35.                            int verificarpila(struct pila *p){
  36.                                if (p == NULL){
  37.                                       printf("\n!!!!la pila esta vacia!!!");
  38.                                       getchar();
  39.                                       exit(0);
  40.                                       }else{
  41.                                             printf("\nla pila continua llena");
  42.                                             return 1;
  43.                                             }
  44.                                             }
  45.  
  46.                                             int main (){
  47.                                                 struct pila *p;
  48.                                                 int k;
  49.                                                 char res;
  50.                                                 int x;
  51.                                                 char res2;
  52.  
  53.  
  54.                                                 printf("\nvamos a practicar con nodos\n");
  55.                                                 printf("\nverificando si hay espacio en memoria...\n");
  56.                                                inicializapila(&p);
  57.                                                do{
  58.                                                    printf("\nintroduzca un numero: ");
  59.                                                 scanf("%d",&k);
  60.                                                 setbuf ( stdin, NULL );
  61.                                                 push(&p,k);
  62.                                                 printf("\n¿quiere introducir otro valor al nodo S/N: ");
  63.                                                 res = getchar();
  64.                                                }while ((res== 's') || (res=='S'));
  65.                                                do{printf("\nAhora vamos a quitar nodos");
  66.                                                x =  pop(&p);
  67.                                                printf("\nel valor del campo dato del nodo retirado es %d",x);
  68.                                                getchar();
  69.                                                verificarpila(p);
  70.                                                printf("\nquiere quitar otro nodo?(Importante:Si se quitan todos los nodos el programa terminara) S/N: ");
  71.                                                res2 =getchar();
  72.                                                }while ((res2 =='S') || (res2=='s'));
  73.  
  74.                                                 getchar();
  75.                                                 return 0;
  76.  
  77.                                       }

PD:Perdonad la tabulacion xD,si tengo un momento edito el mensaje y la mejoro.Si alguien quiere que ponga comentarios en el codigo que me avise.

Salu2


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Una pila en C
« Respuesta #1 en: 25 Junio 2011, 19:24 pm »

No es muy bueno combinar C y C++ aunque te funcione..., es mejor hacerlo de una vez en C si mayoritariamente es lo que estás usando.

Habría que cambiar el new por algo como:

Código
  1. #include <stdlib.h>
  2. struct pila *new()
  3. {
  4.    return malloc(sizeof(struct pila));
  5. }
  6.  

Y hacer la asignación de un nuevo elemento así:
Código
  1. struct pila *n;
  2.    n = new();
  3.  
Y cambiar el delete por free(m);

No es necesaria la cabecera windows.h.

Por todo lo demás el código se ve bien, yo le agregaría una pequeña función para visualizar todos los nodos cada vez que se agrega uno nuevo.

Saludos.


« Última modificación: 25 Junio 2011, 19:29 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Una pila en C
« Respuesta #2 en: 25 Junio 2011, 19:31 pm »

Gracias Leo te agradezco el comentario...Bueno en realidad tienes toda la razon,la pila esta compilada mayoritariamente por elementos de estructuras dinamicas en C++,pero es que las aprendi asi y me resultan mas faciles...¿Deberia cambiar el titulo del tema por una pila en C++?¿y cambiar el stdio.h por el iostream?.

Y sobre lo de windows.h ,es necesario para el exit(0)

Salu2 y gracias de nuevo.
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Una pila en C
« Respuesta #3 en: 25 Junio 2011, 19:34 pm »

No, mejor cambia esas pequeñas cosas por la asignación dinámica propia de C como te lo he puesto y listo, puedes decir que es 100 % C.

Código:
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> gcc code.c -o code -std=c89
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> gcc code.c -o code -std=c90
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─>

Otra cosa, exit(0) es propia de stdlib.h.

Un consejo, es mejor utilizar exit así:

Código
  1. exit(EXIT_SUCCESS);
ó
Código
  1. exit(EXIT_FAILURE);

http://www.cplusplus.com/reference/clibrary/cstdlib/exit/
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Dark Invader

Desconectado Desconectado

Mensajes: 111


Lucha hasta el final para conseguir tu objetivo.


Ver Perfil
Re: Una pila en C
« Respuesta #4 en: 25 Junio 2011, 19:40 pm »

No sabria que decirte Leo...Quiero ir acostumbrandome a C++ porque dentro de poco quiero dedicarme absolutamente a POO,no es que no quiera utilizar el codigo que me has puesto,sino que me gusta mas usar C++ asique quitare las cosas de C...

En cuanto a lo de exit,con windows.h me funciona perfecto,no sabria que decirte  :huh:
Pero a partir de ahora pondré lo que me has dicho sobre las constantes de exit.

Gracias por los consejos Leo  ::)

Cuídate
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La pila
Electrónica
Sardi 1 4,550 Último mensaje 6 Noviembre 2003, 04:22 am
por Meta
Pila en C++
Programación C/C++
Norochii 1 5,991 Último mensaje 25 Mayo 2011, 20:24 pm
por Acermax
Hay opcion pila de llamadas en Olly?
Ingeniería Inversa
x64core 3 3,337 Último mensaje 27 Marzo 2012, 10:12 am
por x64core
Problemas se me descontinua la PILA
Programación C/C++
x64core 0 1,592 Último mensaje 10 Junio 2012, 08:42 am
por x64core
Saber la carga de una pila
Electrónica
kikelillo 8 12,165 Último mensaje 23 Agosto 2012, 22:59 pm
por xiruko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines