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

problemas con nodos

Estas en el tema de problemas con nodos en el foro de C/C++ en Foros del Web. Hola! alguien me puede decir para que sirven los nodos??? y como se utilizan gracias por adelantado...
  #1 (permalink)  
Antiguo 02/02/2010, 10:41
 
Fecha de Ingreso: enero-2009
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 0
problemas con nodos

Hola!
alguien me puede decir para que sirven los nodos??? y como se utilizan
gracias por adelantado
  #2 (permalink)  
Antiguo 02/02/2010, 11:01
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: problemas con nodos

Creo que te refieres al nodo de una lista.

un nodo podemos definirlo como el elemento que forma parte de una lista enlazada, se usan ya sea para listas simples, dobles, circulares o una pilas, con ellos puedes realizar diversas operaciones, como crear, eliminar, modificar, presentarlos, moverlos, etc...


Un ejemplo sencillo de una lista simplemente enlazada:

Código C++:
Ver original
  1. #include<iostream.h>
  2. #include<conio.h>
  3.  
  4. struct lista
  5. {
  6.   int dato;
  7.   struct lista *sig;
  8. };
  9.  
  10. lista *cab=NULL,*nuevo=NULL,*fin=NULL;
  11. int c=0;
  12.  
  13. void ingreso()
  14. {
  15.   nuevo=new lista;
  16.  
  17.   cout << "NUMERO: "; cin >> nuevo->dato;
  18.   if(cab==NULL)
  19.   {
  20.     nuevo->sig=NULL;
  21.     cab=nuevo;
  22.     fin=nuevo;
  23.   }
  24.   else
  25.   {
  26.     nuevo->sig=NULL;
  27.     fin->sig=nuevo;
  28.     fin=nuevo;
  29.   }
  30.   c++;
  31. }
  32.  
  33. void ordenar()
  34. {
  35.   lista *aux,*aux1;
  36.   int temp;
  37.  
  38.   if(cab!=NULL)
  39.   {
  40.     aux=cab;
  41.     do
  42.     {
  43.       aux1=aux;
  44.       do
  45.       {
  46.     if(aux->dato<aux1->dato)
  47.     {
  48.       temp=aux->dato;
  49.       aux->dato=aux1->dato;
  50.       aux1->dato=temp;
  51.     }
  52.     aux1=aux1->sig;
  53.       }while(aux1!=NULL);
  54.       aux=aux->sig;
  55.     }while(aux!=NULL);
  56.   }
  57.   else
  58.    cout << "LISTA VACIA";
  59.   getch();
  60. }
  61.  
  62. void imprimir()
  63. {
  64.   lista *aux;
  65.  
  66.   if(cab!=NULL)
  67.   {
  68.     aux=cab;
  69.     while(aux!=NULL)
  70.     {
  71.       cout << aux->dato << endl;
  72.       aux=aux->sig;
  73.     }
  74.   }
  75.   else
  76.    cout << "LISTA VACIA";
  77.   getch();
  78. }
  79.  
  80. void eliminar()
  81. {
  82.   lista *an,*si;
  83.   int dat;
  84.  
  85.   if(cab!=NULL)
  86.   {
  87.     cout << "DATO A ELIMINAR: "; cin >> dat;
  88.     an=cab;
  89.     if(an->dato==dat)
  90.     {
  91.       cab=cab->sig;
  92.       delete an;
  93.     }
  94.     else
  95.     {
  96.       do
  97.       {
  98.     si=an->sig;
  99.     if(si->dato==dat)
  100.     {
  101.       an->sig=si->sig;
  102.       delete si;
  103.       break;
  104.     }
  105.     an=an->sig;
  106.       }while(si!=NULL);
  107.     }
  108.   }
  109.   else
  110.    cout << "LISTA VACIA";
  111.   getch();
  112. }
  113.  
  114. void insertar()
  115. {
  116.   lista *an,*si;
  117.   int p,co=1;
  118.  
  119.   cout << "POSICION : "; cin >> p;
  120.   nuevo=new lista;
  121.   cout << "DATO: "; cin >> nuevo->dato;
  122.   if(p<c)
  123.   {
  124.     an=cab;
  125.     if(p==1)
  126.     {
  127.       nuevo->sig=cab;
  128.       cab=nuevo;
  129.     }
  130.     else
  131.     {
  132.       si=an;
  133.       do
  134.       {
  135.     an=si;
  136.     si=si->sig;
  137.     co++;
  138.       }while(co<p);
  139.       nuevo->sig=si;
  140.       an->sig=nuevo;
  141.     }
  142.   }
  143.   else
  144.   {
  145.     nuevo->sig=NULL;
  146.     fin->sig=nuevo;
  147.     fin=nuevo;
  148.   }
  149. }
  150.  
  151. void main()
  152. {
  153.   char key;
  154.  
  155.   do
  156.   {
  157.     clrscr();
  158.     cout << "\n\t\t\t-= MENU PRINCIPAL =- ";
  159.     cout << "\n\n\t\t\t[1] INGRESAR";
  160.     cout << "\n\t\t\t[2] ORDENAR";
  161.     cout << "\n\t\t\t[3] IMPRIMIR";
  162.     cout << "\n\t\t\t[4] ELIMINAR";
  163.     cout << "\n\t\t\t[5] INSERTAR";
  164.     cout << "\n\t\t\t[6] SALIR";
  165.     key=getche();
  166.     clrscr();
  167.     switch(key)
  168.     {
  169.       case '1': ingreso(); break;
  170.       case '2': ordenar(); break;
  171.       case '3': imprimir(); break;
  172.       case '4': eliminar(); break;
  173.       case '5': insertar(); break;
  174.     }
  175.   }while(key!='6');
  176. }
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 03/02/2010, 04:40
 
Fecha de Ingreso: enero-2009
Mensajes: 29
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: problemas con nodos

gracias por tu ayuda
  #4 (permalink)  
Antiguo 05/02/2010, 20:04
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 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

Etiquetas: nodos
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 16:10.