Você está na página 1de 41

Estructura de Datos

Estructura de Datos.
El estudio de las Estructuras de Datos es sumamente importante, debido a la necesidad de manipular la informacin de manera adecuada y oportuna. El objetivo principal es el de procurar que los algoritmos aplicados funcionen en un adecuado tiempo de ejecucin. Es por ello de la importancia de aprender acerca de las Estructuras de Datos, y de cmo manipular la informacin a travs de ordenamientos, bsquedas, organizacin, mtodos de acceso, etc.

Procedimientos
Los procedimientos y funciones fueron uno de los primeros mecanismos de abstraccin que se utilizaron ampliamente en lenguajes de programacin. Los procedimientos permitan tareas que se ejecutaban rpidamente, o eran ejecutados slo con ligeras variaciones, que se reunan en una entidad y se reutilizaban, en lugar de duplicar el cdigo varias veces

Mdulos
Un mdulo es una tcnica que proporciona la posibilidad de dividir sus datos y procedimientos en una parte privada slo accesible dentro del mdulo y parte pblica accesible fuera del mdulo . Los tipos, datos (variables) y procedimientos se pueden definir en cualquier parte. El criterio a seguir en la construccin de un mdulo es que si no se necesita algn tipo de informacin, no se debe tener acceso a ella. Este criterio es la ocultacin de informacin.

Tipos abstractos de datos


Un tipo abstracto de datos (TAD) es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema. Al igual que los tipos definidos por el sistema, un tipo de dato abstracto corresponde a un conjunto (puede ser de tamao indefinido) de valores legales de datos y un nmero de operaciones primitivas que se pueden realizar sobre esos valores.

Tipos abstractos de datos


Para construir un tipo abstracto de datos se debe poder: 1. Exponer una definicin del tipo. 2. Hacer disponible un conjunto de operaciones que se pueden utilizar para manipular instancias de ese tipo. 3. Proteger los datos asociados con el tipo de modo que slo se puede actuar sobre ellas con las rutinas proporcionadas. 4. Hacer instancia mltiples del tipo.

Objetos
Un objeto es sencillamente un tipo abstracto de datos al que se aaden importantes innovaciones en comparticin de cdigo y reutilizacin. Los mecanismos bsicos de orientacin a objetos son: objetos, mensajes y mtodos, clases e instancias y herencia. Una idea fundamental es la comunicacin de los objetos a travs de paso de mensajes. Adems de esta idea, se aaden los mecanismos de herencia y polimorfismo.

Modularidad
La programacin modular trata de descomponer un programa en un pequeo nmero de abstracciones coherentes que pertenecen al dominio del problema y cuya complejidad interna es susceptible de ser enmascarada por la descripcin de un interfaz. Si las abstracciones que se desean representar pueden, en ciertos casos, corresponder a una nica accin abstracta y se implementan en general con la nocin de objeto abstracto.

La estructura de un mdulo
Un mdulo se caracteriza fundamentalmente por su interfaz y por su implementacin. . Las acciones o funciones de un mdulo que son susceptibles de ser llamadas desde el exterior se denominan primitivas o puntos de entrada del mdulo.

Unidades modulares
El lenguaje debe proporcionar estructuras modulares con las cuales se puedan describir las diferentes unidades. De este modo, el lenguaje (y el compilador) puede reconocer un mdulo y debe ser capaz de manipular y gobernar su uso, adems de las ventajas evidentes relativas a la legibilidad del cdigo resultante. En el caso de C++ se conocen como clases y en Turbo Borland Pascal, los mdulos se denominan unidades.

Tipos abstractos de Datos


Un tipo de dato definido por el programador se denomina tipo abstracto de datos (TAD) para diferenciarlo del tipo fundamental (predefinido) de datos. Por ejemplo, en Turbo Borland Pascal un tipo Punto, que representa a las coordenadas x e y de un sistema de coordenadas rectangulares, no existe. Sin embargo, es posible implementar el tipo abstracto de datos, considerando los valores que se almacenan en las variables y qu operaciones estn disponibles para manipular estas variables.

Tipos abstractos de Datos


TAD = Representacin (datos) + Operaciones (funciones y procedimientos)

Ventajas de los TAD


Permite una mejor conceptualizacin y modelado del mundo real. Mejora la robustez del sistema Mejora el rendimiento Permite la extensibilidad del sistema

Tipos abstractos de datos en Turbo Pascal


Ejemplo de pila (pseudocdigo) unit <nombre unidad> ; interface <clausula uses> <constantes, tipos y variables publicas > <cabeceras de procedimientos y funciones publicas> implementation <clausula uses> <constantes , tipos y variables privadas> <procedimientos / funciones privadas y cuerpos de procedimientos / f un c i ones publicas> begin <secuencia de sent e n c ias para inicializacion> end.

unit Pila; interface const MaxPila = 1000; type TipoElemento = integer; ListaElementos = array [1 .. MaxPila] of TipoElemento; tipo = record Elems : ListaElementos; Cima: integer; end; procedure Crear (var S:tipo); (* S se einicializa y se limpia o vaca * ) procedure Destruir (var S:tipo); (* Se libera memoria asignada a S * ) (* S no est inicializada *) procedure Meter (var S:tipo; Item: tipoElemento); (* Se aade un elemento a la cima de la pila *)

procedure Sacar (var S:tipo; var Item: tipoElemento); (*quitar un elemento de la pila *) function PilaVacia (S:tipo) :boolean; (*devuelve true si S es vaca; false en caso contrario *) implementation procedure Crear (var S:tipo); begin S.Cima := O; end procedure Destruir (var S:tipo); begin (*no ha c e nada *) end; procedure Meter (var S:tipo; Item:TipoElemento); begin S.Cima := S.Cima + 1; S .Elems [S.Cima] := Item; end;

procedure Sacar (var S:tipo; var Item:TipoElemento); begin Item := S.Elems [S.Cimal]; S.Cima := S.Cima - 1 end; function pilaVacia (S :tipo) : boolean; begin PilaVacia : = (S . Cima =O) ; end; end.

Una vez que se ha implementado el tipo de dato p i 1 a , ste puede ser utilizado en cualquier programa con tal de invocar en la clusula uses a dicho tipo de dato Pila .

Abstraccin
La abstraccin es la propiedad que permite representar las caractersticas esenciales de un objeto, sin preocuparse de las restantes caractersticas (no esenciales) Una clase se puede definir como una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por su estado especfico y por la posibilidad de realizar una serie de operaciones

Abstraccin
Por ejemplo, una pluma estilogrfica es un objeto que tiene un estado (llena de tinta o vaca) y sobre la cual se pueden realizar algunas operaciones (por ejemplo, escribir, poner/quitar el capuchn, llenar de tinta si est vaca)

Punteros

Estructuras de datos dinmicas


Estructuras de datos que tienen capacidad de variar en tamao y ocupar tanta memoria como utilicen realmente Un array de requisitos es esttico dado que la cantidad exacta de memoria se fija por la declaracin del tamao del array. Esta falta de flexibilidad puede ser una desventaja notable.

Punteros
Un puntero es un tipo de dato simple que contiene la direccin de una variable o estructura en vez de un valor de dato. Los punteros tienen dos propsitos principales: hacer los programas ms eficientes y construir estructuras muy complejas Son estructuras de datos que tienen capacidad de variar en tamao y ocupar tanta memoria como utilicen realmente

Punteros
Las variables que se crean y se destruyen durante la ejecucin se llaman variables dinmicas (tambin annimas). As, durante la ejecucin de un programa, puede haber una posicin de memoria especfica asociada con una variable dinmica y posteriormente puede no existir ninguna posicin de memoria asociada con ella.

Punteros
Al contrario que las estructuras de datos estticas, tales como arrays cuyos tamaos y posiciones de memoria asociados se fijan en tiempo de compilacin, las estructuras dinmicas de datos se amplan (expanden) o reducen (contraen) a medida que se requiera durante la ejecucin y cambia sus posiciones de memoria asociada.

Punteros
Una estructura de datos dinmica es una coleccin de elementos llamados nodos de la estructura normalmente de tipo registro que se enlazan o encadenan juntos. Este enlace se establece asociando con cada nodo un puntero que apunta al nodo siguiente de la estructura. Existen diferentes tipos de estructuras dinmicas de datos, siendo las ms notables y significativas las listas enlazadas, los rboles y los grafos.

Punteros

Punteros
El tipo puntero es un tipo de datos simple en Pascal; es simple debido a que no se puede romper en otros componentes pequeos como es el caso de un array o un registro. Los punteros en esencia son un tipo especial de variable (esttica) que se utiliza para almacenar la direccin de memoria de otra variable, o lo que es igual, su valor es una direccin de una posicin de memoria donde est almacenada otra variable. Una variable tipo puntero, contiene la direccin de la posicin de otra variable

Declaracin de los punteros


Un tipo de dato puntero se especifica utilizando el smbolo de circunflejo (^) seguido por un identificador de tipo. Su formato es: ^identificador- tipo

Declaracin de los punteros


Se puede declarar un puntero a una variable carcter, un puntero a un array de enteros, un puntero a un registro o un puntero a cualquier otro tipo. En general, se pueden declarar variables puntero que apunten a cualquier tipo de dato, incluso otros punteros. Var Nombre_Variable: ^identificador-tipo Var

Ptr: ^Tipo Elemento

Declaracin de los punteros


Se puede declarar un puntero a una variable carcter, un puntero a un array de enteros, un puntero a un registro o un puntero a cualquier otro tipo. En general, se pueden declarar variables puntero que apunten a cualquier tipo de dato, incluso otros punteros. Var Nombre_Variable: ^identificador-tipo

Var
Ptr: ^Tipo Elemento La variable Ptr apunta a un tipo de dato TipoElemento

Operaciones con variables puntero


Procedimiento New. La declaracin de una variable puntero P no crea una celda de memoria para apuntar a ella. El procedimiento (sentencia) New se utiliza para crear tal celda de memoria P; es decir el procedimiento New crea una nueva variable dinmica y establece que una variable puntero apunte a ella.

Operaciones con variables puntero


New (P) p variable puntero La sentencia N ew ( P ) ; llama al procedimiento New que asigna almacenamiento para un valor del tipo determinado y sita la direccin de esta celda de memoria en la variable puntero P. Una vez que se asigna almacenamiento para un valor de tipo determinado al que est apuntando P, se puede almacenar un valor en esa celda de memoria y manipularlo. La posicin exacta de la memoria de esta celda particular es indiferente.

Operaciones con variables puntero


La nueva variable creada es la ya conocida con el smbolo P^. La llamada a New exige que exista suficiente espacio de memoria libre en el Montculo la pila de variables dinmicas (heap) para asignar a la nueva variable. En caso contrario se producir un error en tiempo de ejecucin. La sentencia de asignacin: P^ := 25; almacena el valor real 25.0 en la posicin (celda) de memoria apuntada por P.

Funcionamiento de New (P)


1. Se asigna espacio de memoria conveniente para almacenar tipos de datos correspondientes. 2. La direccin de esta posicin de memoria se almacena en P; se crea una variable dinmica P^

P^

Ejemplo.
A la posicin o celda de memoria a que apunta un puntero se puede acceder situando un smbolo (circunflejo) ^ despus del nombre de la variable puntero. Por ejemplo:
new (Ptr) ; Ptr^ : = 'Mckenna';

La sentencia new (ptr) crea una celda de memoria vaca a la que apunta Ptr. La segunda sentencia sita el valor Mckenna en esa celda de memoria.

Ejemplo.
Un diagrama grfico sera:

Ptr

Ptr^
McKenna

Implementacin interna
Internamente, los punteros se implementan teniendo en cuenta las direcciones de memoria a las que se apunta. Por ejemplo, supongamos que la direccin de ptr 1015 y que la celda de memoria que crea new (ptr) est en la direccin 1256. Por consiguiente, el efecto de:
new (Ptr) ; Ptr^ : = 'Mckenna';

Se puede dibujar a nivel de direcciones de memoria, como se muestra a la izquierda, con el diagrama ms sencillo de la derecha.

Implementacin interna
Direccin 1015
1256

Direccin 1256
McKenna

Ptr

Ptr^

McKenna

Ptr

Ptr^

Implementacin interna
Atencin: Observe que en la declaracin de un puntero, el circunflejo est situado a la izquierda de su tipo, mientras que en una sentencia en que se accede a la celda de memoria a que se est apuntando, el circunflejo aparece a la derecha

program Puntero; Type Ptrint = ^integer; Var I, J : Ptrint; N : integer Begin New (I); New (J); N := 5; I^ := N; Writeln (I^); J := I; J^ := -7; Writeln (I^) end

Você também pode gostar