Clase ed v7

26
Ing. Luis Miralles PROGRAMACIÓN Y ESTRUCTURA DE DATOS

Transcript of Clase ed v7

Page 1: Clase ed v7

Ing. Luis Miralles

PROGRAMACIÓN Y ESTRUCTURA DE DATOS

Page 2: Clase ed v7

Clase de repaso

Suponemos que el alumno ya ha asistido a las clases.

En esta clase haremos un recorrido de los puntos más importantes del tema 1 y del tema 2.

Debido a que disponemos de un tiempo escaso, nos centraremos en los puntos fundamentales.

2

Page 3: Clase ed v7

Tema 1: Introducción

3

Page 4: Clase ed v7

Tema 1

4

INTRODUCCIÓN.1. ¿Qué es una estructura de datos y para qué sirve?2. Abstracción de datos. Concepto de tipo de datos

abstracto.3. Clasificación de las estructuras de datos.

1. Estructuras Básicas.1. Arreglos unidimensionales, multidimensionales.2. Conjunto. Descripción.3. Registro. Descripción.

4. Implementación de las estructuras de datos.1. Estática.2. Dinámica. Descripción de apuntador.3. Comparación de las implementaciones.

Page 5: Clase ed v7

Tema 1: IntroducciónAbstracción:

Operación mental destinada a destacar las partes relevantes del objeto e ignorar otros aspectos irrelevantes del mismo.

Evolución de los lenguajes de programación:

Los lenguajes de programación han evolucionado de bajo nivel a alto nivel. John Guttag en1974 propuso el modelo de tipo abstracto de datos pero no fue hasta 1975 cuando Liskov lo propuso para el lenguaje CLU. Los lenguajes de programación son independientes de la máquina.

Tipo abstracto de datos:

Se puede definir como una terna de conjuntos (D, O, A), donde D representa el dominio; O es el conjunto de operaciones y A es el conjunto de axiomas.

Es independiente del lenguaje de programación. Para llevarlos a cabo se necesitan las estructuras de datos y los procedimientos.

Ej: Persona, perro.

5

Page 6: Clase ed v7

Tema 1: IntroducciónEstructura de datos:

Las estructuras de datos son agrupaciones de datos, quizás de distinta naturaleza (tipo), relacionados (conectados) entre sí de diversas formas y las operaciones definidas sobre esa agrupación. Las estructuras de datos se caracterizan por el tipo de los elementos de la estructura, las relaciones definidas sobre los elementos y las operaciones permitidas sobre la estructura.

Ej: Struct Persona { char Nombre[65]; char Direccion[65]; int AnyoNacimiento; } Fulanito;

Tipos de datos:

El tipo de datos, en un lenguaje de programación, define el conjunto de valores que una determinada variable puede tomar, así como las operaciones básicas sobre dicho conjunto. Definen cómo se representa la información y cómo se interpreta. Están los que vienen en el lenguaje de programación y los que puede definir el usuario.

Ej: boolean, int, float, char, string…

6

Page 7: Clase ed v7

Tema 1: Introducción

7

ObjetoEstructura de

datosMétodos= +

T.A.DModelo de

datosOperaciones= +

Tipos dedatos

Page 8: Clase ed v7

Tema 1: Introducción

8

Page 9: Clase ed v7

Tema 1: Estructura de los tipos de datos

9

Compuestos

Page 10: Clase ed v7

Tema 1: Introducción

Arreglos: Un arreglo es un tipo de dato cuya implantación implica una colección de elementos finita y homogénea. Para acceder: nombre del arreglo y índice.

Ej: int vector[100], float matriz[100 ][100]

10

Figura 1

Figura 2 Figura 3

Page 11: Clase ed v7

Tema1: Introducción

Registros

Permite agrupar diferentes elementos y manejarlos como un todo, además permite establecer relaciones lógicas entre ellos. Para acceder a cada uno de los elementos se utiliza un selector de campo o elemento. Ej:

Ej: struct Producto {int cantidad; int precio ; int subtotal; };

producto.cantidad = 3;

Enumerados

Es un tipo de dato que permite agrupar diferentes identificadores bajo una denominación y asignar estos valores a las variables definidas para ello.

Ej: Enum color = {rojo,verde, azul, amarillo};

11

Page 12: Clase ed v7

Tema 1: Implementación de las estructuras de datos, Estática vs dinámica

Implementación estática:

No se modifica en tiempo de ejecución. Fácil de manejar y rápida de acceso pero se desperdicia memoria.

Implementación dinámica:

Su tamaño puede variar durante la ejecución del programa. Más complejo de implementar pero optimiza el programa. Complica el acceso y la optimización del programa.

12

Page 13: Clase ed v7

Tema 1: Apuntadores

13

Ejemplo 1;Int * p; // declaramos pp = new int; // reservamos espacio*p= 1; // asignamos el valor 1delete p; // liberamos espacio de p

Ejemplo 2;int i = 2;int *pi ;pi = &i; // ahora pi contiene la dirección de la variable i.int j = *pi; // j tomaría el valor 2, que es el contenido de la variable i anterior

Ejemplo 3;int *i, *j;i= j; // i apunta donde apunta j*i = *j; // la variable *i tiene en su memoria el contenido de *j

Un apuntador es una variable que contiene una posición de memoria, y por tanto se dice que apunta a esa posición de memoria. Tiene las operaciones de

new y delete. Hay operadores como dirección “&” o “*”, que es el valor contenido y el operador “->” para acceder a un campo.

Page 14: Clase ed v7

Tema 2: Pilas

14

Page 15: Clase ed v7

Tema 2: Pilas

15

ESTRUCTURA DE DATO: PILAS.

1. Descripción.

2. Operaciones básicas.

1. Vaciar pila.

2. Revisar si está vacía.

3. Insertar y sacar un elemento.

4. Devolver el elemento que se encuentre en el tope.

Page 16: Clase ed v7

Tema 2: PilasLa pila es una lista de elementos caracterizada porque las operaciones de inserción y eliminación de elementos se realizan solamente en un extremo de la estructura que se llama tope. Estructura LIFO (Last In First Out):“Último en entrar primero en salir”

Ejemplo: Platos o Libros

16

Page 17: Clase ed v7

Inicio:

Insertar

A:

Tope -1

Insertar

B:

Insertar

C:

Eliminar

elemento

Tope

A A

B

Tope

A

B

Tope

C

A

B

Tope

Ejemplo:

Page 18: Clase ed v7

Tema 2: Pilas

Estructura

Pila ( Valor ) /* Valor será el tipo de datos que podremos guardar en la pila */

OperacionesCREAR_PILA ( ) → PilaAPILAR ( Pila , Valor ) → PilaDESAPILAR ( Pila ) → PilaCIMA_PILA ( Pila ) → ValorPILA_VACIA ( Pila ) → Lógico

Axiomas∀ stack ∈ Pila, x ∈ Valor se cumple que:PILA_VACIA ( CREAR_PILA ( ) ) → ciertoPILA_VACIA ( APILAR ( stack, x ) ) → falsoDESAPILAR ( CREAR_PILA ( ) ) → errorDESAPILAR ( APILAR ( stack, x ) ) → stackCIMA_PILA ( CREAR_PILA ( ) ) → errorCIMA_PILA ( APILAR ( stack, x ) ) → x

18

Page 19: Clase ed v7

Tema 2: Pilas Estáticas

class Pila

{

public:

Pila (void); // Constructor

bool Apilar (Valor);

bool Desapilar (void);

bool CimaPila (Valor &);

bool PilaVacia (void);

private:

Vector vect;

int cima;

};

typedef Valor Vector[MAX];

19

Page 20: Clase ed v7

Tema 2: Pilas estáticas

Constructor de la clase:

Pila::Pila (void)

{

cima = 0;

}

bool Pila::PilaVacia (void)

{

return cima == 0;

}

bool Pila::CimaPila (Valor & x)

{

bool error;

if (cima == 0)

error = true;

else

{

error = false;

x = info[cima - 1];

}

return error;

}

20

Page 21: Clase ed v7

Tema 2: Pilas estáticas

bool Pila::Apilar (Valor x)

{

bool error;

if (cima == MAX)

error = true;

else

{

error = false;

info[cima] = x;

cima++;

}

return error;

}

bool Pila::Desapilar (void)

{

bool error;

If (cima == 0)

error = true;

else

{

error = false;

cima--;

}

return error;

}

21

Page 22: Clase ed v7

Tema 2: Pilas dinámicas

class Pila

{

public:

Pila (void); // Constructor

bool Apilar (Valor);

bool Desapilar (void);

bool CimaPila (Valor &);

bool PilaVacia (void);

private:

Puntero cima;

};

typedef struct Nodo * Puntero;

struct Nodo

{

Valor info;

Puntero sig;

};

22

Page 23: Clase ed v7

Tema 2: Pilas dinámicas

Constructor de la clase:

Pila::Pila (void)

{

cima = NULL;

}

bool Pila::PilaVacia (void)

{

return cima == NULL;

}

bool Pila::CimaPila (Valor & x)

{

bool error;

if (cima == NULL)

error = true;

else

{

error = false;

x = cima->info;

}

return error;

}

23

Page 24: Clase ed v7

Tema 1: Insertar, extraer y visualizar

24

Page 25: Clase ed v7

Tema 2: Pilas dinámicasbool Pila::Apilar (Valor x)

{

bool error;

Puntero p_aux;

error = false;

p_aux = new Nodo;

p_aux->info = x;

p_aux->sig = cima;

cima = p_aux;

return error;

}

bool Pila::Desapilar (void)

{

bool error;

Puntero p_aux;

if (cima == NULL)

error = true;

else

{

error = false;

p_aux = cima;

cima = cima->sig;

delete p_aux;

}

return error;

}

25

Page 26: Clase ed v7

26

Gracias