Sunteți pe pagina 1din 42

Instituto Tecnolgico Superior de

Guasave
Ingeniera en Sistemas Computacionales
Estructura de Datos
Unidad I: Introduccin a las Estructuras de Datos
Mtro. Jos Antonio Sandoval Acosta
Retcula ISIC-2010-224: Programa: AED-1026/2016

Itsguasave.edu.mx
ESTRUCTURA DE DATOS

Competencia de la Unidad
Competencia de la Unidad
Conoce
Conoceyycomprende
comprendelaslasdiferentes
diferentesestructuras
estructurasdededatos,
datos,susuclasificacin
clasificacinyyforma
forma
de
demanipularlas
manipularlaspara
parabuscar
buscarlalamanera
manerams
mseficiente
eficientede
deresolver
resolverproblemas.
problemas.
ESTRUCTURA DE DATOS
CLASIFICACIN DE ESTRUCTURAS DE DATOS
Una estructura de datos es una clase de datos que se puede caracterizar por su
organizacin y operaciones definidas sobre ella. Algunas veces a estas
estructuras se les llama tipos de datos. en ellas encontramos las siguientes:
ESTRUCTURAS
ESTRUCTURASLGICAS
LGICASDE DEDATOS:
DATOS:
En un programa, cada variable pertenece a alguna estructura
En un programa, cada variable pertenece a alguna estructura de datos de datos
explcita
explcita oo implcitamente
implcitamente definida,
definida, lala cual
cual determina
determina elel conjunto
conjunto dede
operaciones
operacionesvalidas
validaspara
paraella.
ella.Las
Lasestructuras
estructurasde dedatos
datosque
quesesediscuten
discutenaqu
aqu
son
sonestructuras
estructurasde
dedatos
datoslgicas.
lgicas.
Cada estructura de datos lgica puede tener varias representaciones fsicas
Cada estructura de datos lgica puede tener varias representaciones fsicas
diferentes
diferentespara
parasus
susalmacenamientos
almacenamientos
ESTRUCTURA DE DATOS
CLASIFICACIN DE ESTRUCTURAS DE DATOS

ESTRUCTURAS
ESTRUCTURASPRIMITIVAS
PRIMITIVASYYSIMPLES:
SIMPLES:
Son
Sonprimitivas
primitivasaquellas
aquellasque
queno
noestn
estncompuestas
compuestasporporotras
otrasestructuras
estructurasde
de
datos,
datos,por
porejemplo:
ejemplo:enteros,
enteros,booleanos
booleanosyycaracteres.
caracteres.Otras
Otrasestructuras
estructurasde
de
datos se pueden construir de una o mas primitivas.
datos se pueden construir de una o mas primitivas.
Las
Lasestructuras
estructurasde
dedatos
datossimples
simplesque
queconsideramos
consideramosseseconstruyen
construyenaapartir
partirde
de
estructuras primitivas y son: cadenas, arreglos, matrices y registros.
estructuras primitivas y son: cadenas, arreglos, matrices y registros.
AA estas
estas estructuras
estructuras de
de datos
datos las
las respaldan
respaldan muchos
muchos lenguajes
lenguajes de
de
programacin.
programacin.
ESTRUCTURA DE DATOS
CLASIFICACIN DE ESTRUCTURAS DE DATOS

ESTRUCTURAS
ESTRUCTURASLINEALESLINEALESYYNO NOLINEALES:
LINEALES:
Las
Lasestructuras
estructurasdededatos
datossimples
simplessesepueden
puedencombinar
combinardedevarias
variasmaneras
maneraspara
para
formar estructuras mas complejas. Las dos cases principales de
formar estructuras mas complejas. Las dos cases principales de estructurasestructuras
dededatos
datosson
sonlas
laslineales
linealesyylas
lasno
nolineales,
lineales,dependiendo
dependiendode delalacomplejidad
complejidaddede
las
lasrelaciones
relacioneslgicas
lgicasque
querepresentan.
representan.
Las estructuras de datos lineales incluyen pilas, colas y listas ligadas
Las estructuras de datos lineales incluyen pilas, colas y listas ligadas
lineales.
lineales.
Las estructuras de datos no lineales incluyen grafos y rboles.
Las estructuras de datos no lineales incluyen grafos y rboles.
ESTRUCTURA DE DATOS
Ejercicio de clase: Realice el cuadro sinptico de la clasificacin de las
estructuras de datos
ESTRUCTURA DE DATOS
Tipos de Datos Abstractos
Algunos lenguajes de programacin tienen caractersticas que nos permiten
ampliar el lenguaje aadiendo sus propios tipos de datos.
Un tipo de dato definido por el programador se denomina tipo abstracto de
datos (TAD) para diferenciarlo del tipo fundamental (predefinido) de datos.
En esencia un tipo abstracto de datos es un tipo que consta de datos
(estructuras de datos propias) y operaciones que se pueden realizar sobre esos
datos. Un TAD se compone de estructuras de datos y los procedimientos o
funciones que manipulan esas estructuras de datos.
ESTRUCTURA DE DATOS
Es decir, los usuarios de un TAD se comunican con ste a partir de la interfaz
que ofrece el TAD mediante funciones de acceso.
Las unidades de programacin de lenguajes que pueden implementar un TAD
reciben distintos nombres:
ESTRUCTURA DE DATOS
Trabajando con Tipos Abstractos de Datos
Concepto de estructura:
Una estructura es una coleccin de uno o ms elementos, cada uno de los
cuales puede ser de un tipo de dato diferente.
Cada elemento de la estructura se denomina miembro.
Una estructura puede contener un nmero ilimitado de miembros.
A las estructuras tambin se las llama registros.
ESTRUCTURA DE DATOS
Definicin del tipo de dato estructura: Una estructura es un tipo de dato
creado por el usuario, por tanto, es necesario definirlo antes de poder
utilizarlo. Un vez definido, podremos crear variables de tipo estructura.
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
Declaracin de variables de tipo estructura: Una vez definido el tipo de dato
estructura, necesitamos declarar variables de ese tipo (Como para cualquier
tipo de dato).
ESTRUCTURA DE DATOS
Inicializacin de variables de tipo estructura: Las variables de tipo estructura
las podemos inicializar de dos formas:
ESTRUCTURA DE DATOS
Ejercicio de clase: Crear una estructura que contenga los campos bsicos de
una agenda personal.

Ejercicio de clase: Crear un registro que contenga los datos personales para
una nmina.
ESTRUCTURA DE DATOS
Acceso a los miembros de una variable de tipo estructura: Una vez que hemos
declarado una variable de tipo estructura, podemos acceder a los miembros de
dicha variable:
ESTRUCTURA DE DATOS
Acceso a los miembros de una variable de tipo estructura:
ESTRUCTURA DE DATOS
Acceso a los miembros de una variable de tipo estructura:
ESTRUCTURA DE DATOS
Ejercicio: Utilizando estructuras desarrolle un programa que permita la captura
de la informacin correspondiente a un disco, el programa debe repetir la
captura hasta que el usuario teclee enter en el nombre del disco:

Campos de la estructura
Nombre del disco
Cantidad de canciones
Precio
Fecha de Compra (dd/mm/aaaa)

El programa debe ser entregado en archivo ya probado en Dev C++


ESTRUCTURA DE DATOS
Modularidad

Mdulo: Un mdulo que se supone que representa una funcin lgica es una
secuencia lxicamente contina de instrucciones que se encuentra limitado
por elementos de fronteras y adems se caracteriza por disponer de un
nombre o identificador.

Mdulo: Es aqul que est constituido por una o varias instrucciones


fsicamente contiguas y lgicamente encadenadas, las cuales se pueden
referenciar mediante un nombre y pueden ser llamadas desde diferentes
puntos de un programa.
ESTRUCTURA DE DATOS
Un mdulo puede ser:
Un programa
Una funcin
Una subrutina (procedimiento o funcin)

La modularidad se basa en la descomposicin de un problema en una serie de sub


problemas; dividindolo en pequeos mdulos. Esta divisin exige la presencia de
un mdulo denominado mdulo de base o principal, y su funcin es que controle
los dems.
El mdulo principal coordina las llamadas a los mdulos secundarios y pasa los
datos necesarios en forma de parmetros. A su vez cada modulo puede contener
sus propios datos y llamar a otros mdulos o funciones.
ESTRUCTURA DE DATOS
Principios para asegurar diseos modulares:
Pocas interfaces: Cada mdulo debe comunicarse con tan pocos como
sea posible.

Interfaces pequeas (Acoplamiento dbil): Si dos mdulos se


comunican, deben intercambiar la menor informacin posible.

Interfaces explcitas: Cuando dos mdulos se comunican, debe estar


claro en el texto de uno o de ambos.

Ocultacin de la informacin: Toda la informacin sobre un mdulo


debe ser privada al mdulo, a menos que se haya declarado
especficamente como pblica.
ESTRUCTURA DE DATOS
La solucin de un problema complejo puede obtenerse a menudo a partir de la
resolucin de subproblemas ms simples (estrategia divide y vencers).
ESTRUCTURA DE DATOS
Ejemplo:
ESTRUCTURA DE DATOS
Ejemplo: Un programa debe calcular el IVA por cada operacin de una factura de 3 elementos.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
float precio=0, cantidad=0, iva=0;
float subtotal=0, iva_total=0,
total_pago=0;
cout<<"capture cantidad 1:";
cin>> cantidad;
cout<<"capture Precio 1:";
cin>> precio;
iva=cantidad*precio*0.16;
iva_total=iva_total+iva;
ESTRUCTURA DE DATOS
#include <cstdlib>
#include <iostream>
using namespace std;
// mdulo de clculo de iva
float calc_iva(float precio, float cantidad) {
float iva = precio*cantidad*0.16;
return iva;
}
int main(int argc, char *argv[]) {
float precio=0, cantidad=0, iva=0;
float subtotal=0, iva_total=0, total_pago=0;
cout<<"capture cantidad 1:";
cin>> cantidad;
cout<<"capture Precio 1:";
ESTRUCTURA DE DATOS
Ejercicio entregable: realice un programa que calcule el IVA, el DTA y el IGI a
productos que son importados a territorio nacional. Se debe realizar un mdulo
que haga el calculo de los impuestos, ya sea que se calcule cada uno de ellos de
forma modular o que se haga un modulo general para todos los impuestos
Entregar el programa ya funcionando y probado en Dev C++
Datos necesarios por partida:
Tabla de impuestos Producto
IVA = 16% Cantidad
DTA = 8 por millar Precio
Unidad de Medida
IGI depende del pas de origen de la mercanca Pas
USA = 0%
CAN = 0% Nota: Cualquier IVA
UK = 2% otro pas paga el DTA
EU = 0% 40% de IGI. IGI
JP = 2% Total
ESTRUCTURA DE DATOS
Memoria Esttica

Para implementar alguna estructura de datos, primero es necesario tener muy


claro cmo va a ser el manejo de memoria.
La diferencia entre estructuras estticas y dinmicas esta en el manejo de
memoria. En la memoria esttica durante la ejecucin del programa el tamao
de la estructura no cambia.
La estructura que maneja memoria esttica son los arreglos.
Un arreglo es una coleccin finita, homognea y ordenada de elementos. Es
finita porque todo arreglo tiene un lmite, homognea porque todos los
elementos son del mismo tipo y ordenada porque se puede determinar cul es
el ensimo elemento.
ESTRUCTURA DE DATOS
Manejo de memoria dinmica

En la memoria dinmica durante la ejecucin del programa el tamao de la


estructura puede cambiar.
La memoria dinmica, es el espacio de almacenamiento que solicita una clase
o mtodo en tiempo de ejecucin. De esa manera, a medida que el proceso
requiere de ms espacio se solicita al sistema operativo, sin que el proceso se
preocupe por donde sern asignados los datos, ni que espacios de memoria
nos entregara el sistema operativo.
As como existen estructuras de datos estticas (arreglos), tambin existen
estructuras de datos dinmicas (listas y rboles).
ESTRUCTURA DE DATOS
Manejo de memoria dinmica

Una lista es un conjunto de nodos que contiene informacin heterognea. Los


nodos de una lista se encuentran enlazados o relacionados por medio de
direccionamientos de memoria como referencia, y se estructuran de la
siguiente manera:
ESTRUCTURA DE DATOS
Anlisis de Algoritmos
La complejidad de un algoritmo o complejidad computacional, estudia
los recursos y esfuerzos requeridos durante el clculo para resolver un
problema los cuales se dividen en: tiempo de ejecucin y espacio en
memoria.

El factor tiempo, por lo general es ms importante que el factor


espacio, pero existen algoritmos que ofrecen el peor de los casos en
un menor tiempo que el mejor de los casos, lo cual no es la mejor de
las soluciones.

El factor tiempo de ejecucin de un algoritmo depende de la cantidad


de datos que se quieren procesar.
ESTRUCTURA DE DATOS

En computacin al momento de realizar un programa


se debe obtener su algoritmo.

Cada programador puede tener un mtodo


diferente de resolver un mismo problema.

Para ello est el anlisis de algoritmos cuyo objetivo


es: la bsqueda de algoritmos eficientes.
ESTRUCTURA DE DATOS
Concepto de complejidad de algoritmos
La mayora de los problemas que se plantean en la actualidad se
pueden resolver con algoritmos que difieren en su eficiencia. Dicha
diferencia puede ser irrelevante cuando el nmero de datos es
pequeo pero cuando la cantidad de datos es mayor la diferencia
crece.
Ejemplo: Suma de 4 y 10 primero nmeros naturales.
ESTRUCTURA DE DATOS
COMPLEJIDAD EN EL TIEMPO
Definiciones:
T(n) Tiempo de ejecucin del algoritmo.
F(n) Tiempo al introducir los datos al algoritmo.

El tiempo de ejecucin de un algoritmo: se refiere a la suma de los tiempos


en los que el programa tarda en ejecutar una a una todas sus instrucciones.

Tomando en cuanta que cada instruccin requiere una unidad de tiempo,


dicho tiempo se puede calcular en funcin de n (el nmero de datos), lo
que se denomina T(n).
ESTRUCTURA DE DATOS
Si hacemos un anlisis de forma directa al programa para determinar el
tiempo de ejecucin del mismo, debemos definir el conjunto de operaciones
primitivas, que son independientes del lenguaje de programacin que se
use. Algunas de las funciones primitivas son las siguientes:

Asignacin de un valor a una variable (X = 15).


Llamada a un mtodo (z = suma(2 + 4)).
Ejecucin de una operacin aritmtica (total = iva + subtotal).
Comparar dos nmeros (if (x > y)).
Poner ndices a un arreglo (z[i]).
Retorno de un mtodo (return x + y;).
ESTRUCTURA DE DATOS
En forma especfica, una operacin primitiva corresponde a una instruccin en
el lenguaje de bajo nivel, cuyo tiempo de ejecucin depende del ambiente de
hardware y software, pero es constante. Ejemplo. Mtodo que retorna el
nmero mayor de un arreglo de n elementos.
int mayor(int arr[]) {
int may = arr[0]
for(int ind = 0 ind < arr.length ind++)
if(arr[ind] > may)
may = arr[ind]
return may
}
ESTRUCTURA DE DATOS
Para este ejemplo se pueden encontrar dos formulas que determinen el tiempo
de ejecucin, la primera representa el peor de los casos y la segunda el mejor de
los casos. Para se creacin se sigue el programa:
La inicializacin de la variable may = [0], corresponde a una unidad de tiempo.
La inicializacin del ciclo for agrega otra unidad de tiempo.
La condicin del ciclo for se ejecuta desde 1 hasta el tamao del arreglo lo cual
agrega el nmero de unidades del tamao del arreglo.
El cuerpo del ciclo for se ejecuta el tamao del arreglo 1 veces, para este caso
el nmero de operaciones del cuerpo del ciclo pueden ser 6 o 4 (condicin del
if dos, asignacin a may dos e incremento y asignacin dos) en el peor o mejor
de los casos respectivamente. Por consiguiente el cuerpo del ciclo contribuye
con 4 (tamao del arreglo 1) o 6 (tamao del arreglo 1) unidades de tiempo.
ESTRUCTURA DE DATOS
EFICIENCIA DE LOS ALGORITMOS

Para que un algoritmo sea eficiente debemos tener en cuenta el


tiempo de ejecucin, y la cantidad de memoria que va a requerir para
funcionar.

Aun que el problema se pueda resolver de varias maneras debemos


optar por implementar la solucin ms eficiente, es decir la que se
realice en el menor tiempo y con la menor cantidad de memoria.
ESTRUCTURA DE DATOS
COMPLEJIDAD EN EL ESPACIO
Se refiere a la memoria que utiliza un programa para su
ejecucin; es decir el espacio de memoria que ocupan
todas las variables propias del programa.

Para calcular la memoria esttica, se suman la cantidad


de memoria que ocupa cada una de las variables
declaradas en el programa.

Dicha memoria se divide en Memoria esttica y


Memoria dinmica.
ESTRUCTURA DE DATOS
Para calcular la memoria esttica, se suman la cantidad de memoria que ocupa
cada una de las variables declaradas en el programa.
Tomando en cuenta los tipos de datos primitivos del lenguaje de programacin
java podemos determinar el espacio que requiere cada una de las variables de
un programa, de acuerdo a lo siguiente:
Tipo de Dato Tamao en Tamao en
Primitivo Bits Bytes
byte 8 1
char 16 2
El clculo de la memoria dinmica,
short 16 2 no es tan simple ya que depende
int 32 4 de cada ejecucin del programa o
float 32 4 algoritmo y el tipo de estructuras
long 64 8 dinmicas que se estn utilizando.
double 64 8
ESTRUCTURA DE DATOS
SELECCIN DE UN ALGORITMO

Una de las caractersticas primordiales en la seleccin de un


algoritmo es que este sea sencillo de entender, calcular, codificar y
depurar, as mismo que utilice eficientemente los recursos de la
computadora y se ejecute con la mayor rapidez posible con un eficaz
uso de memoria dinmica y esttica.

Tambin para seleccionar correctamente el mejor algoritmo es


necesario realizar estas preguntas:
ESTRUCTURA DE DATOS
Qu grado de orden tendr la informacin que vas a manejar? Entre mas
desordenada est la informacin el algoritmo debe ser ms robusto

Qu cantidad de datos vas a manipular? Una cantidad muy grande puede


hacer prohibitivo utilizar un algoritmo que requiera de mucha memoria
adicional.

Qu tipo de datos quieres ordenar? Algunos algoritmos slo funcionan con


un tipo especfico de datos (enteros, enteros positivos, etc.) y otros son
aplicables a cualquier tipo de dato.

Qu tamao tienen los registros de tu lista? Algunos algoritmos realizan


mltiples intercambios (burbuja, insercin). Si los registros son de gran tamao
estos intercambios son ms lentos.
ESTRUCTURA DE DATOS
Bibliografa

Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, Espaa.


2007. ISBN: 978-84-481-5645-9.

S-ar putea să vă placă și