• No se han encontrado resultados

ALGORITMOS Y ESTRUCTURAS DE DATOS

N/A
N/A
Protected

Academic year: 2021

Share "ALGORITMOS Y ESTRUCTURAS DE DATOS"

Copied!
47
0
0

Texto completo

(1)

ALGORITMOS Y

ESTRUCTURAS DE DATOS

Mtra. Irma Ardón

[email protected]

http://sites.google.com/site/irmaardon

(2)

Objetivos

Resolver problemas que utilicen estructuras y recursión

Implementar ED estáticas y dinámicas

Seleccionar ED, ordenamientos y

búsquedas que resuelvan problemas

específicos

(3)

Temario

1.

Tipos de Datos Abstractos y Estructuras Dinámicas

2.

Recursión y Eficiencia

3.

Búsquedas

4.

Ordenamientos

5.

Listas

6.

Árboles

7.

Grafos

(4)

Bibliografía

AHO. Estructuras de Datos y Algoritmos. Pearson

SEDGEWICK. Algorthms in C. Addison Wesley

CAIRO. Estructuras de Datos. McGrawHill

Otros Autores: Joyanes, Ceballos, DEITEL &

DEITEL

Internet

(5)

Evaluación…

%

1° Parcial 35 2° Parcial 35

Trabajo Final 10

Ejercicios y Programas 20

(6)

…Evaluación…

Parciales escritos

Ejercicios en tiempo y forma

Programas. Por correo, en un solo documento (doc o pdf)

código comentado e imágenes

de la ejecución

(7)

…Evaluación

Trabajo Final (propuesto por la Profesora o por el grupo)

Por correo, Reporte (doc o pdf) con:

Portada e Introducción. Planteamiento del Proyecto y por qué se eligió

Desarrollo. Código Fuente comentado e imágenes de la ejecución

Conclusiones. Beneficios obtenidos durante el desarrollo del Proyecto, problemas encontrados y cómo se solucionaron

Bibliografía. escrita o electrónica

(8)

Equivalencia

NA 0 - 5.9

S 6 - 7.9

B 8 - 8.9

MB 9 - 10

(9)

1. TDA Y ESTRUCTURAS

DINÁMICAS

(10)

Tipos de Datos…

Básicos. Almacenan un solo valor a la vez

int, float, char, apuntador

(11)

…Tipos de Datos…

Estructurados. Almacenan un conjunto de valores de igual o diferente tipo

Arreglos, Estructuras, Listas, Pilas,

Colas, Árboles y Grafos

(12)

…Tipo de Dato Abstracto

Datos Estructurados con funciones

definidas para manipular sus valores

(13)

Apuntador

 

Tipo de dato que permite almacenar

direcciones de memoria

(14)

En Lenguaje C/C++

Declaración:

Tipo * NomVarPtr;//cada variable con su propio * antepuesto

Inicialización:

NomVarPtr = NULL;

Tamaño en Memoria:

Ocho bytes

(15)

Operadores (unarios)

& de dirección. Devuelve la dirección de la variable sobre la cual se utiliza

* de indirección. Devuelve el valor de la variable a la que apunta

si * se utiliza en un apuntador, no o mal inicializado, provoca errores graves:

ciclos infinitos, alteraciones en otros datos, interrupción del programa

(16)

Ejemplo. Operadores

int Y=5;

int * YPtr; //YPtr puede almacenar la dirección //de memoria de una variable entera

YPtr= &Y; //YPtr almacena la dirección de la // variable entera Y

*YPtr; //devuelve o manipula el 5 (valor de Y)

(17)

Manejo indirecto de un valor

En una variable tipo apuntador, se almacena indirectamente un valor, pues dicho valor no se

almacena en el apuntador pero si en la dirección de memoria contenida en él int a;

int * aPtr;

aPtr = &a;

*aPtr = 520;

aPtr = F3A2

A1 A2 A3 A4…

F1 F3A2 F2

F3 520

F4…

aPtraPtr

aa

(18)

Ejemplo. Direcciones y Valores

main(){

int Y=5, * YPtr;

YPtr= &Y;

printf("\nLA DIRECCION DE Y ES %p”,&Y);

printf”(“\nEL VALOR ALMACENADO EN YPtr ES

%p ", YPtr);

printf("\nEL VALOR DE Y ES %d”,Y);

printf(“\nEL VALOR DE *YPtr ES %d ", *YPtr);

printf("\n &*YPtr = %p\n*&YPtr = %p ",&*YPtr,

*&YPtr);

}

(19)

Arreglos

Colección de valores todos ellos del

mismo tipo que se almacenan en localidades consecutivas (celdas) en la memoria de la

computadora y bajo un mismo nombre  tipo NOMBRE[max_elem];

 

X[0] = 1.8 lee (X[1]) muestra(X[i])

 

(20)

…Acceso a los valores…

Para acceder a un valor en un arreglo o vector, se utiliza un indicador de posición o índice. En C/C++ y Java, la primera posición

es cero

No se deben exceder los límites del vector, ni

acceder a celdas vacías

(21)

…Propiedades

Para recorrer todos los elementos de un vector –i- va de 0 a max_elem –1

 

Los Vectores o Arreglos tienen:

un nombre

un conjunto de valores todos ellos del mismo tipo

índice o indicador de posición de 0 a MaxElem –1

(22)

Estructuras Dinámicas

Solución a la desventaja de los arreglos

Cabeza

(23)

DECLARACION DE LOS TIPOS DE

DATOS TNodo Y APUNTADOR A TNodo

 

struct TNodo{

int Info;

struct TNodo * PtrSig;

};

 

typedef struct TNodo * TNodoPtr;

(24)

   Se declara un apuntador a nodo para ubicar un nodo en particular:

TNodoPtr Cabeza, actual, NodoNuevo;

 

(25)

Al insertar un dato nuevo, se solicita memoria para un NodoNuevo

NodoNuevo = new TNodo;

(26)

new

Retorna un apuntador a la celda de memoria a partir de la cual se

almacenará el nuevo nodo

Reserva tantos bytes como requiera el

tipo de dato TNodo

(27)

delete

  Al eliminar un dato, se libera la

memoria consumida por el nodo que lo contiene

delete(actual);

(28)

Los apuntadores deben inicializarse en NULL y liberarse con delete al eliminar el elemento al que apuntan o cuando ya

no serán utilizados

(29)

NodoNuevo

Cabeza

(30)

2.

RECURSIÓN

Técnica de Programación que se utiliza cuando la solución de un problema

implica, repetir la misma funcionalidad un número determinado de veces, cada

vez en menor escala

(31)

int factorial (int n){

si (n = = 0) retorna 1

retorna n *factorial (n - 1) }

factorial (4) = 4 * factorial (3) = 4 * 6 = 24

factorial (3) = 3 * factorial (2) = 3 *2 = 6 factorial (2) = 2 * factorial (1) = 2 * 1 = 2

factorial (1) = 1 * factorial (0) = 1 * 1 = 1

(32)

Potencia n

k

3

2

= 3*(3

1

) = 3*(3*3

0

) = 3*(3*1)= 3*(3) = 9

int potencia (int n, int k) { si (k==0) regresa 1

regresa n * potencia (n, k-1)

}

(33)

Características de la Recursión

1.

El problema se resuelve, resolviendo el mismo problema a menor escala hasta llegar al caso “base”

2.

El procedimiento se llama a si mismo

3.

La manera en la cual el tamaño del

problema disminuye asegura que se

llegará al caso “base”

(34)

ANEXO MODULARIDAD

(35)

Modularidad “Divide y Vencerás”

Dividir el trabajo

Reutilizar código

Fácil comprensión

Fácil mantenimiento

(36)

Ejemplo

Cálculo de área y perímetro de un

triángulo

(37)

Declaración de Módulos

PROCEDIMIENTO:

1. void Calcula_Area(float base, float altura, float * area) {

2. *area = base*altura/2;

3. }

FUNCIÓN:

4. float Calcula_Perimetro(float base, float altura){

5. float perimetro;

6. perimetro=base*altura;

7. return (perimetro);

8. }

(38)

1. int main(){

2. float base,a,perimetro,area;

3. int opc;

4. do {

5. do {

6. cout<<"\n1. AREA\n2. PERIMETRO”<<"\n3. SALIR\nOPCION?

";

7. cin>>opc;

8. }while(opc < 1 || opc > 3);

9. if (opc != 3) {

10. cout<<"\nINGRESE BASE Y ALTURA ";

11. cin>>base>>a;

12. switch (opc) {

13. case 1:Calcula_Area(base,a,&area);

14. cout<<"AREA = " <<area; break;

15. case 2:perimetro=Calcula_Perimetro(base,a);

16. cout<<" PERIMETRO = "<<perimetro;

17. }

18. }

19. }while (opc != 3);

20. }

Llamado

(39)

Comunicación entre módulos…

Parámetros de Permiten al módulo invocado

Entrada Llevar a cabo su misión

Salida Comunicar resultados obtenidos Valor

Retornado Comunicar resultados obtenidos

(40)

…comunicación

1. void Calcula_Area(float base, float altura, float * area) {

2. *area = base*altura/2;

3. }

4. float Calcula_Perimetro(float base, float altura){

5. float perimetro;

6. perimetro=base*altura;

7. return (perimetro);

8. }

Parámetros de Entrada Parámetro de Salida

Valor Retornado

(41)

¿Retornar o No Retornar?

Retornar ahorra un parámetro de

salida

(42)

En el llamado y en la declaración los

parámetros

deben coincidir en cantidad, tipo y

secuencia

(43)

Ejecución del Programa…

1.

Siempre inicia en main()

2.

Cuando se invoca a un módulo, la ejecución del main() se suspende

3.

Se ejecuta el módulo invocado

4.

Al terminar el módulo invocado, se regresa a main()

5.

Siempre termina en main()

(44)

…Ejecución del Programa…

Un módulo puede invocar a otro módulo y así sucesivamente,

pero la aplicación siempre

inicia y termina en main()

(45)

Paso de Parámetros…

Por:

Valor. Entradas que no cambian

Referencia a su dirección de memoria.

Salidas que sí cambian

(46)

1. void Calcula_Area(float base, float altura, float * area) {

2. *area = base*altura/2;

3. }

4. float Calcula_Perimetro(float base, float altura){

5. float perimetro;

6. perimetro=base*altura;

7. return (perimetro);

8. }

(47)

Paso de Parámetros

Los Parámetros de:

Entrada pasan por Valor

Salida pasan por

Referencia con apuntadores

Referencias

Documento similar

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

You may wish to take a note of your Organisation ID, which, in addition to the organisation name, can be used to search for an organisation you will need to affiliate with when you

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)