9
Estructuras de datos básicas Análisis de Algoritmos - notas # 9 1 1 Departamento de Ciencias de la Computación Estructura de datos básicas Una pila (stack) y una cola (queue) son estructuras dinámicas de datos que sirven para almacenar información en forma temporal. 2 Departamento de Ciencias de la Computación Estructura de datos básicas La pila usa la regla el último que entra es el primero que sale (last- in, first-out o LIFO ). La cola usa la regla el primero que entra es el primero que sale (first-in, first-out o FIFO ). 3 Departamento de Ciencias de la Computación Pilas Una pila tiene varias operaciones asociadas: Insertar (INSERT o PUSH). Mete un elemento dentro de la pila. Extraer (POP). Saca un elemento de la pila. 4 Departamento de Ciencias de la Computación Pilas Para implementar estas operaciones se usa un apuntador auxiliar llamado top [A ], el cual apunta al elemento que más recientemente se insertó en la pila. 5 Departamento de Ciencias de la Computación Operación insertar T(n) = O(1) 6 Departamento de Ciencias de la Computación Operación insertar (ejemplo)

Algoritmos

Embed Size (px)

DESCRIPTION

muestra algoritmos finitos

Citation preview

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 1

1Departamento de Ciencias de la Computación

Estructura de datos básicas

Una pila (stack) y una cola (queue) son estructuras dinámicas de datos que sirven para almacenar información en forma temporal.

2Departamento de Ciencias de la Computación

Estructura de datos básicas

• La pila usa la regla el último que entra es el primero que sale (last-in, first-out o LIFO ).

• La cola usa la regla el primero que entra es el primero que sale (first-in, first-out o FIFO ).

3Departamento de Ciencias de la Computación

Pilas

Una pila tiene varias operaciones asociadas:

Insertar (INSERT o PUSH). Mete un elemento dentro de la pila.

Extraer (POP). Saca un elemento de la pila.

4Departamento de Ciencias de la Computación

Pilas

Para implementar estas operaciones se usa un apuntador auxiliar llamado top [A ], el cual apunta al elemento que más recientemente se insertó en la pila.

5Departamento de Ciencias de la Computación

Operación insertar

T(n) = O(1)

6Departamento de Ciencias de la Computación

Operación insertar (ejemplo)

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 2

7Departamento de Ciencias de la Computación

Operación extraer

T(n) = O(1)

8Departamento de Ciencias de la Computación

Operación extraer (ejemplo)

9Departamento de Ciencias de la Computación

Pilas

• Cuando top [A ]=0, la pila no tiene datos y se dice que está vacía.

• Para revisar si una pila está vacía se usa la función STACK-EMPTY(S ).

10Departamento de Ciencias de la Computación

Probar si la pila está vacía

T(n) = O(1)

11Departamento de Ciencias de la Computación

ColasUna cola tiene varias operaciones asociadas:

Insertar (ENQUEUE). Mete un elemento dentro de la cola.

Extraer (DEQUEUE). Saca un elemento de la cola.

12Departamento de Ciencias de la Computación

Colas

Una cola usa dos apuntadores para el manejo de datos.

Inicio de la cola, head [Q ]: este apuntador indica la posición del inicio de la lista.

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 3

13Departamento de Ciencias de la Computación

ColasFin de la cola, tail [Q ]: este apun-tador indica la posición en donde se insertará el próximo dato en la cola.

La cola es cíclica; cuando head [Q ] = tail [Q ] + 1 se dice que la cola está llena y cualquier intento por insertar un nuevo elemento genera un error llamado overflow.

14Departamento de Ciencias de la Computación

Colas

Cuando tail [Q ] = head [Q ] se dice que la cola está vacía y cualquier intento por extraer un dato genera un error llamado underflow.

15Departamento de Ciencias de la Computación

Operación insertar

T(n) = O(1)

16Departamento de Ciencias de la Computación

Operación insertar (ejemplo)

17Departamento de Ciencias de la Computación

Operación extraer

T(n) = O(1)

18Departamento de Ciencias de la Computación

Operación extraer (ejemplo)

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 4

19Departamento de Ciencias de la Computación

Listas enlazadas

Una lista enlazada es una estructura de datos en la que los objetos están arreglados en una forma lineal.

En un arreglo normal, el orden de los datos lo dan los índices; en una lista enlazada, lo da un conjunto de apuntadores, uno en cada objeto.

20Departamento de Ciencias de la Computación

Listas doblemente enlazadasUna lista doblemente enlazada es un conjunto de objetos, cada objeto tiene una clave, key, y dos apuntadores, next y prev. Dado un elemento x de la lista, next [x ] apunta hacia su sucesor en la lista, mientras que prev [x ], hacia su predecesor.

21Departamento de Ciencias de la Computación

Listas doblemente enlazadas

Si para un elemento x, prev [x ] = NIL, el elemento x no tiene predecesor y por lo tanto es el inicio de la lista (head).

Similarmente, si next [x ] = NIL, el elemento x no tiene sucesor y por lo tanto es el fin de la lista (tail).

22Departamento de Ciencias de la Computación

Listas doblemente enlazadas(ejemplo)

23Departamento de Ciencias de la Computación

Búsqueda en listas enlazadas

T(n) = O(n)

24Departamento de Ciencias de la Computación

Insersión en listas enlazadas

T(n) = O(1)

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 5

25Departamento de Ciencias de la Computación

Insersión (ejemplo)

26Departamento de Ciencias de la Computación

Borrado en listas enlazadas

T(n) = O(1)

27Departamento de Ciencias de la Computación

Borrado (ejemplo)

28Departamento de Ciencias de la Computación

Uso de centinelas

Un centinela es un objeto falso y que se inserta en la lista para simplificar el manejo de los extremos de las listas.

Cualquier referencia a un NIL en el código se puede reemplazar por el centinela nil [L].

29Departamento de Ciencias de la Computación

Uso de centinelas

El uso de centinelas transforma la lista enlazada en una lista circular. En esta lista el centinela se coloca entre el inicio y el fin de la lista.

30Departamento de Ciencias de la Computación

Uso de centinelas (ejemplo)

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 6

31Departamento de Ciencias de la Computación

Uso de centinelas

T(n) = O(1)

32Departamento de Ciencias de la Computación

Borrado (ejemplo)

33Departamento de Ciencias de la Computación

Uso de centinelas

T(n) = O(n)

34Departamento de Ciencias de la Computación

Uso de centinelas

T(n) = O(1)

35Departamento de Ciencias de la Computación

Insersión (ejemplo)

36Departamento de Ciencias de la Computación

Construyendo apuntadores y objetosUna colección de objetos se puede construir con tres arreglos.

El arreglo key guarda la clave de cada objeto. El arreglo next guarda el sucesor de cada objeto. El arreglo prev guarda el predecesor de cada objeto

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 7

37Departamento de Ciencias de la Computación

Construyendo apuntadores y objetos

38Departamento de Ciencias de la Computación

Representación de objetos - arreglo

39Departamento de Ciencias de la Computación

Asignar y liberar objetos

Para insertar una clave en una lista enlazada se debe asignar un apuntador a un objeto desocupado. Por tal razón es conveniente llevar un registro de los objetos desocupados. El registro se lleva por medio de otra lista llamada lista libre (free list).

40Departamento de Ciencias de la Computación

Asignar objetos

41Departamento de Ciencias de la Computación

Asignar objetos

42Departamento de Ciencias de la Computación

liberar objetos

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 8

43Departamento de Ciencias de la Computación

liberar objetos

44Departamento de Ciencias de la Computación

Varias listas – una lista libre

45Departamento de Ciencias de la Computación

Las técnicas vistas hasta ahora se pueden extender para representar árboles.

Árbol binario Se requieren tres campos para los apuntadores p (padre), left (hijo izquierdo) y right (hijo derecho)

Árbol enraizado

46Departamento de Ciencias de la Computación

Si p [x ] = NIL entonces x es la raíz. Si el nodo x no tiene hijo izquierdo, entonces left [x ] = NIL (algo similar ocurre para el hijo derecho).

El atributo root [T ] apunta hacia la raíz. Si root [T ] = NIL, el árbol está vacio.

Árbol enraizado

47Departamento de Ciencias de la Computación

Árbol enraizado binario

48Departamento de Ciencias de la Computación

Cuando el número de hijos en un nodo del árbol es mayor que una constante, la representación anterior tiene varias desventajas.

La representación hijo-izquierdo, hermano-derecho ayuda a manejar este tipo de casos.

Árbol con muchas ramas

Estructuras de datos básicas

Análisis de Algoritmos - notas # 9 9

49Departamento de Ciencias de la Computación

En esta representación, cada nodo tiene un apuntador p, y root [T ] apunta a la raíz.

Cada nodo interno tiene un apuntador hacia su hijo más izquierdo, left-child, y otro hacia su hermano derecho inmediato, right-sibling.

Hijo-izquierdo, hermano-derecho

50Departamento de Ciencias de la Computación

Hijo-izquierdo, hermano-derecho