You are on page 1of 29

18/11/2013

1
Arreglos bidimensionales
Conceptos de estructuras de datos
Colas y pilas
Prof. Elizabeth Murakami
Elimura@hotmail.com
Arreglos II
18/11/2013
2
Arreglos de varias dimensiones
Existen grupos de datos que se representan mejor en
forma de tabla o matriz con dos o ms subndices.
Ejemplos tpicos de tablas o matrices son:
Distancias entre ciudades
Horarios
Informes de ventas peridicas
Arreglos de varias dimensiones
Se pueden definir a las tablas o matrices como arreglos
multidimensionales, cuyos elementos se pueden
referenciar por dos, tres o ms subndices. Los
arreglos de varias dimensiones se dividen en dos
grandes grupos:
Arreglos bidimensionales: tablas o matrices.
Arreglos multidimensionales.
18/11/2013
3
Arreglos bidimensionales: matrices
Un arreglo bidimensional se puede considerar como un
vector de vectores.
Es un conjunto de elementos, todos del mismo tipo, en
el cual el orden de los componentes es significativo y
en el que se necesitan especificar dos subndices para
poder identificar cada elemento del arreglo.
Arreglos bidimensionales: matrices
30
150
Matriz A:
Fila 1
Fila 2
Fila 3
Fila 4
Fila 5
Columna 1 Columna 2 Columna 6
18/11/2013
4
Arreglos bidimensionales: matrices
30
150
Matriz A:
Subndice i
para las filas
Subndice j
para las columnas
A[2,5]
A[5,2]
Arreglos bidimensionales: matrices
Notacin algortmica para declarar matrices:
tipo
array [1..M,1..N] de <tipo de dato>: <nombre del tipo array>
var
<nombre del tipo array>: identificador de la variable de este tipo

Ejemplo:
tipo
array [1..5, 1..6] de entero: Notas
var
Notas: A, B
18/11/2013
5
Declarar una tabla de 3 filas y 5
columnas
Pseudocdigo Lenguaje C
Tipo_dato ident_arr [tam_fila],[tam_col]

Entero b[3][5]
Tipo_dato
ident_arr[tam_fila],[tam_col];

int b[3][5];
Tipo_dato: tipo de dato de todo el arreglo
ident_arr: nombre del arreglo
tam_fila: total de filas
tam_col: total de columnas

b Col 0 Col 1 Col 2 Col 3 Col 4
Fila 0 b[0][0] b[0][1] b[0][2] b[0][3] b[0][4]
Fila 1 b[1][0] b[1][1] b[1][2] b[1][3] b[1][4]
Fila 2 b[2][0] b[2][1] b[2][2] b[2][3] b[2][4]
Orden de los valores del arreglo
18/11/2013
6
Inicializacin de arreglos
bidimensionales
Pseudocdigo Lenguaje C
t_dato identif [fil],[col]{valores}

Entero a[3][3]{1,2,3,4,5,6,7,8,9}
t_dato identif [fil],[col]={valores};

Int a[3][3]={1,2,3,4,5,6,7,8,9};
a 0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
Lectura e impresin de arreglos
bidimensionales
Pseudocdigo Lenguaje C Que realiza
Desde (i0, i<3, ii+1)
Desde (j0,j<4, jj+1)
Leer mat[i][j]
for (i=0, i<3, i++)
for (j=0,j<4, j++)
cin>> mat[i][j];
Recorre cada fila (i)
Recorre cada columna (j)
Almacena en la fila i y
columna j correspondiente
Pseudocdigo Lenguaje C Que realiza
Desde (i0, i<3, ii+1)
Desde (j0,j<4, jj+1)
imprimir mat[i][j]
for (i=0, i<3, i++)
for (j=0,j<4, j++)
cout<< mat[i][j];
Recorre cada fila (i)
Recorre cada columna (j)
Imprime el valor almacenado
en la fila i y columna j
correspondiente
18/11/2013
7
Modificacin de un elemento de una
matriz
Pseudocdigo Lenguaje C
t_dato ident_arr [fil],[col]valor

Entero b[3][5]18
t_dato ident_arr [fil],[col]=valor;

int b[3][5]=18;
Pseudocdigo Lenguaje C
Entero a[4][4]
Desde (j0,j<4, jj+1)
a[2][j]5

int a[4][4];
Desde (j=0,j<4, j++)
a[2][j]=5;
Arreglos bidimensionales: matrices
Un arreglo bidimensional se dice que tiene M*N elementos,
donde M es el nmero de filas y N el nmero de columnas.
18/11/2013
8
Arreglos bidimensionales: matrices
Operaciones con matrices:
1. Asignacin
2. Lectura/escritura
3. Recorrido secuencial: Por fila
Por columna
Arreglos bidimensionales: matrices
1. Asignacin: consiste en asignar directamente un
valor a cualquier elemento de la matriz.
Ejemplo: A[1,1] 3
2. Lectura/escritura: normalmente se realiza con
estructuras de repeticin. Pero una instruccin
simple de lectura/escritura podra ser:
leer(A) lectura de la matriz A
escribir(A) escritura de la matriz A
leer(A[2,3]) lectura del elemento en la fila 2
columna 3 de la matriz A.
18/11/2013
9
Arreglos bidimensionales: matrices
Recorrido secuencial: Se puede acceder a los
elementos de una matriz para introducir datos
(leer) en ella o bien para visualizar su contenido
(escribir), realizar comparaciones o bsquedas de
elementos.
Esta operacin se realiza usando estructuras de
repeticin, cuyas variables de control se utilizan
como subndices de la matriz (por ejemplo i, j).
El incremento del contador del bucle producir el
tratamiento sucesivo de los elementos de la
matriz.

Arreglos bidimensionales: matrices
El recorrido secuencial se puede hacer por filas o por
columnas.
Recorrido secuencial por filas:
desde i 1 hasta 3 hacer
desde j 1 hasta 4 hacer
leer(A[i,i])
fin_desde
fin_desde

18/11/2013
10
Arreglos bidimensionales: matrices
Recorrido secuencial por columnas:
desde j 1 hasta 4 hacer
desde i 1 hasta 3 hacer
leer(A[i,i])
fin_desde
fin_desde

Ejemplo 1: Inicializar la matriz A de 10 filas
y 4 columnas con un valor constante
dado k.
algoritmo inicializacin_matriz
const
M=10
N=4
tipo
array[1..M, 1..N] de entero: Matriz
var
Matriz: A
entero: i, j, k
Inicio
leer(k)
desde i 1 hasta M hacer
desde j 1 hasta N hacer
A[i,i] k
fin_desde
fin_desde
fin.
18/11/2013
11
Ejemplos de matrices
Ejemplo 2: Escribir un algoritmo que permita sumar el
nmero de elementos positivos y negativos de una
matriz T.
Ejemplo 3: Escribir un algoritmo que obtenga la suma de
los elementos de cada una de las filas y de cada una
de las columnas de una matriz de M filas y N
columnas.
Ejemplos de matrices
Ejemplo 4: Escriba un algoritmo que realice la suma de
todos los elementos de una matriz B de M filas y N
columnas.
Ejemplo 5: El jefe de recursos humanos de una tienda de
8 departamentos, desea registrar la asistencia de los
trabajadores cada da de la semana en cada
departamento, para obtener la siguiente informacin:
18/11/2013
12
Ejemplos de matrices
a) La cantidad de trabajadores que laboraron cada da de la
semana.
b) El departamento al que ms asistieron sus trabajadores
durante la semana.
c) La cantidad de trabajadores que asistieron el da sbado y
el da domingo.
d) A cul departamento asistieron la menor cantidad de
trabajadores durante la semana.
Arreglos multimensionales
Un arreglo se puede definir de tres, cuatro y hasta n
dimensiones.
Se manejan los mismos conceptos para los subndices
que en los vectores o matrices.
Cada elemento del arreglo se puede identificar usando
la cantidad de subndices necesarios, por ejemplo en
un arreglo de n dimensiones se escribir: A[I
1
, I
2
, I
3
, ,
I
n
]
18/11/2013
13
Arreglos multimensionales
Ejemplo: Un arreglo de tres dimensiones puede ser uno
que contenga los datos relativos al nmero de
estudiantes de una universidad de acuerdo a los
siguientes criterios:
ao (primero a quinto)
sexo (femenino/masculino)
facultad (cinco facultades diferentes)

Arreglos multimensionales
Sexo
Facultad
Curso
18/11/2013
14
Crear un programa que me permita llenar la diagonal
principal de una matriz de 3 x 3 de solamente ceros.
Crear un programa que permita colocar en la tercera
fila de una matriz de 3 x3 solo nmeros pares.
Realice un programa que llene 2 matrices y coloque la
suma de las mismas en una tercera matriz.
Crear un algoritmo que permita colocar valores pares
en posiciones pares e impares en posiciones impares
de una matriz de 3 x3
Ejercicios
Estructuras de Datos
18/11/2013
15
Con relacin a la Estructura
LISTA
Indicar objetos reales que se puedan modelar con
dicha estructura.
Listas de Ordenes de visitas (hospital)
Lista de aplicaciones
Lista de pacientes
Lista de compras


Una lista es una estructura de datos secuencial.
Una manera de clasificarlas es por la forma de acceder
al siguiente elemento:
- Lista densa: la propia estructura determina cul es el
siguiente elemento de la lista. Ejemplo: un array.
- Lista enlazada: la posicin del siguiente elemento de la
estructura la determina el elemento actual. Es necesario
almacenar al menos la posicin de memoria del primer
elemento. Adems es dinmica, es decir, su tamao
cambia durante la ejecucin del programa.


Definiciones de la misma
LISTA
18/11/2013
16
Las Listas son secuencias de 0 o ms elementos de un
tipo de datos almacenado en memoria. Son
estructuras lineales donde cada elemento de una lista
excepto el primero tiene un nico predecesor y cada
elemento de la lista excepto el ultimo tiene un
sucesor.
Grficamente:




Definiciones de la misma
LISTA
TAD que modele las LISTAS.
Nombre: TAD Lista
Invariante: n/a

Operaciones:
crearLista()
*/ Devuelve un valor del tipo pila preparado para ser usado y que
contiene un valor de pila vaca. Esta operacin es la misma que la
de las listas generales.*/
Precondiciones: N=0
Pos condiciones: Lista creada

18/11/2013
17
insertar(crearLista, x pos)
*/ mediante este mtodo se insertan datos a la Lista ya creada. Inserta
elemento x en pos */
Precondiciones: pos != null
Pos condiciones: insertarLista completado (dato insertado en Lista)

FIN():
*/Retorna la posicin del ltimo elemento, en otras palabras el fin de la
lista, tambin se puede considerar con el tamao de la lista. S la lista est
vaca retorna una posicin invalida que podra ser -1. */
Precondiciones: n/A
Pos condiciones: operacin finalizada


.TAD que modele las LISTAS.
Siguiente(pos)
*/con este mtodo se Retorna pos + 1, si pos es igual o
mayor a FIN(), retorna FIN(). */
Precondiciones: pos != 0
Pos condiciones: retorna pos

anterior(pos)
*/con este mtodo se Retorna pos 1. */
Precondiciones: pos != 0
Pos condiciones: retorna pos

limpiar(pos)
*/Limpia la lista y Finaliza FIN()*/
Precondiciones: nn+1, pos = 0
Pos condiciones: Lista vacia

.TAD que modele las LISTAS.
18/11/2013
18
Relacionar el concepto de
VENTANA con el de Lista.

Una ventana es un rea visual, normalmente de forma
rectangular, que contiene algn tipo de interfaz de
usuario, mostrando la salida y permitiendo la entrada
de datos para uno de varios procesos que se ejecutan
simultneamente.

Y una lista Consiste en una secuencia de nodos, en los
que se guardan campos de datos arbitrarios y una o
dos referencias (punteros) al nodo anterior o
posterior.

Relacionar el concepto de
VENTANA con el de Lista.

El principal beneficio de las listas enlazadas respecto a
los array convencionales es que el orden de los elementos
enlazados puede ser diferente al orden de almacenamiento
en la memoria o el disco.

La relacin es que con ambos trminos nos referimos a
manipulacin de datos sin importar el orden de los mismos,
solo el acceso y su modificacin.
18/11/2013
19
Describir las implementaciones de
Listas:
Para representar en lenguaje C esta estructura de datos
se utilizarn punteros, un tipo de datos que suministra el
lenguaje. Se representar una lista vaca con la constante
NULL. Se puede definir la lista enlazada de la siguiente
manera:
struct lista
{
int clave;
struct lista *sig;
};

Describir las implementaciones
de Listas:
e1.- Vectores








Utilizando una estructura de datos esttica arreglo para representar e
implementar el TDA LISTAS. Asumamos que los ELEMENTOS que
contiene la LISTA son representados por el tipo ENTERO. La cantidad de
ELEMENTOS que puede contener la LISTA tiene un mximo de n
ELEMENTOS. Por lo que la representacin formal de este tipo se define
de la siguiente manera: Tipo LISTA= arreglo [1..n] de ENTEROS; VarL :
LISTA;

18/11/2013
20
Implementacin Procedimiento: Operaciones bsicas

LISTA_VACA (Var L :LISTA)
var i : ENTERO;
principio
Para i := 1 hasta n hacer L[ i ]:= 0;
fin;

Funcin ES_VACA(L :LISTA) : LGICO
principio
Si L[ 1 ] = 0 entonces ES_VACA := Verdad
Sino ES_VACA := Falso;
Fin;

Describir las implementaciones
de Listas:
Procedimiento Insertar (Var L :LISTA, p: POSICIN, e :
ENTERO)
var i : ENTERO;
principio
Si L [p] <> 0 entonces mientras (i <=n) y ( L [i ] <> 0 )
hacer
principio
sig := l[p]; l[i] := e; e := sig;
fin;
l [ i ] := e;
fin;

Describir las implementaciones
de Listas:
18/11/2013
21
e2.- Listas doblemente enlazadas

Una lista enlazada es una de las estructuras de
datos fundamentales, y puede ser usada para implementar
otras estructuras de datos. Consiste en una secuencia de nodos,
en los que se guardan campos de datos arbitrarios y una o
dos referencias (punteros) al nodo anterior o posterior.

El principal beneficio de las listas enlazadas respecto a
los array convencionales es que el orden de los elementos
enlazados puede ser diferente al orden de almacenamiento en
la memoria o el disco, permitiendo que el orden de recorrido de
la lista sea diferente al de almacenamiento.

Describir las implementaciones
de Listas:
Son listas que tienen un enlace con el elemento siguiente y
con el anterior. Una ventaja que tienen es que pueden
recorrerse en ambos sentidos, ya sea para efectuar una
operacin con cada elemento o para insertar/actualizar y
borrar.
La otra ventaja es que las bsquedas son algo ms rpidas
puesto que no hace falta hacer referencia al elemento
anterior. Su inconveniente es que ocupan ms memoria por
nodo que una lista simple.



Describir las implementaciones de
Listas:
18/11/2013
22

Mecanismos para implementar las
listas.
En el lenguaje C se utiliza los llamados punteros para
representar esta estructura de datos.

En java se encuentra un paquete completo en java.util de
donde se pueden utilizar las listas, como un tipo abstracto
de datos, este tipo de estructura de datos tambin se utiliza
a partir y/o como una interfaz.



18/11/2013
23
Con relacin a la Estructura PILA:
Indicar objetos reales que se puedan modelar con
dicha estructura.
Memoria de una pc
Caja de objetos


Definiciones de Pila.

Una pila es un caso especial de lista en la cual todas
las inserciones y supresiones tienen lugar en un
extremo determinado llamado tope.


18/11/2013
24
Definiciones de Pila.
A las pilas se les llama tambin listas LIFO (last-in first-out) o
listas primero en entrar, primero en salir. En el TDA Pila no se
definen operaciones de posicionamiento en la pila. Esto es
debido a que todas las operaciones de acceso se realizan en la
misma posicin, el tope de la pila.

TAD que modele las PILAS.
Nombre: TAD Pila
Invariante: n<>0
Operaciones:

crearPila()
*/ Devuelve un valor del tipo pila preparado para ser usado y
que contiene un valor de pila vaca. Esta operacin es la
misma que la de las listas generales.*/
Precondiciones: N=0
Pos condiciones: pila creada
18/11/2013
25
insertarPila(crearPila)
*/ mediante este mtodo se insertan datos a la pila ya
creada. Con las pilas se usa el mtodo push para insertar*/
Precondiciones: pila <> null
Pos condiciones: insertarPila completado (datos
insertados en pila)

borrarPila()
*/con este mtodo se elmina cierta pila de datos */
Precondiciones: pila <> null
Pos condiciones: pila eliminada


18/11/2013
26
Con relacin a la Estructura
COLA:
Varias definiciones Cola.

Una cola es una estructura de datos, caracterizada por ser una
secuencia de elementos en la que la operacin de insercin push se
realiza por un extremo y la operacin de extraccin pop por el otro.
Tambin se le llama estructura FIFO (del ingls First In First Out),
debido a que el primer elemento en entrar ser tambin el primero
en salir.

Una cola es tambin una estructura de datos lineal en donde las
eliminaciones se realizan por uno de sus extremos que normalmente
se llama frente, y las inserciones se realizan por el otro extremo que
normalmente se llama final. A estas estructuras se les llama FIFO
(First In First Out).


18/11/2013
27
TAD que modele las COLAS.
Nombre: TAD COLA
Invariante: n/a
Operaciones:

crearCola()
*/ Devuelve un valor del tipo cola preparado para ser usado y
que contiene un valor de pila vaca. Esta operacin es la
misma que la de las listas generales.*/
Precondiciones: N=0
Pos condiciones: cola vacia creada

insertarCola(crearCola)
*/ mediante este mtodo se insertan datos a la cola
ya creada. */
Precondiciones: cola <> null
Pos condiciones: datos insertados en cola, cola
insertada.

borrarCola()
*/con este mtodo se elmina cierta cola de datos
*/
Precondiciones: cola != 0
Pos condiciones: cola eliminada

18/11/2013
28
Particularidades de un TAD COLA
con prioridades.

Se introduce una forma de simular genericidad en los TADs de
Modula-2 mediante el uso del TAD ITEM.

En una cola de prioridad los elementos estn ordenados
dependiendo de su prioridad, de manera que est disponible
(para las operaciones Frente y Extraer) el elemento de mxima
prioridad. En caso de igualdad se sigue la regla FIFO, de dos
elementos con igual prioridad sale primero el que primero
entr. Esto se puede conseguir bien insertando
ordenadamente y extrayendo el primer elemento, bienDpto
Implementaciones de COLAS con
vectores circulares
public class Cola {
private static int max = 100;
private Object elementos[];
private int frente, post;
} // fin clase Cola


18/11/2013
29

You might also like