1 / 23

Estructura de Datos En C++

Estructura de Datos En C++. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes.

navid
Download Presentation

Estructura de Datos En C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estructura de Datos En C++ Dr. Romeo SánchezNigenda. E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48

  2. Objetivo General: Conocerá y manejará las estructuras internas de información Temario: • Conceptos Básicos • La Pila • Colas • Recursión • Listas • Árboles • Ordenamiento • Búsqueda • Administración de Almacenamiento Total a calificar: 110 puntos. 40% Tareas 30% Examen Parcial 30% Examen Final 10% Participación

  3. Material de apoyo: Estructura de Datos con C y C++. YedidyahLangsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn College SegundaEdición, Prentice-Hall. Algorithms. ThirdEdition. Parts 1-4, Fundamentals Data StructuresSortingSearching Robert Sedgewick. Estructura de Datos. Román Martínez, Elda Quiroga. ThomsonLearning. Cualquier libro de Estructura de Datos! Software: Compiladores GCC (GNU CompilerCollection) IDEs (IntegratedDevelopmentEnvironment): http://www.eclipse.org/downloads/ http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

  4. 3. La Cola (Queue) • Objetivo: El alumno conocerá la estructura denominada la Cola o Fila, representación y aplicaciones. • Temario: • Representación de Colas • Operaciones con Colas • Colas circulares • Doble cola • Aplicaciones de colas

  5. La Cola (Queue) • Conjunto de elementos del que pueden suprimirse elementos de un extremo (la parte delantera de la cola, front), y pueden agregarse elementos en el otro extremo (la parte posterior de la cola (rear)). Agrega Elimina Front Rear • Primer elemento insertado es el primero en suprimirse (estructura FIFO, first in firstout). • De manera genérica la cola necesita: • Un TAD para almacenar sus elementos • Un índice para indicar la posición del frente de la cola • Un índice para indicar la parte posterior de la cola

  6. Colas: Operaciones • Insertar (insert(q,i)): Agrega elemento i en la parte posterior de la cola q • Remover (remove(q)): Suprime el elemento delantero de la cola q, checando que la cola no se encuentre vacía • Empty : (empty(q)) Retorna falso o verdadero dependiendo si la cola q está vacía o no, el número de elementos está dado por q.rear-q.front+1 Usandoarreglos Insert(q,A) Insert(q,B) Insert(q,C) Existe un problema, cuál es? q.Elems rear=front rear rear front rear Init q.Front=0 q.Rear =-1 rear front front front Vacía = True Remove(q) Remove(q) If q.rear<q.front

  7. Colas: Representación Básica #define SIZEQ 100 structColaBasica{ intfrente; intcola; intelementos[SIZEQ]; }; boolestaVacia(structColaBasica * C){ return (C->cola < C->frente); } frente cola inicio

  8. Colas: Representación Básica boolmueveCola(structColaBasica * C){ if(C->frente>0){ int j = 0; for(inti=C->frente;i<=C->cola;i++){ C->elementos[j++] = C->elementos[i]; } C->frente = 0; C->cola=j-1; returntrue; } returnfalse; } Cola Frente Cola Frente

  9. Colas: Representación Básica void insert(structColaBasica * C, intelem){ boolhayEspacio = true; if(C->cola+1 > SIZEQ-1){ hayEspacio = mueveCola(C); } if(hayEspacio){ C->elementos[++C->cola]=elem; }else{ cout<<"Elemento no se pudoinsertar!"<<endl; } } Cola Cola Frente Frente

  10. Colas: Representación Básica int remove(structColaBasica * C){ if(!estaVacia(C)){ return (C->elementos[C->frente++]); }else{ cout<<"Error cola vacia!"<<endl; exit(1); } } Cola Cola Frente Frente

  11. Colas Circulares usando Arreglos • Evitamos mover elementos is asumimosque la cola es circular, esdecir, que el primer elemento del arregloestá inmediatamente después del el último elemento. • Se puedereservar un elemento en el arregloparadeterminarsi la cola se encuentravacía o no. Frente N Se reserva un arreglo con un espacio más N=MAX +1 boolestaVacia(structColaCircularq){ returnq.frente % N == q.cola; } boolestaLlena(structColaCircularq){ returnq.cola + 1== q.frente; } MAX elementos [1] [0] Cola • Utilizamos el tamaño de la cola paradeterminarcuandorestablecernuestrosapuntadores al índice 0, yasísimularque la Cola es circular!

  12. Colas Circulares usando Arreglos: Ejemplo Frente Frente Frente Frente Insert(q,A) Insert(q,B) Insert(q,C) Insert(q,D) Cola Cola Cola Cola Remove(q) Remove(q) Remove(q) Remove(q) Cola Cola Cola Cola Frente Frente Frente Frente

  13. Colas Circulares usando Arreglos: Remoción intremueveCola(ColaCircular * q) { if(!estaVacia(q)) { q->frente =q->frente%N; returnq->elementos[q->frente++]; } else { cout << "Error, Cola vacía" << endl; return ERROR; } } 1 2,3 Frente Remove(q) Pasos básicos: 0) Verifica que no esté vacía 1) Determina la posición correcta de Frente 2) Guarda el elemento a retornar 3) Incrementa frente Cola Cola 3) Frente 1) Frente 2 Elementoremovido: A

  14. Colas Circulares usando Arreglos: Inserción voidinsertaCola(ColaCircular* q, int x) { if(!estaLlena(q)) { q->elementos[q->cola++] = x; q->cola = q->cola% N; } else { Cout << "Error, Cola llena" << endl; return; } } 1, 2 3 2) Cola Insert(q,F) Cola 1) Cola Pasos básicos: 0) Verifica que no esté llena 1) Inserta en la posición de cola 2) Incrementa el valor de cola 3) Determina la posición correcta de cola Frente Frente b) Cola 3) Cola

  15. Doble Cola: Bicola • Cola bidimensional en la quelasinserciones y eliminaciones se puedenrealizar en cualquiera de los dos extremos de la cola. • Cola doble con entradarestringida: Aceptainserciones solo al final de la cola • Cola doble con salidarestringida: Aceptaeliminaciones solo al inicio de la cola • A diferencia de una cola sencilla, debehaber dos métodos para leer y dos para escribir para considerar el frente y la parte posterior • Podemos utilizar un contador para el número de elementos

  16. Doble Cola: Operaciones insertaAtras(q,A) insertaAtras(q,B) Cola Cola Cola Frente Frente Frente Inicio: insertaFrente(q,E) insertaFrente(q,C) insertaFrente(q,D) Numelems= MAX Cola Cola llena! Cola Frente Frente Frente

  17. Doble Cola: Operaciones RemueveFrente(q) Numelems= MAX Cola Cola Copia Frente Frente Frente RemueveAtras(q) Cola Cola Frente Frente

  18. Doble Cola: Operaciones structBicola { intnelems; intfrente; intcola; intelementos[MAXQUEUE]; }; int empty() { return items == 0; } Bicola q; q.nelems = 0; q.frente = 0; q.cola = 0;

  19. Doble Cola: Operaciones insertaAtras(q,B) void insertaAtras(Bicola * q, int x){ if (q->nelems == MAXQUEUE){ cout<<"Error, cola llena"; exit(1); } q->elementos[q->cola] = x; q->nelems ++; q->cola ++; } Cola Cola Frente Frente Frente

  20. Doble Cola: Operaciones insertaFrente(q,C) void insertaFrente(Bicola * q, int x){ if (q->nelems == MAXQUEUE){ cout<<"Error, cola llena"; exit(1); } mueveBicolaUp(q); q->elementos[q->frente] = x; q->nelems ++; q->cola ++; } Cola Cola Frente Frente

  21. Doble Cola: Operaciones Numelems= MAX RemueveFrente(q) Cola Cola intremueveFrente(Bicola * q){ int d; if ( empty() ) returnt_error; q->nelems --; q-> cola --; d = q->elementos[q->frente]; mueveBicolaDown(q); return d; } Frente Frente Frente

  22. Doble Cola: Operaciones RemueveAtras(q) intremueveAtras(Bicola * q){ if ( empty() ) returnt_error; q->nelems --; return q->elementos[-- q->cola]; } Cola Cola Frente Frente

  23. Aplicaciones de Colas • En CienciasComputacionales, Investigación de Operaciones, y muchasotrasáreasdondedatos son almacenadospara ser procesadosposteriormente, ejecutandounafunción de buffer (e.g., inventarios, threads, simulación, manufactura, etc).

More Related