Download - Clase ed v7
Ing. Luis Miralles
PROGRAMACIÓN Y ESTRUCTURA DE DATOS
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
Tema 1: Introducción
3
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.
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
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
Tema 1: Introducción
7
ObjetoEstructura de
datosMétodos= +
T.A.DModelo de
datosOperaciones= +
Tipos dedatos
Tema 1: Introducción
8
Tema 1: Estructura de los tipos de datos
9
Compuestos
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
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
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
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.
Tema 2: Pilas
14
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.
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
Inicio:
Insertar
A:
Tope -1
Insertar
B:
Insertar
C:
Eliminar
elemento
Tope
A A
B
Tope
A
B
Tope
C
A
B
Tope
Ejemplo:
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
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
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
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
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
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
Tema 1: Insertar, extraer y visualizar
24
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
26
Gracias