Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/01/2015, 15:45
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Duda nodos C/C++

Lo debes hacer todo con bucles. Te dejo un source que te muestra como hacer para ver y editar. El caso es el mismo para ambos, se trata de ir pasando uno por uno hasta que encuentres el que quieres y entonces haces con el lo que quieras. XD

Supongo que estas estudiando sobre listas, ya que las listas se usa con memoria dinámica mejor. XD

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. //Estructura nodo...
  6. typedef struct E1 {
  7.  
  8.     int dato;
  9.     struct E1 *next;
  10.    
  11. } ELEMENTO;
  12.  
  13. typedef ELEMENTO *Lista;
  14.  
  15. int main ( int argc, const char *argv[] ) {
  16.     int nNodos = 0; //numero de nodos. No hay nodos aun
  17.     Lista lista = NULL; //inicia apuntando a null. QUiere decir que lista esta vacia.
  18.    
  19.     ELEMENTO nodo1 = {10, NULL};
  20.     ELEMENTO nodo2 = {20, NULL};
  21.     ELEMENTO nodo3 = {30, NULL};
  22.     ELEMENTO nodo4 = {40, NULL};
  23.     ELEMENTO nodo5 = {50, NULL};
  24.    
  25.     //lista apunta al primer luego el 1 apunta al 2, el 2 al 3 y asi sucesivamente hasta el ultimo.
  26.     lista = &nodo1;
  27.     nodo1.next = &nodo2;
  28.     nodo2.next = &nodo3;
  29.     nodo3.next = &nodo4;
  30.     nodo4.next = &nodo5;
  31.     nodo5.next = NULL;   //El ultimo debe apuntar a null que indica que no hay mas nodos
  32.    
  33.     nNodos = 5; // Ahora tenemos 5 nodos ;). cada vez que añadimos un nodo incrementamos nNodos ya que sirve de limite para los bucles al hacer busquedas y modificaciones.
  34.    
  35.     Lista nodo = lista;
  36.    
  37.     //esto para mostrar todos los nodos que hay hasta el momento
  38.     do{
  39.         cout << nodo->dato << endl;  //mostramos dato
  40.         nodo = nodo->next;          //preparamos el seguiente nodo
  41.  
  42.     }while( nodo != NULL  );
  43.    
  44.     //ahora editaremos uno de los nodos, pero primero debemos encontrarlo. Eso se hace con bucles.
  45.     nodo = NULL;             //<-la reutilizamos este punterito ;)
  46.     int nodoaEditar = 3;    // Paso de pedir con couts y chorradas XD, lo pongo aqui mismo el nodo que quiero editarXD
  47.     int i = 1;             //Empezamos por el primer nodo
  48.    
  49.     nodo = lista;
  50.     //este bucle pasa por todos los nodos hasta encontrar el nodo numero 3 que es el que puse en 'nodoaEditar'. Cuando lo encuentre se interrumpe el bucle y el bucle que queremos se queda guardado en el puntero 'nodo'
  51.     while ( i < nNodos ){  // Aqui se hace evidente para que queremos nNodos XD
  52.         if ( i == nodoaEditar ) {
  53.             cout << "\n\nNodo encontrado!: " << nodo->dato << endl;
  54.             break;  // como ya tenemos el nodo que queremos saltamos afuera.
  55.         }
  56.         nodo = nodo->next; //si no es el 3º nodo paso al siguiente
  57.         i++;
  58.     }
  59.    
  60.     //en ese punto el puntero 'nodo' apunta al 3º nodo que quiremos editar. puedes hacer nodo->dato = 100; y estaras editando el 3º nodo ;)
  61.     cout << "Nodo que tenemos!: " << nodo->dato << endl;
  62.    
  63.     //si quieres editar otro nodo es solo cambiar la variable nodoaEditar. Pero cuide no salir de rango ya que solo tenemos 5 nodos en ese caso, no vayas a editar un supuesto 6º nodo que no existe XD
  64.     return 0;
  65. }

Puedes usar variables para saber cuantos nodos tienes, o cual quieres editar, lo que sea.
Siempre debes recorrer la lista hacia adelante ya que solo tienes un puntero que apunta hacia adelante, y no hacia atrás.
Tampoco tienes un indice que te diga en que posición está, así que todo esas cosas las debes ingeniar tú para poder usar listas XDD

Creo que los ejemplos que te pasé son con memoria dinámica y son muy avanzados. Ni yo se mucho de listas.
Suerte!