Contextualización y aproximación al objeto de estudio de investigación cualit...
conceptos de Punteros y Nodos
1. 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.
2. 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.
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 nodos
NodosLista(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 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
5. 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:
6. 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.
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 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;
9. 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;
10. 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.