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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27
211  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 01:34 am
En realidad me acabo de dar cuenta que es suficiente un puntero que se ubique en el tope jejeje, gracias por la ayuda, y sobre C++ aun estoy en los comienzos
212  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:51 am
Logre acomodarlo de forma que ahora si cumple su cometido, aunque buscare maneras mas eficientes de trabajarlo, estas son las 2 funciones que modifique:

Código
  1. int borrarTope( Pila *miPila )
  2. {
  3.    Nodo *nodo;
  4.    int valor;
  5.  
  6.    if( miPila->ultimo == miPila->primero )
  7.    {
  8.        valor = miPila->ultimo->num;
  9.        free( miPila->ultimo );
  10.        miPila->primero = NULL;
  11.        miPila->ultimo = NULL;
  12.    }
  13.    else
  14.    {
  15.        nodo = miPila->primero;
  16.  
  17.        while( nodo->sig != miPila->ultimo )
  18.            nodo = nodo->sig;
  19.  
  20.        valor = miPila->ultimo->num;
  21.        free( miPila->ultimo );
  22.        miPila->ultimo = nodo;
  23.        miPila->ultimo->sig = NULL;
  24.    }
  25.  
  26.    return valor;
  27. }
  28.  
  29. void borrarTodo( Pila *miPila )
  30. {
  31.    while( miPila->primero != NULL )
  32.    {
  33.        Nodo *nodo;
  34.        nodo = miPila->primero;
  35.        miPila->primero = miPila->primero->sig;
  36.        free(nodo);
  37.    }
  38. }
  39.  

De todas maneras, gracias por haberte tomado la molestia  :)
213  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:46 am
Bueno, en realidad el puntero "ultimo" de mi pila lo uso para ir enlazando el ultimo nodo agregado hasta ese momento con el nuevo ultimo nodo. Y mi funcion resetPila solo lo uso para el comienzo, simplemente era un inicializador de pila (Sí, debi haberle colocado otro nombre, por la confusion).
214  Programación / Programación C/C++ / Re: Problema manejo de Pila en: 13 Febrero 2014, 00:13 am
Gracias por el link, me pondre a leerlo, es solo que segun lei, en una pila se extrae el ultimo valor ingresado, y la solucion que me colocaste es para eliminar un elemento de una cola.

EDIT: Es decir mi puntero de nodo lo corro mientras su elemento puntero "sig" sea distinto a la ultima posicion para liberar la ultima posicion y luego hacer esa ultima posicion igual al mi puntero nodo. Pero cuando trato de mostrar despues la pila resultante, me empieza a mostrar valores locos.
215  Programación / Programación C/C++ / Problema manejo de Pila en: 12 Febrero 2014, 23:47 pm
Hola que tal estoy teniendo algunos problemas para mostrar los valores de una pila una vez se ha borrado un valor, y posteriormente luego cuando voy a borrar los nodos restantes. Aqui va el codigo, espero una ayuda gracias:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct nodo
  5. {
  6.    int num;
  7.    struct nodo *sig;
  8. }Nodo;
  9.  
  10. typedef struct pila
  11. {
  12.    Nodo *primero;
  13.    Nodo *ultimo;
  14. }Pila;
  15.  
  16. void resetPila( Pila * );
  17. int estaVacia( Pila * );
  18. void agregarValor( Pila *, int );
  19. void mostrarPila( Pila * );
  20. int borrarTope( Pila * );
  21. void borrarTodo( Pila * );
  22.  
  23. int main( int argc, char* args[] )
  24. {
  25.    Pila miPila;
  26.    int valor, opcion;
  27.  
  28.    resetPila( &miPila );
  29.  
  30.    do
  31.    {
  32.        system("cls");
  33.        printf("Ingrese una opcion\n");
  34.        printf("\n1.- Ingresar numero a la pila");
  35.        printf("\n2.- Mostrar numeros en la pila");
  36.        printf("\n3.- Eliminar tope de la pila");
  37.        printf("\n4.- Salir\n\n");
  38.        scanf("%d", &opcion);
  39.  
  40.        switch( opcion )
  41.        {
  42.            case 1:
  43.                printf("Ingrese el numero para la pila: ");
  44.                scanf("%d", &valor);
  45.                agregarValor( &miPila, valor );
  46.                system("pause");
  47.            break;
  48.  
  49.            case 2:
  50.                if( estaVacia( &miPila ) == 1 )
  51.                    printf("\nLa pila esta vacia");
  52.                else
  53.                    mostrarPila( &miPila );
  54.                system("pause");
  55.            break;
  56.  
  57.            case 3:
  58.                if( estaVacia( &miPila ) == 1 )
  59.                    printf("\nLa pila esta vacia");
  60.                else
  61.                    printf("Se elimino el numero %d\n\n", borrarTope( &miPila ));
  62.                system("pause");
  63.            break;
  64.  
  65.            case 4:
  66.                if( estaVacia( &miPila ) == 0 )
  67.                    borrarTodo( &miPila );
  68.            break;
  69.        }
  70.  
  71.    }while( opcion != 4 );
  72.  
  73.  
  74. return 0;
  75. }
  76.  
  77. void resetPila( Pila *miPila )
  78. {
  79.    miPila->primero = NULL;
  80.    miPila->ultimo = NULL;
  81. }
  82.  
  83. int estaVacia( Pila *miPila )
  84. {
  85.    if( miPila->primero == NULL )
  86.        return 1;
  87.    else
  88.        return 0;
  89. }
  90.  
  91. void agregarValor( Pila *miPila, int valor )
  92. {
  93.    Nodo *nodo;
  94.  
  95.    nodo = (Nodo *)malloc(sizeof(Nodo));
  96.    nodo->num = valor;
  97.    nodo->sig = NULL;
  98.  
  99.    if( estaVacia( miPila ) == 1 )
  100.        miPila->primero = nodo;
  101.    else
  102.        miPila->ultimo->sig = nodo;
  103.    miPila->ultimo = nodo;
  104.  
  105. }
  106.  
  107. void mostrarPila( Pila *miPila )
  108. {
  109.    Nodo *nodo;
  110.  
  111.    for( nodo = miPila->primero; nodo != NULL; nodo = nodo->sig )
  112.        printf("%d\n", nodo->num);
  113. }
  114.  
  115. int borrarTope( Pila *miPila )
  116. {
  117.    Nodo *nodo;
  118.    int valor;
  119.  
  120.    if( miPila->ultimo == miPila->primero )
  121.    {
  122.        valor = miPila->ultimo->num;
  123.        free( miPila->ultimo );
  124.    }
  125.    else
  126.    {
  127.        nodo = miPila->primero;
  128.  
  129.        while( nodo->sig != miPila->ultimo )
  130.            nodo = nodo->sig;
  131.  
  132.        valor = miPila->ultimo->num;
  133.        free( miPila->ultimo );
  134.        miPila->ultimo = nodo;
  135.    }
  136.  
  137.    return valor;
  138. }
  139.  
  140. void borrarTodo( Pila *miPila )
  141. {
  142.    Nodo *nodo;
  143.  
  144.    nodo = miPila->primero->sig;
  145.  
  146.    while( miPila->ultimo != NULL )
  147.    {
  148.        free( miPila->primero );
  149.        miPila->primero = nodo;
  150.        if( nodo != miPila->ultimo )
  151.            nodo = nodo->sig;
  152.    }
  153. }
  154.  
  155.  
216  Programación / Programación C/C++ / Re: Buenas prácticas con C++ en: 11 Febrero 2014, 20:21 pm
Gracias por la informacion  :)
217  Programación / Programación C/C++ / Re: malloc dentro de una funcion en: 18 Diciembre 2013, 19:05 pm
Gracias amigo, es en C el problema, no incluí el tipo de lenguaje, por como la sección del foro es C/C++ pense que se sobrentendia
218  Programación / Programación C/C++ / malloc dentro de una funcion en: 18 Diciembre 2013, 18:19 pm
Voy directo al codigo:

Código
  1. void generar( int **arreglo, int fil, int col )
  2. {
  3.    int i;
  4.  
  5.    arreglo = (int **)malloc(fil*sizeof(int *));
  6.  
  7.    for( i = 0; i < fil; i++ )
  8.        arreglo[i] = (int *)malloc(col * sizeof(int));
  9.  
  10. }
  11.  

Ok, luego de haber generado mi arreglo multidimensional y lo quiero mostrar con un ciclo dentro del main, los valores no se muestran sino que sale un error de windows, en cambio si muestro los valores dentro de la misma funcion, si lo hace. Imagino que se deben crear variables temporales solamente dentro de la funcion y por eso no se muestran en el main, y quisiera saber si existe una manera de poder reservar esa memoria y mostrarla en main.

Gracias
219  Programación / Programación C/C++ / Re: Tiempo de ejecución en: 28 Noviembre 2013, 04:27 am
No se por qué, pero cuando veo que las letras se van haciendo mas pequeñas me causa mucha gracia  :D
220  Programación / Programación C/C++ / Re: Libros para aprender SDL en español en: 22 Noviembre 2013, 01:17 am
Espero le puedan sacar el mayor provecho, aunque como dijo vangodp, es para la versión 1.2 , aun asi es bastante útil, ya que no he encontrado para la ultima versión de SDL en español.

Saludos
Páginas: 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines