La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

TIPOS ABSTRACTOS DE DATOS. 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables.

Presentaciones similares


Presentación del tema: "TIPOS ABSTRACTOS DE DATOS. 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables."— Transcripción de la presentación:

1 TIPOS ABSTRACTOS DE DATOS

2 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables sobre ellos  Los lenguajes procedimentales no contemplan encapsulamiento, razón por la cual la representación (datos) no es exclusiva de la implementación (operaciones)

3 3 TIPOS ABSTRACTOS DE DATOS  Los lenguajes modulares proveen encapsula- miento, exclusividad de la implementación sobre la representación, pero no instanciación  Los lenguajes orientados a objetos proveen encapsulamiento, exclusividad de la implemen- tación sobre la representación e instanciación

4 4 STACKS (PILAS)  Un stack es un TAD de comportamiento LIFO, con las operaciones create, push, pop y empty  En un stack sólo se puede acceder a uno de sus extremos, el cual se denomina top  La operación push pone un elemento en el top del stack y la operación pop saca el elemento situado en el top del stack

5 5 LA CLASE STACK #define MAX 10 typedef int Base; typedef Base Vector[MAX]; class Stack { private: Vector v; int top; public: Stack(); bool Empty(); void Push(Base); Base Pop(); };

6 6 LA CLASE STACK Stack::Stack() { top = -1; } bool Stack::Empty() { return top == -1; } void Stack::Push(Base e) { v[++top] = e; } Base Stack::Pop() { return v[top--]; }

7 7 LA CLASE STACK Ejercicio Implementar la función Ultimo(S), que elimina y retorna el último elemento existente en un stack S. Base Ultimo(Stack &S) { if(!S.Empty()) { Base x = S.Pop(); if(!S.Empty()) { Base y = Ultimo(S); S.Push(x); return y; } else return x; } else return 0; }

8 8 QUEUES (COLAS)  Una cola es un TAD de comportamiento FIFO, con las operaciones crear, agregar, extraer y vacía  En una cola sólo se puede acceder a uno de extremos, denominado rear, para agregar un elemento y al otro, denominado front, para extraer un elemento

9 9 LA CLASE COLA #define MAX 10 typedef int Base; typedef Base Vector[MAX]; class Cola { private: Vector v; int front; int rear; public: Cola(); bool Vacia(); void Agregar(Base); Base Extraer(); };

10 10 LA CLASE COLA Cola::Cola() { front = 0; rear = 0; } bool Cola::Vacia() { return front == rear; } void Cola::Agregar(Base e) { rear = (rear+1)%MAX; v[rear] = e; } Base Cola::Extraer() { front = (front+1)%MAX; return v[front]; }

11 11 LA CLASE COLA Ejercicio Refleja es una cola con los mismos elementos de una cola Directa, pero en orden inverso. Implementar la función Reflejar(R, D), que concluya con las versiones Directa y Refleja de una cola. void Reflejar(Cola &R, Cola &D) { if(!R.Vacia()) { Base x = R.Extraer(); D.Agregar(x); Reflejar(R,D); R.Agregar(x); }

12 12 PRIORITY QUEUES  Una cola de prioridad es una cola cuyos elementos tienen asociada una prioridad que determina el orden en que son extraídos  Una prioridad es un número entre 1 y p, donde 1 es la prioridad más alta  En una cola de prioridad, se puede agregar un elemento de cierta prioridad, o bien, extraer el elemento de máxima prioridad

13 13 HEAPS  El heap es el caso más notable de cola de prioridad y se define como un árbol binario con todos sus niveles completos excepto, generalmente, el último donde todos los nodos están ajustados a la izquierda  Cada nodo en un heap tiene mayor prioridad que sus descendientes, de manera que el elemento de prioridad máxima se encuentra siempre en la raíz del árbol

14 14 HEAPS  Los elementos se ingresan por nivel, de izquierda a derecha  Después de un ingreso se debe reparar la eventual alteración de la propiedad de heap  Debido a la forma de organización del árbol, se puede usar un arreglo para representarlo. Basta con numerar los nodos consecutiva- mente por nivel, de arriba hacia abajo y de izquierda a derecha

15 15 HEAPS  Representación de árbol 5 15 2540 10 2030 354555 60 Entran Salen

16 16 HEAPS  Numeración de nodos 1 3 74 2 56 1089

17 17 HEAPS  Representación de arreglo  El padre de un elemento v[i] es v[j], con j=i/2  Un elemento v[j] tiene hijos v[i] y v[i+1], con i= 2*j 0 1 2 3 4 5 6 7 8 9 10 5 10 15 40 20 30 25 45 55 35 SalenEntran v :

18 18 LA CLASE HEAP #define MAX 10 typedef int Base; typedef struct Elemento { int p; Base info; }; typedef Elemento Vector[MAX];

19 19 LA CLASE HEAP class Heap { private: Vector v; int n; void Subir(); void Bajar(); public: Heap(); bool Vacio(); void Agregar(Elemento); Elemento Extraer(); };

20 20 LA CLASE HEAP void Heap::Subir() { if(n > 1) { int i=n, k=i/2; v[0].p = v[n].p; v[0].info = v[n].info; while (v[k].p > v[0].p && k > 0) { v[i].p = v[k].p; v[i].info = v[k].info; i = k; k = i/2; }; v[i].p = v[0].p; v[i].info = v[0].info; }

21 21 LA CLASE HEAP void Heap::Bajar() { int k=1, i=2*k, fin=0; v[0].p = v[1].p; v[0].info = v[1].info; while (k <= n/2 && !fin) { if (i < n) if (v[i+1].p < v[i].p) i = i+1; if (v[0].p > v[i].p) { v[k].p = v[i].p; v[k].info = v[i].info; k = i; i = k*2; } else fin = 1; } v[k].p = v[0].p; v[k].info = v[0].info; }

22 22 LA CLASE HEAP Heap::Heap() { n = 0; } bool Heap::Vacio() { return (n == 0); } void Heap::Agregar(Elemento e) { v[++n].p = e.p; v[n].info = e.info; Subir(); }

23 23 LA CLASE HEAP Elemento Heap::Extraer() { Elemento e = v[1]; v[1].p = v[n].p; v[1].info = v[n--].info; Bajar(); return e; }

24 24 LA CLASE HEAP Ejercicio Implementar la función Impares(H), que elimina todos los elementos de ordinalidad par existentes en un heap H, es decir, los elementos segundo, cuarto, sexto, etc. void Impares(Heap &H) { if(!H.Vacio()) { Elemento e1 = H.Extraer(); if(!H.Vacio()) Elemento e2 = H.Extraer(); Impares(H); H.Agregar(e1); }


Descargar ppt "TIPOS ABSTRACTOS DE DATOS. 2  Un Tipo Abstracto de Dato (TAD) es un modelo constituido por un conjunto de objetos y una colección de operaciones realizables."

Presentaciones similares


Anuncios Google