Escolar Documentos
Profissional Documentos
Cultura Documentos
Punteros
Las estructuras de datos estudiadas hasta ahora se almacenan estticamente en la memoria fsica del computador. Esta rigidez en las estructuras de datos estticas hace que no pueden crecer o menguar durante la ejecucin de un programa. Por otra parte, la representacin de ciertas construcciones (como las listas) usando las estructuras conocidas (concretamente los arrays) tiene que hacerse situando elementos consecutivos en componentes contiguas, de manera que las operaciones de insercin de un elemento nuevo o desaparicin de uno ya existente requieren el desplazamiento de todos los posteriores para cubrir el vaco producido, o para abrir espacio para el nuevo.
Al usar punteros conviene tener muy claro que la variable puntero y la variable a la que apunta son dos variables distintas y, por lo tanto, sus valores son tambin distintos.
La creacin y destruccin de variables dinmicas se realiza por medio de los procedimientos predefinidos New y Dispose.
tiene un efecto doble: 1. Reserva la memoria para un dato del tipo apropiado (en este caso del tipo char). 2. Coloca la direccin de esta nueva variable en el puntero. Obsrvese que la operacin de generacin New ha generado el dato apuntado por apCar, pero ste contiene por el momento una informacin desconocida.
realiza las dos siguientes acciones 1. Libera la memoria asociada a la variable referida apCar^ (dejandola disponible para otros fines). 2. Deja indefinido el valor del puntero..
Operaciones bsicas con punteros Slo las operaciones de comparacin (con la igualdad) y asignacin estn permitidas entre punteros.
Observese que las instrucciones apNum1:= apNum2 y apNum1^:= apNum2^ tienen distinto efecto.
El valor nil
Un modo alternativo para dar valor a un puntero es, simplemente, diciendo que no apunta a ningn dato. Esto se puede conseguir utilizando la constante predefinida nil.
Las representaciones para listas (con punteros) nos permitirn insertar y borrar elementos ms fcil y eficientemente que en una implementacin esttica (para listas acotadas) usando el tipo de datos array.
Definicin de Tipo de Lista Una lista es una coleccin lineal de elementos que se llaman nodos. El trmino coleccin lineal debe entenderse de la siguiente manera: tenemos un primer y un ltimo nodo, de tal manera que a cada nodo, salvo el ltimo, le corresponde un nico sucesor, y a cada nodo, salvo el primero, le corresponde un nico predecesor. Esencialmente, una lista ser representada como un puntero que seala al principio (o cabeza) de la lista.
Insercin de elementos
Supngase que nuestra lista est iniciada con el valor nil. Para introducir un elemento nuevoDato en ella, habr que completar la siguiente secuencia de pasos: 1. En primer lugar, habr que generar una variable del tipo tNodo, que ha de contener el nuevo eslabn: esto se hace mediante la sentencia New(lista). 2. Posteriormente, se asigna nuevoDato al campo contenido del nodo recin generado. La forma de esta asignacin depender del tipo de datos de la variable nuevoDato. 3. Y por ltimo, hay que anular (con el valor nill el campo siguiente del nodo para indicar que es el ltimo de la lista.
Para insertar un nuevoDato al principio de una lista no vaca, lista, se ha de proceder como se indica : 1. Una variable auxiliar listaAux se usa para apuntar al principio de la lista con el fin de no perderla. listaAux:= lista 2. Despus se asigna memoria a una variable del tipo tNodo (que ha de contener el nuevo elemento): esto se hace mediante la sentencia New(lista). 3. Posteriormente, se asigna nuevoDato al campo contenido del nuevo nodo:
lista^.contenido:= nuevoDato
4. Y, por ltimo, se asigna la listaAux al campo siguiente del nuevo nodo para indicar los dems elementos de la lista, es decir: lista^.siguiente:= listaAux
Para empezar, se desarrolla un procedimiento para aadir un elemento al principio de una lista, atendiendo al diseo descrito por los pasos anteriores:
Obsrvese que este procedimiento sirve tanto para cuando lista es vaca como para cuando no lo es.
Eliminacin de elementos
El procedimiento EliminarK
Localizar el nodo (k-1)-simo de lista Asociar el puntero siguiente del nodo (k-1)-simo al nodo (k+1)-imo
El procedimiento InsertarK
Otro procedimiento importante es el de insercin de un elemento tras cierta posicin de la lista. En particular, a continuacin se implementar la insercin de un nuevo nodo justo despus del k-simo nodo de una lista (de longitud mayor que k). Puesto que la insercin de un nuevo nodo al comienzo de una lista ya se ha presentado, nos restringiremos al caso k 1.
Localizar el nodo k-simo de lista Crear un nuevoNodo y asignarle el contenido nuevoDato Asociar el puntero siguiente del nodo k-simo a nuevoNodo Asociar el puntero siguiente de nuevoNodo al nodo (k+1)-simo
El procedimiento InsertarK
Pilas
Una pila es un tipo de lista en el que todas las inserciones y eliminaciones de elementos se realizan por el mismo extremo de la lista. El nombre de pila procede de la similitud en el manejo de esta estructura de datos y la de una pila de objetos". Estas estructura tambin son llamadas listas LIFO,1 acrnimo que refleja la caracterstica ms importante de las pilas.
Colas
Una cola es una lista en la que todas las inserciones se realizan por un extremo y todas las eliminaciones se realizan por el otro extremo de la lista. El ejemplo ms importante de esta estructura de datos, del cual recibe el nombre, es el de una cola de personas ante una ventanilla. En esta situacin, el primero en llegar es el primero en ser servido; por esto, las colas tambin se llaman listas FIFO.
Aadir un elemento