Vous êtes sur la page 1sur 102

TEMA 4.

TIPOS DE DATOS ABSTRACTOS

TDA. Introduccin

Introduccin
3

Abstraccin

programas El papel de los tipos de datos en el desarrollo de software Concepto de TDA: Tipo de dato abstracto Pasos a seguir para definir un TDA

en el desarrollo de

Concepto de abstraccin
4

Los programas son una combinacin de estructuras de datos y de algoritmos Las estructuras de datos sirven para almacenar temporalmente en memoria la informacin que precisa el programa Los algoritmos trabajan sobre las estructuras de datos procesando la informacin contenida en ellas La abstraccin procedimental permite usar algoritmos sin conocer detalle alguno sobre su implementacin La abstraccin de datos sirve para aislar al programador de los detalles sobre el almacenamiento de la informacin y la forma de operar sobre ella

Tipos de datos
5

El concepto de tipo de dato es en s mismo una abstraccin que determina:

El formato: La estructura de almacenamiento y ocupacin en memoria El dominio: Conjunto de valores posibles Los operadores: Conjunto de operaciones permitidas sobre valores del tipo

Los tipos de datos primitivos: enteros, caracteres, punto flotante, etc., son las abstracciones de datos con las que ya cuenta el lenguaje de programacin A partir de los tipos de datos primitivos se pueden crear otros: tipos agregados y tipos compuestos, para los que el lenguaje solamente cuenta con un soporte limitado, no ofreciendo, por ejemplo, operaciones sobre ellos

Tipos de datos primitivos


6

Al declarar una variable como int estamos usando un tipo primitivo con las siguientes caractersticas:

Formato: Almacenamiento en memoria dependiente del tipo de procesador: LSW-MSW y 32 64 bits Dominio: Variable segn la implementacin, para 32 bits valores entre (231) a 231 1 Operadores: Sobre valores enteros pueden aplicarse los operadores aritmticos, relacionales, de manipulacin de bits y de asignacin

El mecanismo de abstraccin de datos nos permite, por ejemplo, tomar dos variables enteras y realizar una suma sin que importe cul es el formato de almacenamiento interno ni el algoritmo especfico para llevar a cabo dicha operacin

Tipos de datos primitivos


7

Tipos de datos agregados


8

Son colecciones de elementos pertenecientes a un tipo de dato primitivo En lenguaje C un tipo de dato agregado son los arrays o vectores, abstraccin de una sucesin homognea de valores del mismo tipo bsico Cada elemento de la coleccin es tratado como un valor del tipo base, conservando el mismo dominio, formato y operaciones Para el tipo agregado el lenguaje no suele ofrecer operaciones que permitan operar sobre l como un todo, como una coleccin En la biblioteca estndar de C para el tipo agregado char[] se ofrecen diversas operaciones: strlen(), strcpy(), strcmp(), etc. que no dejan de ser funciones externas, ya que el lenguaje no cuenta con soporte para tipos agregados, ni siquiera la operacin de asignacin

Tipos de datos agregados


9

Tipos de datos compuestos


10

Se denomina as a los tipos compuestos de dos o ms partes que pueden ser de tipos primitivos, agregados u otros tipos compuestos En un tipo compuesto no hay una sucesin homognea de elementos del mismo tipo, cada parte tiene significado por s misma y tiene alguna clase de relacin con el resto Al igual que para los tipos agregados, la mayora de lenguajes no facilitan operaciones para actuar sobre tipos de datos compuestos En lenguaje C los tipos de datos compuestos, siempre que sus miembros sean de tipos primitivos, pueden ser asignados y comparados mediante los operadores estndar Un tipo agregado puede usar un tipo compuesto para sus elementos, un tipo compuesto puede tener como miembro un tipo agregado

Tipos de datos compuestos


11

Importancia de los tipos de datos


12

Para realizar su trabajo un programa debe almacenar en memoria la informacin a procesar, usando para ello los tipos de datos ms adecuados a sus necesidades El uso de un tipo de dato inadecuado afecta de manera importante a la eficiencia de los algoritmos. Coleccin de datos con consultas frecuentes: vector? lista doblemente enlazada? rbol? La eleccin de un mal tipo de dato incluso puede provocar que ciertas operaciones sean imposibles: recorrido en sentido inverso de una lista no doblemente enlazada? Dependiendo de las necesidades de cada sistema ser necesario definir, apoyndose en tipos de datos primitivos, agregados y compuestos, las estructuras de datos que se precisen Cuanto mayor sea el grado de abstraccin de los tipos de datos que creemos mayor ser su utilidad y aplicacin en distintos sistemas

Tipos de datos abstractos


13

Conocidos habitualmente como TDA o ADT (Abstract Data Type), se definen como la combinacin de un tipo y un conjunto reglas (operaciones) aplicables sobre dicho tipo Cada una de las operaciones se define en funcin de las entradas que precisa y los resultados que genera La definicin de un TAD facilita lo elementos necesarios para su uso, sin aportar informacin alguna sobre cmo est implementado El diseo de un TAD se basa en el principio de ocultacin de informacin, encapsulando los detalles y ofreciendo al exterior nicamente una interfaz de acceso La generalizacin de las operaciones, sin que importe el tipo de dato concreto, es un mecanismo de abstraccin flexible y potente

TDA - Ejemplo
14

Un conjunto, en su acepcin matemtica, es un magnfico ejemplo de TDA El dominio de un conjunto (elementos que puede contener) puede ser definido como:

Enumeracin: lunes, mircoles y viernes Extensin: todos los nmeros primos

Las reglas que rigen los conjuntos estn definidas en operaciones como:

Adicin de un elemento Unin de conjuntos Diferencia entre dos conjuntos

- Eliminacin de un elemento - Interseccin de conjuntos

Existen relaciones entre los conjuntos y entre conjuntos y elementos:


Pertenencia de un elemento a un conjunto Relacin de subconjunto

Pasos en el diseo de un TDA


15

Diseo

lgico abstracto:

Definir el formato del TDA Definir las operaciones que contempla


Especificacin:

Declarar la estructura de datos que reflejar el formato definido anteriormente Declarar la signatura de cada una de las operaciones (sintaxis de invocacin)

Implementacin:

Detalles de representacin de la estructura de datos Codificacin de los algoritmos para cada una de las operaciones

Descomposicin modular de un TDA


16

La descomposicin en mdulos del cdigo facilita tanto el diseo de nuevos TDA como su utilizacin por parte del propio diseador o de terceros Por regla general todo TDA se dividir en dos mdulos:

Un archivo de cabecera (.h) conteniendo la especificacin: declaracin del tipo de dato y sus variantes y los prototipos de las funciones que actuarn como interfaz de acceso al TDA Un archivo de implementacin (.c/.cpp) en el que se ocultar la representacin del tipo de dato y la implementacin de las funciones

Para usar el TDA nicamente habr que incluir el archivo de cabecera con la especificacin (abstraccin: es todo lo que se necesita saber sobre el TDA) y agregar al proyecto la implementacin, ya sea el mdulo fuente o una versin ya compilada

Implementacin de operaciones
17

Los mtodos/funciones que actan sobre el TDA, representando las distintas operaciones posibles, deben:

Efectuar una comprobacin exhaustiva de las precondiciones Generar el efecto de la operacin nicamente si se satisfacen por completo Modificar exclusivamente los parmetros y el estado segn se indique en la documentacin Mayor robustez en los programas, al no obtener efectos inesperados al usar operaciones sin cumplir los requisitos necesarios Un tratamiento ms sencillo de los posibles errores, al estar documentados los efectos, precondiciones y parmetros afectados

Al seguir estas normas se consigue:

Implementacin de operaciones
18

TDA conjunto. Diseo lgico


19

Para el formato del TDA hay varias opciones:


Vector de booleanos del tamao del dominio de elementos que puede contener el conjunto 2. Lista enlazada con los elementos contenidos en cada momento 3. Vector esttico con los elementos contenidos en cada momento
1.

Operaciones contempladas: A nuevoConjunto() C Union(A, B) C Diferencia(A, B) bool esMiembro(A, x) bool sonIguales(A, B)

Agrega(A, x) C Interseccin(A, B) Elimina(A, x) Asigna(A, B)

TDA conjunto Especificacin (conjunto.h)


20

21

TDA conjunto Especificacin (conjunto.cpp)

22

TDA conjunto Uso del TDA (main.cpp)

23

TDA lineales

TDA lineales
24

Objetivos Saber clasificar los TDA Pilas estticas y dinmicas Colas estticas y dinmicas Listas enlazadas estticas, simples y doblemente enlazadas

Clasificacin de los TDA


25

Segn cmo se gestione la memoria tenemos: TDA estticos: el tamao mximo est prefijado y no pueden crecer, ocupan un espacio contiguo en memoria TDA dinmicos: el tamao se va ajustando a medida que es necesario, ocupan bloques de memoria enlazados entre s Segn la estructura de los datos los TDA son: TDA lineales: vectores, listas, pilas, colas, colas de prioridad, etc. TDA no lineales: matrices, rboles binarios, rboles AVL, grafos, montculos, redes, etc. Otros TDA: conjuntos, tablas de dispersin, punto en el espacio, nmero complejo, etc.

TDA lineales
26

Muchos de los TDA lineales pueden disearse como un conjunto distinto de operaciones sobre dos implementaciones bsicas: vectores o listas Las pilas, las colas, colas circulares y colas de prioridad se pueden enfocar como listas/vectores con un orden particular a la hora de insertar o extraer datos Todos los TDA lineales pueden implementarse de manera esttica o dinmica. Segn el nmero de elementos que se prevea que pueden contener interesar ms una opcin u otra Tambin las operaciones a contemplar influirn en esta decisin, ya que ciertas operaciones resultan ms complejas cuando la asignacin es exclusivamente esttica

TDA lineales
27

Nos concentraremos particularmente en el estudio de tres de estas estructuras:


Listas: Secuencias de elementos sin un orden concreto en las operaciones de insercin y extraccin Pilas: Listas en las que los elementos se introducen y extraen siempre por el mismo extremo Colas: Listas en las que los elementos se introducen por un extremo y se extraen por el opuesto

Salvo por el orden en que se efectan la insercin y extraccin de elementos, estas estructuras de datos comparten muchas caractersticas comunes y, en consecuencia, su implementacin tambin Para cada caso trataremos su implementacin esttica y tambin dinmica

TDA Pila
28

Para qu puede servirnos una pila?

Palabra original: arboleda Palabra invertida: adelobra Finalmente se comparan: if(original == invertida) // La palabra es un palndromo

TDA Pila
29

Conceptos generales

Una pila es una lista de tipo LIFO en la que las operaciones de insercin y extraccin actan de la siguiente manera:

Insercin: Cada nuevo valor se dispone en el tope de la pila, sobre todos los que haya almacenados previamente Extraccin: nicamente se puede recuperar el valor que est en el tope de la pila. Al retirarlo se obtiene acceso al que est debajo

Usualmente adems de estas dos operaciones tambin se facilita una para comprobar si la pila est vaca o no y tambin otra para inspeccionar el valor que hay en el tope de la pila sin llegar a extraerlo Como las dems estructuras de datos lineales, las pilas pueden ser implementadas de manera esttica o de manera dinmica

TDA Pila
30

Implementacin

esttica

TDA Pila
31

Implementacin

esttica Estructura de datos

TDA Pila
32

Implementacin

esttica Especificacin de

operaciones

TDA Pila
33

Implementacin

esttica pila.h

TDA Pila
34

Implementacin

esttica pila.cpp

TDA Pila
35

Implementacin

esttica pila.cpp

TDA Pila
36

Implementacin

esttica pila.cpp

TDA Pila
37

Implementacin

esttica Ejemplo de uso

TDA Pila
38

Implementacin

dinmica

TDA Pila
39

Implementacin

dinmica Estructura de datos

TDA Pila
40

Implementacin

dinmica pila.h

TDA Pila
41

Implementacin

dinmica pila.cpp

TDA Pila
42

Implementacin

dinmica pila.cpp

TDA Pila
43

Implementacin

dinmica pila.cpp

TDA Cola
44

Conceptos generales Una cola es una lista de tipo FIFO en la que las operaciones de insercin y extraccin actan de la siguiente manera:

Insercin: Cada nuevo valor se dispone al final de la cola, detrs de todos los elementos que haya almacenados previamente Extraccin: nicamente se puede recuperar el valor que al inicio de la cola. Al retirarlo se obtiene acceso al siguiente

Usualmente adems de estas dos operaciones tambin se facilita una para comprobar si la cola est vaca o no y tambin otra para inspeccionar el valor que hay en el inicio de la cola sin llegar a extraerlo Como las dems estructuras de datos lineales, las colas pueden ser implementadas de manera esttica o de manera dinmica

TDA Cola
45

Especificacin

de operaciones

TDA Cola
46

Implementacin esttica A diferencia de una pila, implementar una cola mediante un vector esttico no resulta eficiente. Cul es la eficiencia de las dos operaciones fundamentales?:

Insertar un elemento al final: Basta con agregarlo y ajustar el contador de elementos usados en el vector. Puede realizarse en tiempo constante Retirar un elemento del inicio: Al quitar el primer elemento del vector, sera necesario desplazar todos los que hay detrs y finalmente ajustar el contador de elementos usados. Requerira un tiempo lineal en cada llamada.

Es posible obtener una mejora en la eficiencia de las operaciones sin cambiar la estructura de datos (el vector) por otra distinta?

TDA Cola
47

TDA Cola
48

Implementacin esttica Para insertar un elemento en la cola se incrementa el contador de usados, lo que equivale a moverse una posicin en el sentido de las agujas del reloj, y se escribe el elemento en esa posicin Para suprimir un elemento simplemente se incrementa el ndice que apunta al primer elemento, lo que equivaldra tambin a moverse una posicin en el mismo sentido De esta forma, la cola se mueve en crculos conforme se insertan y suprimen elementos, evitando tener que desplazarlos con cada extraccin Utilizando este modelo las funciones de insercin y extraccin se pueden implementar de manera que su ejecucin se realice siempre en tiempo constante

TDA Cola
49

Implementacin

esttica cola.h

TDA Cola
50

Implementacin

esttica cola.cpp

TDA Cola
51

Implementacin

esttica cola.cpp

TDA Cola
52

Implementacin

esttica cola.cpp

TDA Cola
53

Implementacin

dinmica

TDA Cola
54

Implementacin

dinmica - Estructura de datos

TDA Cola
55

Implementacin

dinmica - Cola.h

TDA Cola
56

Implementacin

dinmica - Cola.cpp

TDA Cola
57

Implementacin

dinmica - Cola.cpp

TDA Cola
58

Implementacin

dinmica - Cola.cpp

TDA Cola
59

Implementacin

dinmica - Cola.cpp

TDA Cola
60

Implementacin

dinmica - Cola.cpp

TDA Lista
61

Conceptos generales

La lista es el TDA subyacente que permite construir otros muchos TDA, entre ellos las pilas y las colas. En contraposicin a stos, los mtodos de insercin y extraccin de elementos no tienen restricciones:

Insercin: En una lista los nuevos elementos pueden agregarse al final, al principio o entre cualesquiera otros dos elementos ya existentes Extraccin: Es posible eliminar cualquier elemento de la lista: el primero, el ltimo o uno intermedio. La lista se recompone con cada borrado

Adems de estas dos operaciones en las listas tambin se precisan otras para saber si la lista est o no vaca, obtener el nmero de elementos total que contiene, facilitar la enumeracin de los elementos, etc. Tambin es usual contar con operaciones que permitan concatenar dos listas en una, dividir una lista en dos o ms sublistas, comprobar si una lista est contenida en otra y similares

TDA Lista
62

Especificacin

de operaciones

TDA Lista
63

Implementacin esttica Al contar con operaciones muy diversas, que actan en diferentes posiciones, la eficiencia de las operaciones con una implementacin esttica es variable:

Insertar y eliminar elementos al final: Se puede realizar en tiempo constante Insertar y eliminar elementos al inicio: Requerira un desplazamiento de todos los elementos ya existentes, pero con ciertas tcnicas se puede conseguir hacerlo en tiempo constante Insertar y eliminar elementos en posiciones intermedias: Precisa un desplazamiento de los elementos ya existentes en la lista, por lo que la eficiencia es lineal Acceso directo a un elemento cualquiera: Se efecta en tiempo constante Unir/Dividir listas: Normalmente requiere recorrer al completo una de la listas y parcialmente otra, por lo que al menos se requiere un tiempo lineal

TDA Lista
64

Implementacin

esttica Insercin de elementos

TDA Lista
65

Implementacin

esttica Cmo evitar los desplazamientos de elementos?

TDA Lista
66

Implementacin dinmica Se efecta como una lista de nodos enlazados de manera simple: cada nodo apunta al siguiente, o doble: cada nodo tiene un puntero al anterior y al siguiente. Las operaciones tienen las siguientes consideraciones:

Insertar y eliminar elementos al final: Se puede realizar en tiempo constante si en la cabecera se tiene un puntero al ltimo elemento Insertar y eliminar elementos al inicio: Se puede realizar en tiempo constante Insertar y eliminar elementos en posiciones intermedias: Una vez se tiene el puntero al elemento, la insercin o eliminacin se hacen en tiempo constante Acceso directo a un elemento cualquiera: Requiere recorrer la lista desde el principio saltando el nmero de nodos indicados, por lo que su eficiencia es lineal Unir/Dividir listas: Son operaciones que pueden realizarse en tiempo constante una vez se tienen los puntos a los elementos extremos

TDA Lista
67

Implementacin

dinmica Estructura de datos

TDA Lista
68

Implementacin

dinmica Estructura de datos

TDA Lista
69

Implementacin

dinmica Insercin de un

elemento

TDA Lista
70

Implementacin

dinmica Insercin de un

elemento

75

TDA no lineales

Objetivos del tema


76

Tipos

de rboles y conceptos bsicos Implementacin del TDA rbol binario Introduccin a las tablas de dispersin Dispersin abierta y cerrada

rboles
77

Conceptos Un rbol es un conjunto finito de elementos, a los que se llama nodos, de los cuales uno acta como raz y del que cuelgan los nodos hijo. stos se definen de igual forma recursivamente hasta llegar a los nodos hoja, sin hijos

rboles
78

Conceptos Orden: Nmero mximo de hijos que puede tener un nodo


orden 2 = binarios orden 3 = ternarios

Profundidad de un nodo: Distancia en nodos hasta la raz Altura de un nodo: Distancia mxima en nodos hasta una de sus hojas Altura del rbol: Altura del nodo raz Nivel: Conjunto de nodos de igual profundidad Padre: Nodo del nivel superior al que se encuentra conectado un nodo dado Nodos hermanos: Los nodos del mismo nivel rbol lleno: Todos sus niveles tienen ordeni nodos, con i=nivel

rboles
79

Conceptos Descendientes: Conjunto de nodos hijos de los hijos de un nodo dado Ascendientes: Nodos padre, abuelo, etc., de un nodo dado rbol en inorden: Todos los nodos del subrbol de la izquierda son menores que la raz y todos los de la derecha son mayores (izq<raz<der) rbol en preorden: La raz es menor que todos los nodos del subrbol de la izquierda, siendo estos menores que los del subrbol de la derecha (raz<izq<der) rbol en postorden: La raz es mayor que todos los nodos del subrbol de la derecha, siendo estos mayores que los del subrbol de la izquierda (izq<der<raz)

rboles
80

Conceptos

rboles
81

Conceptos

Tipos de rboles
82

rbol

general: Puede tener cualquier orden (nmero de hijos por nodo) rbol binario: rbol de orden dos (cada nodo tendr 0, 1 2 hijos) rbol de bsqueda: rbol binario en inorden rbol AVL: rbol equilibrado en altura (garantiza orden logartmico de las operaciones) Heap: rbol con orden parcial (el padre es menor que sus hijos, pero no hay restricciones entre stos) Otros rboles: rboles B (ndices en BDD, compresin), rboles Rojo-Negro (rbol de bsqueda equilibrado), rboles Splay (acceso optimizado a nodos recientes), etc.

Aplicaciones de los rboles


83

Mantenimiento de ndices ordenados Evaluacin de expresiones: 2*x+3/5 Clasificacin/Toma de decisiones (C4.5)

rboles binarios
84

Un rbol binario es aqul en el que ningn nodo puede tener ms de dos hijos Se define como un nodo raz que puede tener 0, 1 2 hijos, definindose stos de forma recursiva como subrboles que cuelgan de la raz Se conoce al nodo de la izquierda como hijo izquierdo y al de la derecha como hijo derecho Por su propia naturaleza los rboles binarios son estructuras de datos recursivas y las operaciones se implementan segn esta tcnica Un rbol binario puede dividirse en tres subconjuntos disjuntos:

{R} Nodo raz {I1, I2, ..., In} Subrbol izquierdo de R {D1, D2, ..., Dn} Subrbol derecho de R

rboles binarios
85

Equilibrado

rboles binarios
86

Representacin

rboles binarios de bsqueda


87

Especificacin

de operaciones

rboles binarios de bsqueda


88

arbolbinario.h

rboles binarios de bsqueda


89

arbolbinario.cpp

rboles binarios de bsqueda


90

arbolbinario.cpp

rboles binarios de bsqueda


91

arbolbinario.cpp

rboles binarios de bsqueda


92

arbolbinario.cpp

rboles binarios de bsqueda


93

arbolbinario.cpp

rboles binarios de bsqueda


94

Ejemplo

de uso

rboles binarios de bsqueda


95

Ejemplo

de uso

96

Tablas de dispersin
1.- Tablas de dispersin 2.- Funciones de dispersin 3.- Tipos de dispersin
3.1- Dispersin abierta 3.2.- Dispersin cerrada 3.3.- Dispersin doble

Tablas de dispersin
97

Objetivo: Trasladar un nmero de claves muy grande a un nmero de valores pequeo

Tablas de dispersin
98

Conceptos Se trata de encontrar una funcin f(x) que asigne a cada dato, ya sea ste numrico o alfanumrico, una posicin distinta Cuando se asigna a dos datos diferentes una misma posicin se habla de colisiones, que es necesario resolver El objetivo es que el nmero de colisiones sea igual a cero, para lo cual se depende de dos parmetros: el tamao del almacenamiento y la funcin de dispersin (lo buena que sea sta) Al mismo tiempo hay que reducir la cantidad de espacio sin usar Objetivos:

colisiones(f) = 0 dispersin(f) = mxima

Tablas de dispersin
99

Funciones de dispersin La funcin ha de ser determinista: para el mismo valor ha de facilitar siempre la misma posicin Para claves numricas (T es el tamao de la tabla, primo):
Por divisin: f(x) = x mod T Por producto: f(x) = ent(T*frac(x*C)) / C (0,1)

Para

claves alfanumricas:

Operar sobre los cdigos de todos los caracteres o parte de ellos. Lo ms fcil: sumar los cdigos Asignar un peso a las posiciones mejora la dispersin

Funciones de dispersin
100

Ejemplos

Tipos de dispersin
101

Dispersin cerrada:

Se opera sobre un vector de tamao fijo Existe un lmite en el nmero de datos que pueden almacenarse La resolucin de colisiones tratar de recolocar los datos en elementos libres del vector Se opera sobre un vector de listas enlazadas No existe un lmite en el nmero de datos que pueden almacenarse La resolucin de colisiones acta sobre las listas enlazadas Clculo del factor de carga [0,1] - Hay que maximizarlo Conteo del nmero de colisiones - Hay que minimizarlo

Dispersin abierta:

Anlisis de eficiencia:

Dispersin abierta
102

Vector de punteros a listas enlazadas Si el tamao del vector es adecuado eficiencia cercana a O(1) Insercin:

Posicin f(dato) Insercin al inicio de la lista Posicin f(dato) Bsqueda secuencial en la lista Posicin f(dato) Bsqueda secuencial y borrado

Consulta:

Borrado:

Dispersin cerrada
103

Vector con tamao fijo, no puede crecer, por lo que ha de dimensionarse correctamente Si el factor de carga es alto la probabilidad de colisiones se incrementa Exploracin lineal:

Posicin (f(dato) + intento) % T Se parte de intento=0 y se va incrementando si est ocupada Posicin (f(dato) + intento2) % T Consigue mayor dispersin Posicin (f1(dato) + intento * f2(dato)) % T Se aplica una segunda funcin de dispersin si el primer intento falla

Exploracin cuadrtica:

Dispersin doble:

Dispersin doble
104

El

uso de la tcnica de dispersin doble contribuye a mejorar la distribucin de los datos en la tabla Para claves numricas

Se aplican dos funciones de tipo multiplicativo, empleando en cada una de ellas una constante distinta

Para claves alfanumricas Se aplican dos funciones por divisin sobre los caracteres de la clave, una en su orden original y otra en orden inverso:

f1("clave") f2("evalc")

Cundo usar dispersin cerrada


105

Cuando se conozca de antemano el nmero mximo de elementos que se necesitar almacenar y, adems, no sea habitual la eliminacin El borrado de datos con dispersin cerrada no es trivial, al eliminar un dato deja un hueco que romper la secuencia de bsqueda, ya sea esta lineal, cuadrtica o doble Posibles soluciones a la eliminacin de datos:

Utilizar un borrado perezoso: marcar las posiciones como libres Realizar una redispersin de los datos tras ajustar su tamao Combinar la redispersin y el borrado perezoso

Por regla general la dispersin abierta, con el ajuste apropiado del vector de punteros, permitir obtener una mejor eficiencia en las operaciones

Bibliografa
106

Algoritmos

y estructuras de datos. Una perspectiva en C. Luis Joyanes Aguilar

Estructuras

de datos, algoritmos y programacin orientada a objetos. Gregory L. Heileman

Vous aimerez peut-être aussi