1 / 13

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.

marlee
Télécharger la présentation

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. 2. La Pila (Stack) • Objetivo: El alumno aprenderá el concepto de la estructura denominada la pila y manejará la inserción y eliminación de elementos en ella, así como sus aplicaciones • Temario: • Definición y ejemplos • Representación de Pilas • Operaciones con Pilas • Aplicaciones

  5. La Pila (Stack) • Conjunto de elementos en el cual se puede agregar y eliminar elementos por un extremo, el cual es llamado el tope o parte superior (top) de la pila. Tope Tope Agrega ‘G’ • Último elemento insertado es el primero en suprimirse (estructura LIFO). El único acceso es el tope de la pila

  6. La Pila: OperacionesPrimitivas • Agregar (push(i)): Agrega elemento i al tope de la pila • Remover (pop()): Remueve elemento del tope de la pila, y se aplica a pilas no vacías. • Stacktop : Retorna el elemento superior de la pila sin quitarlo (pop + push). • StackEmpty: Retorna verdadero si la pila está vacía, falso en lo contrario Vacía = True Push(A) Push(B) Push(C) Pop() Pop() Push(D)

  7. Ejemplo • Para verificar que una expresión aritmética es correcta verificamos que: • Sus paréntesis están balanceados, es decir que el número de paréntesis que abres es el mismo al número de paréntesis que cierras. • ((5+8)*10)/(3+5-9): • Cada paréntesis izquierdo abre un ámbito, y cada derecho lo cierra. La profundidad de anidamiento en un determinado punto es la cantidad de ámbitos abiertos. Debe ser 0 en una expresión balanceada. *, 10 / 3,+,5,-,9 5, +, 8 Push(‘(’) Push(‘(’) Pop () Push(‘(’) Pop ()

  8. Representación de Pilas • Una pila requiere básicamente de dos elementos: • Una variable suficientemente grande para almacenar los elementos insertados en la pila (por ejemplo un arreglo). • Un campo que registre la posición actual del tope de la pila Ejemplo: #define STACKSIZE 100 //Tamaño de la Pila struct pila{ int cima; int elementos[STACKSIZE]; } struct pila p;

  9. Representación de Pilas • La operación isStackEmpty intisStackEmpty(struct pila * P){ return (P->cima == -1); } • La operación Pop int pop (struct pila * P){ if(isStackEmpty(P)){ cout<<“Error Pila Underflow”; exit(1): } return (P->elementos[P->cima--]); } • La operaciónPush voidpush(struct pila * P, int elemento){ if(cima== STACKSIZE-1){ cout<<“Error Pila Overflow”; exit(1): } S->cima++; S->elementos[cima]=elemento; } return Cima Cima-- Cima++ Cima

  10. Representación de Pilas • La operación stackTop Int stackTop(struct pila * P){ if(isStackEmpty(P)){ cout<<“Error PilaVacía”; exit(1): } return P->elementos[P->cima]; }

  11. Ejemplo: Evaluación de una expresión postfija. • Los prefijos pre, post e inter hacen referencia a la posición relativa del operador (e.g., +,-,*,/,$) • A + B : Interfija • AB + : Postfija • + AB : Prefija • Cuando evaluamos una expresión aritmética, utilizamos las reglas de precedencia de los operadores, por ejemplo: • Exponenciación ($), • Multiplicación, División • Adición y Sustracción • Operadores de misma precedencia se utiliza la regla de izquierda a derecha, exceptuando la exponenciación que es de derecha a izquierda

  12. Ejemplos: Evaluación a una expresión postfija. • Siguiendo las reglas de precedencia • A + (B * C) • A + (B C *) • A (B C *) + • A B C * + • (A + B) * C • (A B +) * C • (A B +) C * • A B + C * • A + B – C • A B + - C • A B + C - • (A + B) * (C – D) • (A B +) * (C – D) • (A B +) * (C D -) • (A B +) (C D -) * • A B + C D - * • A $ B * C – D + E / F / (G + H) • A $ B * C – D + E / F / (G H +) • A B $ C * … E F / G H + / • A B $ C * D - E F / G H + / + • A – B / (C * D $ E) • A – B (C * D $ E) / • A – B (C * D E $) / • A – B (C D E $ *) / • A B (C D E $ *) / - • A B C D E $ * / -

  13. Ejemplo: Algoritmo para evaluar una expresión Postfija • Cada operador en una cadena postfija hace referencia a los dos operandos anteriores en la cadena • Uno de los operandos puede ser el resultado de aplicar un operador anterior Mipila= 0 //Pilavacía Cadena = getCadena() //Obtén la cadena postfija de entrada Intindex= 0 //Apunta al primer elemento de la cadena while((symb = cadena[index] )!= NULL){ //Symb representa el carácter que se checará if(symb es un operando) push(Mipila, symb) else{ //Symbes un operador operando2 = pop(Mipila) operando1 = pop(Mipila) value = resultado de aplicarsymb a operando1 y operando2 push(Mipila, value) index++ } return pop(Mipila) }

More Related