04 febrero, 2015

Nodos



En programación concretamente en estructura de datos, un nodo es uno de los elementos deuna lista enlazada, de un árbol o de un grafo. Cada nodo será una estructura o registro quedispondrá de varios campos, y al menos uno de esos campos será un puntero o referencia aotro nodo, de forma que, conocido un nodo, a partir de esa referencia, será posible en teoríatener acceso a otros nodos de la estructura. Los nodos son herramientas esenciales para laconstrucción de estructuras de datos dinámicas.

3. DEFINICION DE CLASE CONFORMANDO NODO


class NodosLista // se define la clase Nodo{ Object datos; // Campo Información NodosLista siguiente; //Campo Nodo // datos: que almacena la información // siguiente : Apuntador o enlace a otros nodosNodosLista(Object valor) // Se define un nodo{ datos=valor; siguiente=null;}

4. Como la lista es una consecución de muchos nodos es necesario establecer nombre a losnodos y colocarlos a apuntar a algún sitio, en el caso del único nodo debe apuntar a NULL.En este caso se crea un nodo llamado P, indicando que es el primero de la lista.P =new NodosLista;Nota:Ojo en este caso no se están utilizando parámetros para la creación del nodo ni parainsertar información en los campos del nodo, a manera de ejemplo se mostrará el proceso deforma manual, pero la idea es parametrizar todos los métodos para la realización yoperaciones de la lista simple

5. Para acceder al nodo y escribir valores en sus campos es necesario identificar al Nodo, que eneste caso es P y colocar un punto para poder acceder a los campos del nodo, como se muestraa continuación.P.dato= 25;P.siguiente = Null;La representación grafica del Nodo queda de la siguiente forma:

6. CAMPO APUNTADOR DE UN NODOP ESTE ES EL NODO COMPLETOEsto quiere decir que un nodo debe tener alguna dirección de memoria asignada ¿Cuál? nosabemos, pero se puede saber si se hace referencia a P, cuando se hace referencia a P, seindica todo el nodo tanto el campo info como el campo apuntador.Si se define un nodo, el nodo creado contiene el campo información y el campo siguiente Nodo P y Nodo QCuando se coloca el nombre del nodo haciendo referencia a otro realmente se apunta al nodoindicado P= Q;Nota: Este caso se realiza cuando se desea crear un nodo auxiliar que permita realizar elrecorrido de la lista, como se ha indicado en repetidas ocasiones no se debe perder lareferencia al el primero de la lista.

7. Se puede hacer referencia o apuntar un puntero con el campo siguiente P.siguiente= Q; P.siguiente = Null; P.siguiente= P;

8. CAMBIO DE APUNTADOR EN LOS NODOSEn la siguiente figura Tenemos 2 nodos en la lista, como se había indicado el Nodo P indica elPrimero de la lista y el campo siguiente del nodo apunta al siguiente nodo, dicho nodo indicael final de la lista.Necesitamos otro nodo , dicho nodo se llamará QSi lo quisiéramos crear se recurre a la siguiente línea de códigoQ =new NodosLista;Ya sabemos que contiene los dos campos uno para la información y otro para el apuntadorEn este momento el nodo no contiene ni dirección ni información.Si quisiéramos colocarlo al inicio de la lista debemos indicarle al nodo que apunte a PQ.siguiente= P;

9. Si quisiéramos colocarlo después del primer elemento de la lista debemos indicarle al nodoque apunte a la dirección que corresponde a ese nodo ¿Quién la Sabe? Q.siguiente= P.siguiente;

10. RECORRIDO EN UNA LISTAComo se indico anteriormente no se puede perder la referencia al primernodo, por lo cual se crea un nodo auxiliar llamado Q para recorrer la lista.Q =new NodosLista;Luego el nodo Q se le asigna la misma dirección que corresponde al nodoPP=Q;Ser comienza el recorrido de la siguiente formaQ= Q.siguiente; a) Se apunta a P. b) Q en estos momentos encabeza la lista. c) Q= Q.siguiente notese que el campo siguiente de Q apunta al siguiente nodo d) Cada vez que se realiza esta instrucción estamos cambiando de posición en la lista, nos vamos desplazando hacia delante de ella, cumpliendo con la filosofía de la estructura los recorridos se hacen hacia adelante.


Listas enlazadas
Una lista enlazada es una serie de nodos, conectados entre sí a través de una referencia, en donde se almacena la información de los elementos de la lista. Por lo tanto, los nodos de una lista enlazada se componen de dos partes principales:
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/nodo.gif
class NodoLista
{
  Object elemento;
  NodoLista siguiente;
}
La referencia contenida en el nodo de una lista se denomina siguiente, pues indica en dónde se encuentra el siguiente elemento de la lista. El último elemento de la lista no tiene nodo siguiente, por lo que se dice que la referencia siguiente del último elemento es null (nula).
La siguiente figura muestra un ejemplo de una lista enlazada cuyos elementos son strings:
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/lista.gif
La referencia lista indica la posición del primer elemento de la lista y permite acceder a todos los elementos de ésta: basta con seguir las referencias al nodo siguiente para recorrer la lista.
NodoLista aux=lista;
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/recorrido1.gif
aux=aux.siguiente;
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/recorrido2.gif
Siguiendo con el ejemplo anterior, para insertar un nuevo nodo justo delante del nodo referenciado por auxse deben modificar las referencias siguiente del nodo aux y del nodo a insertar.
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/insercionLista.gif
NodoLista nuevo=new NodoLista(...);
//"nuevo" es la referencia del nodo a insertar en la lista
nuevo.siguiente=aux.siguiente;
aux.siguiente=nuevo;
//Notese que no es lo mismo realizar los cambios de referencia
//en un orden distinto al presentado, puesto que en ese caso
//se "pierde" la lista desde el nodo siguiente a aux
El procedimiento presentado a continuación es un ejemplo de cómo se programa el recorrido de una lista enlazada. Se supondrá que los objetos almacenados en cada nodo son strings:
void recorrido(NodoLista lista)
{
  NodoLista aux=lista;
  while (aux!=null)
  {
    System.out.println(aux.elemento);
    aux=aux.siguiente;
  }
}
Para invertir el orden de la lista, es decir, que el último elemento de la lista ahora sea el primero, que el penúltimo elemento de la lista ahora sea el segundo, etc..., modificando sólo las referencias y no el contenido de los nodos, es necesario realizar una sola pasada por la lista, y en cada nodo visitado se modifica la referencia siguiente para que apunte al nodo anterior. Es necesario mantener referencias auxiliares para acordarse en donde se encuentra el nodo anterior y el resto de la lista que aún no ha sido modificada:
void invertir(NodoLista lista)
{
  NodoLista siguiente=lista;
  NodoLista anterior=null;
  while(lista!=null)
  {
    siguiente=lista.siguiente;
    lista.siguiente=anterior;
    anterior=lista;
    lista=siguiente;
  }
}
La implementación vista de los nodos también se conoce como lista de enlace simple, dado que sólo contiene una referencia al nodo siguiente y por lo tanto sólo puede recorrerse en un solo sentido. En unalista de doble enlace se agrega una segunda referencia al nodo previo, lo que permite recorrer la lista en ambos sentidos, y en general se implementa con una referencia al primer elemento y otra referencia al último elemento.
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/listaDobleEnlace.gif
Una lista circular es aquella en donde la referencia siguiente del último nodo en vez de ser null apunta al primer nodo de la lista. El concepto se aplica tanto a listas de enlace simple como doblemente enlazadas.
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/listaCircular.gif
En muchas aplicaciones que utilizan listas enlazadas es útil contar con un nodo cabecera, tambien conocido como dummy o header, que es un nodo "falso", ya que no contiene información relevante, y su referencia siguiente apunta al primer elemento de la lista. Al utilizar un nodo cabecera siempre es posible definir un nodo previo a cualquier nodo de la lista, definiendo que el previo al primer elemento es la cabecera.
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/cabecera.gif
Si se utiliza un nodo cabecera en una lista de doble enlace ya no es necesario contar con las referenciasprimero y último, puesto que el nodo cabecera tiene ambas referencias: su referencia siguiente es el primer elemento de la lista, y su referencia anterior es el último elemento de la lista. De esta forma la lista de doble enlace queda circular de una manera natural.
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/dobleEnlaceCircular.gif


18 comentarios:

  1. los nodos son como una estructura que puede contener un conjunto de informacion.

    ResponderBorrar
  2. Se dice que 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, y 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, será posible en teoría tener acceso a otros nodos de la estructura.
    Nota: Los nodos son herramientas esenciales para uno de los procesadores que lo componen.

    ResponderBorrar
  3. Los nodos son herramientas esenciales para la construcción de estructuras de datos dinámicas!

    ResponderBorrar
  4. los nodo es una estructura de datos, y es uno de los elementos de una lista enlazada, de un rabol o un grafo, cada nodo será una estructura o registro que dispondrá de varios campos y serán referencia a otro nodo. Nota: un nodo es la unidad sobre la que se construy el árbol y puede tener uno o más nodos hijos conectados a él.

    ResponderBorrar
  5. activooo... Nodo: es un elemento formado por dos partes, la parte izquierda es la información en donde se quedan todo los datos y la derecha es la dirección de la memoria del próximo elemento es decir del nodo siguiente... Fin!

    ResponderBorrar
  6. Estefany De La Torre19 febrero, 2015

    Las listas enlazadas se consideran una forma de registro útil ya que cada nodo almacena satisfactoriamente y de forma ordenada los datos que sean introducidos a la lista. Por otra parte considero importante mencionar que el acceso a una lista se da a través de la referencia del primer elemento de la misma, pero a los nodos subsiguientes se accesan por medio de un campo de enlace, este es único para cada nodo, por lo que, para el último elemento tiene un valor nulo que marca el final de la lista enlazada, a diferencia de esta las listas circulares no tienen elementos nulos, ya que el ultimo nodo se enlaza con el primero y continua el recorrido.

    ResponderBorrar
  7. Los nodos guardan en una parte de la estructura la información que justamente requiere guardar nuestra aplicación o programa, en la otra parte tenemos un puntero que guarda la dirección de otro nodo. Debido a que un nodo posee un puntero que permite almacenar una dirección de otro nodo, podemos valernos de él para enlazar múltiples nodos entre sí y hacer nuestras estructuras más complejas y alocarlas en memoria dinámica.

    ResponderBorrar
  8. Las Listas Enlazadas fueron un gran aporte a las estructuras de datos. Su comprensión es básica, ya que se usan para el estudio de algoritmos tan esenciales como la búsqueda o la ordenación, así como la mayoría relacionados con la recursión. También son las estructuras más usadas para crear pilas que posibilitan la comunicación entre procesos.
    A medida que sigas programando, te darás cuenta que los lenguajes de programación evolucionan gracias a la experiencia aportada por los programadores que los han ido usando. Las listas de python son de hecho listas enlazadas, pero está oculta toda la complejidad para que resulten más sencillas de usar. Las puedes reordenar, invertir y trocear sin preocuparte de qué algoritmo se vaya a usar, lo que resulta comodísimo. Por contra, hay ocasiones en las que son inadecuadas o se usan mal. Conociendo su funcionamiento interno te facilitará la búsqueda de otras estructuras similares en la librería estándar que puedan funcionar mejor para tu problema.

    ResponderBorrar
  9. Una lista circular es una lista en la cual el último nodo es enlazado al primer elemento de la lista, la ventaja de este tipo de estructura es que siempre se puede llegar a cualquier nodo siguiendo los enlaces, la desventaja es que si no se tiene cuidado una búsqueda puede resultar en un bucle infinito. Esto se puede evitar al determinar a un nodo como nodo-cabeza o nodo inicial.

    ResponderBorrar
  10. Nodo es un elemento formado por dos partes, la parte izquierda es la información y en donde se quedan los datos y la derecha es el la dirección de la memoria del próximo elemento del nodo siguiente.

    ResponderBorrar
  11. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  12. no olvidemos que también se encuentra los nodos centinelas:...

    A veces las listas enlazadas tienen un nodo centinela (también llamado falso nodo o nodo ficticio) al principio o al final de la lista, el cual no es usado para guardar datos. Su propósito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos) siempre tenga un “primer y último” nodo.

    ResponderBorrar
  13. Es una estructura de datos LINEAL con un número limitado de elementos homogéneos que se llaman nodos. Se puede acceder a estos a través de su dirección, se pueden insertar y suprimir en cualquier posición

    Por convención el último nodo se marca con NIL (nulo)

    ResponderBorrar
  14. 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, y uno de estos será el punto de referencia de otro nodo. Es decir la base para otros nodos.

    ResponderBorrar
  15. Haciendo referencia al contenido del blog un node seria como punto de intersección o unión de varios elementos que confluyen en el mismo lugar, como lo mencionado en el tema de colas, Un Nodo es el elemento que se agrega a la cola...Un ejemplo claro sera una sala telematica..Tenemos un conjunto de ordenadores enlazados por Una red...Si Utililazamos la logica se entiende este ejemplo facilmente, cada ordenador seria un nodo y la red sera una cola.

    En Conclusion los nodos son herramientas esenciales en la programacion y va en conjunto con los temas antes mencionados como Colas y listas.

    ResponderBorrar
  16. Se le llama nodo en la ciencia y otras disciplinas al punto real o abstracto en donde se reúnen las distintas partes de una conexión para comunicarse entre sí.
    Por ejemplo, en tecnología, un nodo es el punto, momento o espacio en donde todos los elementos de una red que comparten las mismas características se vinculan e interactúan. Estos elementos son a su vez nodos y pueden relacionarse de manera jerárquica o en una red horizontal o de otro tipo.
    Este tipo de casos se ve en la informática y, más específicamente, en redes de Internet. En este ejemplo cada ordenador y cada servidor constituyen un nodo.
    Lo mismo ocurre en electrónica, de circuito

    ResponderBorrar
  17. Se le llama nodo en la ciencia y otras disciplinas al punto real o abstracto en donde se reúnen las distintas partes de una conexión para comunicarse entre sí.
    Por ejemplo, en tecnología, un nodo es el punto, momento o espacio en donde todos los elementos de una red que comparten las mismas características se vinculan e interactúan. Estos elementos son a su vez nodos y pueden relacionarse de manera jerárquica o en una red horizontal o de otro tipo.
    Este tipo de casos se ve en la informática y, más específicamente, en redes de Internet. En este ejemplo cada ordenador y cada servidor constituyen un nodo.
    Lo mismo ocurre en electrónica, de circuito

    ResponderBorrar