conceptos de Punteros y Nodos

10

Click here to load reader

Transcript of conceptos de Punteros y Nodos

Page 1: conceptos de Punteros y Nodos

PUNTEROS

Los punteros son de amplia utilización en programación, muchos lenguajes permiten la

manipulación directa o indirecta de los mismos. La razón de ser principal de los punteros

reside en manejar datos alojados en la zona de memoria dinámica o heap (aunque también se

pueden manipular objetos en la zona estática), bien sean datos elementales, objetos

pertenecientes a una clase (en lenguajes Orientados a Objetos).

Un puntero o apuntador es una variable que referencia una región de memoria; en

otras palabras es una variable cuyo valor es una dirección de memoria. Si se tiene una

variable ' p ' de tipo puntero que contiene una dirección de memoria en la que se

encuentra almacenado un valor ' v ' se dice que ' p ' apunta a ' v '. El programador

utilizará punteros para guardar datos en memoria en muchas ocasiones, de la forma que

se describe a continuación.

[Memoria]

| . |

| . |

| . |

----- |---------|

| p |---->| v |

----- |---------|

| . |

| . |

| . |

Trabajar con punteros implica la no manipulación de los datos en sí, sino manejar las

direcciones de memoria en la cuales estos residen.

Page 2: conceptos de Punteros y Nodos

NODO

En programación concretamente en estructura 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, 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. Los nodos son herramientas esenciales para la

construcción de estructuras de datos dinámicas.

Page 3: conceptos de Punteros y Nodos

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 nodos

NodosLista(Object valor) // Se define un nodo

{

datos=valor;

siguiente=null;

}

Page 4: conceptos de Punteros y Nodos

Como la lista es una consecución de muchos nodos es necesario establecer nombre a los

nodos 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 para

insertar información en los campos del nodo, a manera de ejemplo se mostrará el proceso de

forma manual, pero la idea es parametrizar todos los métodos para la realización y

operaciones de la lista simple

Page 5: conceptos de Punteros y Nodos

Para acceder al nodo y escribir valores en sus campos es necesario identificar al Nodo, que en

este caso es P y colocar un punto para poder acceder a los campos del nodo, como se muestra

a continuación.

P.dato= 25;

P.siguiente = Null;

La representación grafica del Nodo queda de la siguiente forma:

Page 6: conceptos de Punteros y Nodos

CAMPO APUNTADOR DE UN NODO

P ESTE ES EL NODO COMPLETO

Esto quiere decir que un nodo debe tener alguna dirección de memoria asignada ¿Cuál? no

sabemos, pero se puede saber si se hace referencia a P, cuando se hace referencia a P, se

indica 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 Q

Cuando se coloca el nombre del nodo haciendo referencia a otro realmente se apunta al nodo

indicado

P= Q;

Nota: Este caso se realiza cuando se desea crear un nodo auxiliar que permita realizar el

recorrido de la lista, como se ha indicado en repetidas ocasiones no se debe perder la

referencia al el primero de la lista.

Page 7: conceptos de Punteros y Nodos

Se puede hacer referencia o apuntar un puntero con el campo siguiente

P.siguiente= Q;

P.siguiente = Null;

P.siguiente= P;

Page 8: conceptos de Punteros y Nodos

CAMBIO DE APUNTADOR EN LOS NODOS

En la siguiente figura Tenemos 2 nodos en la lista, como se había indicado el Nodo P indica el

Primero de la lista y el campo siguiente del nodo apunta al siguiente nodo, dicho nodo indica

el final de la lista.

Necesitamos otro nodo , dicho nodo se llamará Q

Si lo quisiéramos crear se recurre a la siguiente línea de código

Q =new NodosLista;

Ya sabemos que contiene los dos campos uno para la información y otro para el apuntador

En 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 P

Q.siguiente= P;

Page 9: conceptos de Punteros y Nodos

Si quisiéramos colocarlo después del primer elemento de la lista debemos indicarle al nodo

que apunte a la dirección que corresponde a ese nodo ¿Quién la Sabe?

Q.siguiente= P.siguiente;

Page 10: conceptos de Punteros y Nodos

RECORRIDO EN UNA LISTA

Como se indico anteriormente no se puede perder la referencia al primer

nodo, 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 nodo

P

P=Q;

Ser comienza el recorrido de la siguiente forma

Q= 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.