Está en la página 1de 66

PROGRAMACIONO

ORIENTADA A
OBJETOS
Ing. Romny Lpez

UNIDAD II
ESTRUCTURA DE
DATOS

Prog. Orientada a Objetos

Ing. Romny Lopez

Una estructura de datos es una


Clase

Contenedora

que

proporciona almacenamiento para


tems de datos, y capacidades
para almacenar y recuperar estos
datos.
01001001001

Prog. Orientada a Objetos

f
01101101011

Ing. Romny Lopez

Algunos ejemplos de estructuras


de datos son los arrays, las listas
enlazadas, las pilas y las colas.

Prog. Orientada a Objetos

Ing. Romny Lopez

Listas Enlazadas:
Esta estructura comprende
cuatro conceptos:
clase auto-refenciada
Nodo
campo de enlace
enlace.
Prog. Orientada a Objetos

Ing. Romny Lopez

Clase auto-referenciada:una
clase con al menos un campo
cuyo tipo de referencia es el
nombre de la clase
class Employee {
private int pointer;
private String name;
private double salary; public
Employee next;
Prog. Orientada
} a Objetos

Ing. Romny Lopez

Nodo: un objeto creado


desde una clase autoreferenciada.
Employee NODOLi = new
Employee();
Prog. Orientada a Objetos

Ing. Romny Lopez

Campo de enlace: un campo


cuyo tipo de referencia es el
nombre de la clase
En el fragmento de cdigo
anterior,nextes un campo de
enlace.

Por

el

contrario,pointer,name,
Prog. Orientada a Objetos

Ing. Romny Lopez

Enlace: la referencia a un
campo de enlace.
En el fragmento de cdigo
anterior, la referencianexta
un nodoEmployeees un
enlace.

public aEmployee
Prog. Orientada
Objetos

next;

Ing. Romny Lopez

De Los cuatro conceptos Citados


anteriormente nos llevan a la
siguiente definicin:
Una lista enlazada es
una secuencia de nodos
que
se
interconectan
mediante sus campos de
enlace

En
ciencia
de
la
computacin se utiliza
una
notacin
especial
para ilustrar
las listas
Prog. Orientada a ObjetosIng. Romny Lop

La figura siguiente presenta tres


nodos: A, B y C. Cada nodo se
divide en reas de contenido (en
naranja) y una o ms reas de
enlace (en verde). Las reas de
contenido representan todos los
campos que no son enlaces, y cada
rea de enlace representa un
campo de enlace.

Prog. Orientada a Objetos

Ing. Romny Lopez

Las reas de enlace de A y C


tienen unas flechas para indicar
que referencia a otro nodo del
mismo tipo (o subtipo). La nica
rea de enlace de B incorpora una
X para indicar una referencia nula.
En otras palabras, B no est
conectado a ningn otro nodo.

Prog. Orientada a Ojetos Ing. Romny L

Aunque se pueden crear muchos


tipos de listas enlazadas, las
tres

variantes

ms

populares

son la lista de enlace simple, la


lista doblemente enlazada y la
lista enlazada circular.
Exploremos

esas

variantes,

empezando

con

la

lista

enlazada.
Prog. Orientada a Objetos

Ing. Romny Lopez

Una lista de enlace simple es


una lista enlazada de nodos,
donde cada nodo tiene un nico
campo de enlace. Una variable
de

referencia

contiene

una

referencia al primer nodo, cada


nodo (excepto el ltimo) enlaza
con

el

nodo

siguiente,

enlace
del ltimo
Prog. Orientada
a Objetos

el

nodo
contiene
Ing.
Romny Lopez

Aunque

normalmente

la

variable

de

se

la

referencia

suele llamar top, usted puede


elegir el nombre que quiera.

Prog. Orientada a Objetos

Ing. Romny Lopez

La siguiente figura presenta una


lista de enlace simple de tres
nodos, donde top referencia al
nodo A, A conecta con B y B
conecta con C y C es el nodo
final:

Prog. Orientada a Objetos

Ing. Romny Lopez

Un algoritmo comn de las listas de


enlace

simple

es

la

insercin

de

nodos. Este algoritmo est implicado


de alguna forma porque tiene mucho
que ver con cuatro casos:

Prog. Orientada a Objetos

Ing. Romny Lopez

cuando el nodo se debe insertar


antes del primer nodo
cuando el nodo se debe insertar
despus del ltimo nodo
cuando el nodo se debe insertar
entre dos nodos
cuando la lista de enlace simple
no existe.
Prog. Orientada a Objetos

Ing. Romny Lopez

Antes de estudiar cada caso


consideremos

el

siguiente

pseudocdigo:
- Borrar el Primer nodo:
Asigna el enlace del campo next del
nodo

referenciado por top a top:

Prog. Orientada a ObjetosIng. Romny Lop

top = top.next;
// Referencia el segundo Nodo
//(O Nulo si este es un unico
nodo)

Prog. Orientada a ObjetosIng. Romny Lop

La siguiente imagen presenta


las vistas anterior y posterior
de

una

lista

donde

se

ha

borrado el primer nodo. en esta


figura, el nodo B desaparece y
el nodo A se convierte en el
primer nodo.

Prog. Orientada a Objetos

Ing. Romny Lopez

Borrar cualquier nodo que no sea el


primero:
Localiza el nodo que precede al
nodo a borrar y le asigna el enlace
que hay en el campo next del nodo a
borrar al campo next del nodo que
le precede. El siguiente
pseudocdigo borra el nodo D:

Prog. Orientada a Objetos

Ing. Romny Lopez

Lista Doblemente Enlazada


Una lista doblemente enlazada
es una lista de nodos, donde
cada nodo tiene un par de
campos de enlace. Un campo
de enlace permite atravesar la
lista hacia adelante.
Prog. Orientada a Objetos

Ing. Romny Lopez

mientras que el otro permite


atravesar la lista hacia atrs.
Para la direccin hacia
adelante, una variable de
referencia contiene una
referencia al primer nodo.

Prog. Orientada a Objetos

Ing. Romny Lopez

Cada

nodo

se

enlaza

con

el

siguiente mediante el campo de


enlace next, excepto el ltimo
nodo,

cuyo

campo

de

enlace

next contiene null para indicar el


final de la lista (en direccin
hacia adelante)
Prog. Orientada a Objetos

Ing. Romny Lopez

La

siguiente

figura representa
una

lista

doblemente
enlazada de tres
nodos.
Prog. Orientada a Objetos

Ing. Romny Lopez

donde topForward
referencia

el

primer nodo en la
direccin

hacia

adelante,

topBackward
referencia

el

primero

la

nodo

Prog. Orientada a Objetos

Ing. Romny Lopez

Lista de Enlace Circular


El campo de enlace del ltimo nodo de
una lista de enlace simple contiene un
enlace nulo, ocurre lo mismo en los
campos de enlace del primer y ltimo
elemento en ambas direcciones en las
listas doblemente enlazadas.
Prog. Orientada a Objetos

Ing. Romny Lopez

Supongamos que en vez de esto


los ltimos nodos contiene un
enlace a los primeros nodos. En
esta situacin, usted terminar
con una lista de enlace circular,
como se ve en la siguiente figura:

Prog. Orientada a Objetos

Ing. Romny Lopez

Las listas de enlace circular se utilizan


con

frecuencia

repetitivo

de

en

nodos

procesamiento
en

especfico.

Dichos

representar

conexiones

un

nodos
de

orden
podran

servidor,

procesadores esperando una seccin


crtica, etc.
Prog. Orientada a Objetos

Ing. Romny Lopez

Esta

estructura

de

datos

tambin

sirve como base para una variante de


una

estructura

de

datos

ms

compleja: la cola (que veremos ms


adelante).

Prog. Orientada a Objetos

Ing. Romny Lopez

Las listas enlazadas tienen las


siguientes ventajas sobre los arrays:
No requieren memoria extra para
soportar la expansin.
Por el contrario, los arrays requieren
memoria extra si se necesita
expandirlo (una vez que todos los
elementos tienen datos no se pueden
Prog.aadir
Orientada
a Objetos
datos
nuevos

Romny Lopez
a un Ing.
array).

Ofrecen una insercin/borrado de


elementos ms rpida que sus
operaciones equivalentes en los
arrays. Slo se tienen que actualizar
los enlaces despus de identificar la
posicin de insercin/borrado.
Desde la perspectiva de los arrays,
la insercin de datos requiere el
Prog.
Orientada a Objetos
movimiento
de todos

Ing. Romny
los otros
datosLopez

De forma similar, el borrado de un


dato existente requiere el movimiento
de todos los otros datos para eliminar
el elemento vaco.
En contraste, los arrays ofrecen las
siguientes ventajas sobre las listas
enlazadas:
Prog. Orientada a Objetos

Ing. Romny Lopez

Los elementos de los arrays ocupan


menos memoria que los nodos
porque no requieren campos de
enlace.
Los arrays ofrecen un acceso ms
rpido a los datos, mediante ndices
basados
en enteros.
Prog. Orientada
a Objetos

Ing. Romny Lopez

Las

listas

apropiadas

enlazadas
cuando

se

son

ms

trabaja

con

datos dinmicos. En otras palabras,


inserciones y borrados con frecuencia.
Por el contrario, los arrays son ms
apropiados

cuando

los

datos

son

estticos (las inserciones y borrados


son raras).

Prog. Orientada a Objetos

Ing. Romny Lopez

De todas formas, no olvide que


si se queda sin espacio cuando
aade tems a un array, debe
crear un array ms grande, del
array original el nuevo array
mayor y eliminar el original.
Esto

cuesta

afecta

tiempo,

lo

especialmente

rendimiento

Prog. Orientada a Objetos

si

se

que
al
hace

Ing. Romny Lopez

datos

donde

la

insercin

(enqueue) de tem se hace en un


extremo (el fin de la cola) y la
recuperacin/borrado

de

elementos (dequeue) se hace en


el otro extremo (el inicio de la
cola). Como el primer elemento
insertado es el primero en ser
recuperado, los desarrolladores se
refieren

estructuras

Prog. Orientada a Objetos

estas
FIFO

colas

como

(first-in,
firstIng. Romny Lopez

Normalmente

los

desarrolladores

trabajan con dos tipos de colas: lineal


y

circular.

En

ambas

colas,

la

insercin de datos se realiza en el fin


de la cola, se mueven hacia adelante
y se recuperan/borran del inicio de la
cola. La siguiente figura ilustra las
colas lineal y circular:

Prog. Orientada a Objetos

Ing. Romny Lopez

Prog. Orientada a Objetos

Ing. Romny Lopez

Las colas son muy tiles en varios


escenarios de programacin, entre
los que se encuentran:
Temporizacin de Threads (HILOS,
SEMAFOROS):

Prog. Orientada a Objetos

Ing. Romny Lopez

Un V.M. o un sistema operativo


subyacente
varias

podran

colas

diferentes

para

establecer

coincidir

prioridades

de

con
los

threads. La informacin del thread


se

bloquea

porque

todos

los

threads con una prioridad dada se


almacenan en una cola asociada.

Prog. Orientada a Objetos

Ing. Romny Lopez

Trabajos de impresin:
Como una impresora normalmente es
ms lenta que un ordenador, un
sistema operativo maneja los
trabajos de impresin en un
subsistema de impresin, que
inserta esos trabajos de impresin
en una cola. El primer trabajo
en esa
Ing. Romny Lopez

Prog. Orientada a Objetos

La Pila: es una estructura de datos


donde

las

inserciones

recuperaciones/borrados de datos se
hacen en uno de los finales, que es
conocido como el top de la pila. Como
el ltimo elemento insertado es el
primero en recuperarse/borrarse, los
desarrolladores se refieren a estas
pilas como pilas LIFO (last-in, firstProg. Orientada a Objetos

Ing. Romny Lopez

Los datos se push (insertan)


dentro

se

pop

(recuperan/borran) de la parte
superior de la pila. La siguiente
figura ilustra una pila con tres
String cada uno insertado en la
parte superior de la pila:

Prog. Orientada a Objetos

Ing. Romny Lopez

Como muestra la figura anterior,


las pilas se construyen en
memoria. Por cada dato
insertado, el itm superior
anterior y todos los datos
inferiores se mueven hacia abajo.
Cuando llega el momento de
sacar un tem de la pila, se
recpupera y se borra de la pila el
tem superior
Prog. Orientada
a Objetos

(que en Ing.
la figura
Romny Lopez

Las pilas son muy tiles en


varios

escenarios

de

programacin. Dos de los ms


comunes son:
Pilas que contienen direcciones
de

retorno:

Cuando

el

cdigo

llama a un mtodo, la direccin de


la primera instruccin que sigue a
la llamada se inserta en la parte
superior de la pila de llamadas de

Prog. Orientada a Objetos

Ing. Romny Lopez

Cuando

el

mtodo

llamado

ejecuta la instruccin return, se


saca la direccin de la parte
superior
ejecucin

de

la

pila

contina

en

la
esa

direccin.

Prog. Orientada a Objetos

Ing. Romny Lopez

Si un mtodo llama a otro mtodo, el


comportamiento

LIFO

de

la

pila

asegura que la instruccin return del


segundo mtodo transfiere la ejecucin
al primer mtodo, y la del primer
mtodo

transfiere

la

ejecucin

al

cdigo que sigue al cdigo que llam al


primer mtodo. Como resultado una
Prog.
a Objetos las
pilaOrientada
"recuerda"

Ing. Romny Lopez


direcciones
de

Pilas

que

contienen

todos

los

parmetros del mtodo llamado y las


variables

locales:

Cuando se llama a un mtodo, la JIT


reserva memoria cerca de la direccin
de

retorno

almacena

todos

los

parmetros del mtodo llamado y las


variables
de
Prog.
Orientadalocales
a Objetos

ese mtodo.
Ing. Romny Lopez

Si

el

mtodo

es

un

mtodo

de

ejemplar, uno de los parmetros que


almacena en la pila es la referencia this
del objeto actual.

Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Son

derivados

de

las

listas

ordenadas, en C# pertenecen a
las

clase

System.Coleccion.Generic
Comparten un Esquema comn
Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Objeto LIST<> / ListArrray[]
Representa una lista de objetos
a los que se puede obtener
acceso mediante un ndice.
Proporciona mtodos para
buscar,
Prog.
Orientadaordenar
a Objetos

y modificar
Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Declaracion:
public List <tipo> identificador =
new List<tipo>;
Tipo: tipo de dato que almacenar
Prog.
Orientada a Objetos
la lista

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso Llenar Lista:
Aves.Add(Leon);
Aves.Add(Elefante);
Aves.Add(Gorila);
Aves.Add(Hiena);
Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Leer Lista:
Un nico elemento
string tipoMamifero =mamferos[2];
Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Leer Coleccin de elementos:
foreach(animal in mamiferos ){
listbox1.Items.Add(animal);
}
Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Objeto Dictionary
Representa una coleccin de
pares de clave y valor que se
organizan por claves.
Para cada clave se devuelve su
valor
respectivo
Prog.
Orientada
a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Declarar Diccionario:
Public Dictionary<string,string>
capitales = new
Dictionary<,string,string>();
Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Llenar Diccionario:
capitales.Add(Lara,
Barquisimeto");
capitales.Add(Miranda, Los
Teques");
capitales.Add(Falcon, Coro");
capitales.Add(Zulia,
Prog.
Orientada a Objetos
Ing. Romny Lopez
Maracaibo");

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Leer Diccionario:
Un Elemento
string nombre= capitales[Zulia];

Prog. Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
Uso
Leer Diccionario:
Todo el Dicionario
foreach(estado in capital){
listBox1.tems.Add(capital[estado])
Prog.
} Orientada a Objetos

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
PILAS
Stack
Stack Pila1 = new Stack();

COLAS
Prog. Orientada a Objetos
Queue

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
PILAS
Apilar elemento
Pila1.Push(Elemento1);
Desapilar Elemento
Pila1.Pop(Elemento1);

Prog. Orientada a Objetos


COLAS

Ing. Romny Lopez

COLECCIONES, LISTAS
DICCIONARIOS
PILAS / Colas
Recorrer Elemento (valido para
Ambos)
foreach(elemento in pila1){
listBox1.Items.Add(elemento);
}
Prog. Orientada a Objetos

Ing. Romny Lopez

EXAMEN

Prog. Orientada a Objetos

Ing. Romny Lopez

También podría gustarte