Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/02/2010, 20:04
devshared
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: problemas con nodos

Muy cierto lo que dice fradve, para agregar un poco mas simplemente cito lo que dice en la Wikipedia respecto a los nodos, hablando de estructuras de datos.

"En Programación, concretamente en estructuras de datos un nodo es uno de los elementos de una lista enlazada, de un árbol o de un grafo. Cada nodo será una estructura o registro que dispondrá de varios campos, al menos uno de esos campos será un puntero o referencia a otro nodo, de forma que conocido un nodo, a partir de esa referencia, debe poder accederse a otros nodos de la estructura. Los nodos son herramientas esenciales para la construcción de estructuras de datos dinámicas."

El siguiente código muestra el uso de los nodos en estructuras autoreferenciadas (fue un ejercicio en uno de los examenes de la facultad =D).

Código C:
Ver original
  1. // Autor: Jorge Ramírez
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. struct nodo{
  5.        int elemento;
  6.        struct nodo *sgte;
  7. };
  8. typedef struct nodo nodos;
  9. typedef nodos *NODO;
  10.  
  11. //---------------------------------prototipos-----------------------------------
  12. void insertar(NODO *, int );
  13. NODO buscalista(NODO , int );
  14. void imprimirlista(NODO *);
  15. //------------------------------------------------------------------------------
  16.  
  17. int main(void){
  18.     //-----------------------------declaraciones--------------------------------
  19.     NODO inicio = NULL, ptrbuscar;
  20.     int elemento, elemento_buscar, buscado;
  21.     //--------------------------------------------------------------------------
  22.     printf("\n\nIngrese elemento(entero) -1 para salir: ");
  23.     scanf("%d", &elemento);
  24.     while(elemento != -1){
  25.         insertar(&inicio, elemento);
  26.         printf("\n\nIngrese elemento(entero) -1 para salir: ");
  27.         scanf("%d", &elemento);
  28.     }
  29.     imprimirlista(&inicio);
  30.    
  31.     printf("\n\nIngrese elemento a buscar: ");
  32.     scanf("%d", &elemento_buscar);
  33.     ptrbuscar = buscalista(inicio, elemento_buscar);
  34.     if(ptrbuscar)
  35.        printf("\nValor encontrado es: %d",  ptrbuscar->elemento);
  36.     else
  37.        printf("\n\nEl elemento no existe.");
  38.        
  39.    
  40.     printf("\n\n");
  41.     system("PAUSE");
  42. }
  43.  
  44. void insertar(NODO *ptrini, int elemento){
  45.     //-----------------------------declaraciones--------------------------------
  46.     NODO nuevo, actual, anterior;
  47.    
  48.     //--------------------------------------------------------------------------  
  49.    
  50.     nuevo = (NODO)malloc(sizeof(nodos));
  51.     nuevo->sgte = NULL;
  52.     nuevo->elemento = elemento;
  53.     anterior = NULL;
  54.     actual = *ptrini;
  55.     while(actual != NULL && actual->elemento < elemento){
  56.        anterior = actual;
  57.        actual = actual->sgte;
  58.     }
  59.     if(anterior != NULL){  //si no es el primero
  60.         nuevo->sgte = anterior->sgte;
  61.         anterior->sgte = nuevo;
  62.     }
  63.     if(anterior == NULL){ // si es el nuevo primer elemento, o el primero.
  64.           nuevo->sgte = *ptrini;
  65.         *ptrini = nuevo;
  66.     }
  67.      
  68.    
  69. }  
  70.  
  71. void imprimirlista(NODO *ptrini){
  72.      //-----------------------------declaraciones--------------------------------
  73.     NODO actual;
  74.     //--------------------------------------------------------------------------  
  75.     actual = *ptrini;
  76.     printf("\n\n");
  77.     while(actual != NULL){
  78.        printf("%d->", actual->elemento);
  79.        actual = actual->sgte;
  80.        
  81.     }
  82.     printf("NULL");
  83. }
  84.          
  85.  
  86. NODO   buscalista(NODO ptrini, int buscado){
  87.       NODO actual  = ptrini, busc;
  88.      
  89.       if(actual->elemento == buscado){
  90.           return actual;
  91.       }else{
  92.          if(actual->sgte != NULL){    
  93.                actual  = actual->sgte;
  94.                busc = buscalista(actual, buscado);
  95.                return busc;
  96.          }else
  97.             return NULL;
  98.       }
  99. }

Saludos visiten http://www.devshared.net

Última edición por devshared; 05/02/2010 a las 20:44