You are on page 1of 62

UNIVERSIDAD DE AQUINO BOLIVIA UDABOL - ORURO

ESTUDIANTES: BENITO HERRERA MARCOS MIGUEL. GONZALES MARTINEZ ADELIO. MAMANI CORDEL ALVARO. MAMANI GERONIMO WILDER. TOCO TICONA CELZO. CARRERA: INGENIERIA DE SISTEMAS. SEMESTRE: TERCER. GESTION: 2012

En programacin, una estructura de datos es una

forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin interrelacin de estos y un conjunto de operaciones que se pueden realizar sobre ellos. OPERACIONES. Alta, baja, bsqueda, ordenamiento, modificar.

Su tamao y forma es constante durante la ejecucin de un

programa y por tanto se determinan en tiempo de compilacin. El ejemplo tpico son los arrays. VECTORES.Los vectores son estructuras de datos similares a los arreglos, pero ms desarrollados, ya que entre otras cosas, crecen y decrecen dinmicamente, segn se necesite. En algunos lenguajes, el tamao de un arreglo queda fijo en tiempo de compilacin. En otros lenguajes, la dimensin del arreglo, queda fijada en tiempo de ejecucin. No obstante, una vez fijada, no puede alterarse.

MATRICES

Una matriz (array en ingls) es un conjunto de elementos contiguos, todos del mismo tipo, que comparten un nombre comn y a los que es posible acceder mediante la posicin

APLICACIN: Por ejemplo, las notas correspondientes a las distintas evaluaciones realizadas a cada uno de los alumnos de un determinado curso forman una matriz, y la ficha que contiene los datos personales de cada uno de estos alumnos es un ejemplo de registro (o estructura).

Estructuras Dinmicas
Cambian de tamao durante la ejecucin del programa
Es imposible reservar una cantidad fija de

espacio de almacenamiento La reservacin de memoria y asignacin de direcciones se lleva a cabo mediante la asignacin dinmica de almacenamiento Uso de punteros

LINEALES: NO LINALES:

punteros
Gestin de memoria Operadores de referencia y de indireccin Los punteros son un instrumento para optimizar el cdigo en tiempos de ejecucin y en gestiones de memoria Los punteros es una variable que contiene la direccin de otra variable

Variable=x
Puntero=25
1 2 3 a b c

25

El puntero permite dos operaciones con respecto a una

variable

--Operador(&) --Operador(*)

El operador & se denomina operador de referencia.

Cuando aplicamos este operador a una variable tomamos su direccin. EJEMPLO (ip0&x) /*ip apunta a x*/

Ejemplo operador &


//*operador &// #include <iostream.h> Int main (void) { Int x=1; Int *ip; Ip=&x

Cout<<la variable x=<<x<<y esta en la posicin de memoria <<ip<<endl; }

El operador* se denomina operador de indireccin cuando

se aplica a un puntero nos da el valor de la direccin a la que apuntaba EJEMPLO (y=*ip) */valor de la variable y, con valor asignado por ip = valor de variable x*/

Ejemplo operador * //*operador *//


#include <iostream.h> Int main (void) { Int x=1; Ip=&x; Int y=0; Y=*ip;

Y+=1;
Cout<<la variable x=<<x<< y la variable y=<<y<<endl; }

Listas

Listas Arrays Listas son flexibles y permiten cambio de implementacin Operaciones Insertar, Borrar, Modificar, etc. Tipos de listas Simples Ordenadas Pilas Colas Doblemente enlazadas (LDE) Circulares

13

Definicin de la lista
Se compone de nodos enlazados.
Se debe hacer en una clase separada. Slo requiere conocer dnde se encuentra el primer nodo de

la lista. Para el nombre de la referencia al primer nodo se hace uso de la metfora: cabeza de la lista o inicio. Una lista vaca comenzara con un valor null en el campo sig (siguiente)

14

Qu es un Nodo?
Un nodo es un registro con varios campos: unos campos de datos y un campo apuntador. Los primeros son informacin y el ltimo es una referencia al

siguiente nodo de la lista. El ltimo nodo de la lista contiene una referencia siguiente "null".

15

Clase nodo
public class Nodo { int data; // almacena el dato Nodo sig; //liga al prximo nodo }
El campo data representa los datos que almacena el nodo. Puede ser de diferentes tipos de datos, adems que ste puede contener la cantidad de datos que se ocupen.

16

Listas

sig

sig

sig

17

Creacin de una lista


Lista vaca

18

Insercin de un nodo
CASO 1. Insercin al principio de la lista

19

Caso 1.

Insercin al principio

Insertarinicio (inicio, info) //este algoritmo inserta un nodo al inicio de la lista// (nuevo: del tipo inicio) 1- crear (nuevo); 2- hacer nuevo.dato = info nuevo.sig = inicio inicio = nuevo

20

Caso 2.

Insercin en medio de la lista

Caso 2.1 Insertar antes de

Caso 2.2 Insertar despus de

inicio

aux
Ref

nuevo
21

info

Caso 2.1

Insertar antes de

InsertAntes (inicio, info, ref) //aux,nuevo,T son variables de tipo inicio. OK es una variable boolean 1- hacer aux = inicio, Ok = verdadero 2- mientras (aux.dato != ref) y (Ok == verdadero) Si aux.sig != null T = aux, aux = aux.sig. Sino OK = falso 3- Si Ok = = verdadero //se encontr el dato Crear (nuevo) nuevo.dato = info nuevo.sig =aux Si aux = = inicio //es el primer nodo entonces inicio = nuevo si no T.sig = nuevo

22

Caso 2.2

InsertDespues

InsertDespues (inicio, info, Ref) //nuevo y aux so n variables del tipo de inicio, OK es boolean 1- aux = inicio, OK = verdadero 2- Mientras (aux.dato != ref) y (OK == verdadero) hacer si aux.sig != null entonces aux = aux.sig si no OK = Falso 3- Si OK = = verdadero entonces crear (nuevo) nuevo.dato = info nuevo.sig = aux.sig aux.sig = nuevo

23

Caso 3. Insercin al final de la lista

Insertafinal (inicio, info) // nuevo y T son del tipo inicio


1- Hacer T = inicio 2- mientras T.sig != null recorrer la lista hasta llegar al final 3- Crear (nuevo) 4- nuevo.dato = info nuevo.sig = null T.sig = nuevo
24

Eliminar Nodos
Casos 1 Eliminar el primer nodo

Elimina primero (inicio)


// Se redefine el apuntador inicio. //aux es del tipo inicio

1- hacer Q = inicio; 2- Si aux.sig != null


//que si hay mas de un elemento

inicio = aux.sig Sino inicio = null 3- aux = null //quita 25 aux

Entonces

Caso 2.1 Elimina nodo con X informacin


EliminaNodoX (inicio, x) //aux y T son variables del mismo tipo de inicio, Ok es boolean 1- Hacer aux = inicio , Ok = verdadero 2- Repetir mientras (aux.dato != x) y (Ok) hacer Si aux.sig != null //hay ms nodos entonces T = aux, aux = aux.sig si no Ok = falso 3- Si Ok == falso entonces //el elemento x no existe si no si inicio == aux //x es el primer elemento de la lista entonces inicio = aux.sig si no T.sig = aux.sig aux = null 26

Caso 2 Eliminar en medio

Caso 2.2 Elimina nodo antes de X informacin


inicio
R T

aux
X

Algoritmo EliminaAntesX (inicio, x) //aux , T y R son variables del mismo tipo de inicio (apuntador), Ok es boolean 1- Si inicio.dato == x entonces //no hay nodo que precede a x sino aux = inicio; T = inicio; Ok = falso; mientras (( aux.info!=x) y (!Ok)) si aux.sig != null entonces R = T; T = aux; aux= aux.sig; si no Ok = verdadero; 2- Si Ok entonces //el elemento x no existe si no si inicio.sig = aux //el elemento a eliminar es el primero entonces inicio = aux sino R.sig = aux; T = null;
27

Caso 3 Elimina ultimo nodo

Elimina ultimo (inicio) //Se pone un null en el campo sig del penltimo elemento y se quita el ultimo. //aux, T son del mimo tipo que inicio 1. Si inicio.sig == null //que la lista tiene un solo elemento Entonces inicio = null //quita (inicio) Si no aux = inicio 2. Mientras aux.sig != null hacer T = aux aux = aux.sig 3. T.sig = null //quita T aux = 28 null //quita aux

Recorrido de una lista dinmica


Metodo Correlista (Nodo inicio); //imprime cada dato de la lista { nodo aux = new nodo(); aux = inicio; while (aux.sig != null) { escribir (aux.dato); aux = aux.sig; } }
29

Buscar un nodo con alguna caracterstica


Mtodo Busca (Nodo inicio, info){ //Devuelve exito con falso o verdadero nodo aux = new nodo(); boolean exito = falso aux = inicio; while (aux.sig != null && aux.dato != info) aux = aux.sig; if ( aux.dato = = info ) exito = verdadero; return exito }
30

31

Nodo

public class Nodo { private int data; // al macena el dato private Nodo sig; //liga al prximo nodo private Nodo ant; // liga al anterior nodo }
ant
sig

32

Operaciones de una lista doblemente enlazada


Aadir o insertar elementos.
Buscar elementos. Borrar elementos.

Moverse a travs de la lista, siguiente y anterior.

sig ant

Inicio
33

fin

Aadir elemento a una lista vaca

1-nodo = anterior y nodo=siguiente a NULL.

34

Insertar nuevo nodo


Caso 1 Insertar nodo en la primera posicin
Nuevo nodo

insertaNodo( nodo) 1-. Nodo=siguiente // debe apuntar a Lista. 2-. Nodo=anterior y Lista=anterior. 3-. Lista=anterior //debe apuntar a nodo.
null 1 2 Dato 3
35

Dato

Dato

Caso 2 Insertar un elemento en la ltima posicin

InsertarUltimo(nodo) 1-. Nodo=siguiente y Lista=siguiente (NULL). 2-. Lista=siguiente // debe apuntar a nodo. 3-. Nodo=anterior //apuntar a Lista.
2 Dato Dato Dato 1 3 Dato null

36

Caso 3 Insertar un nodo en medio.

InsertarMedio (nodo ) 1-. Nodo=siguiente apunte a lista=siguiente. 2-. Lista=siguiente //apunte a nodo. 3-. Nodo=anterior //apunte a lista. 4-. Nodo=siguiente=anterior // apunte a nodo.
Dato Dato 3
37

4 2 Dato

Dato 1

null

Eliminar
Caso 1 Eliminar el nico nodo
En este caso, ese nodo ser el apuntado por Lista. 1-. Eliminamos el nodo. 2-. Hacemos que Lista apunte a NULL.

38

Caso 2
Caso 2.1Eliminar el primer nodo

eliminaPrimer( nodo) 1-. Si nodo apunta a Lista // hacemos que Lista apunt Lista=siguiente. 2-. Hacemos que nodo=siguiente=anterior// apunte a NULL 3-. Borramos el nodo apuntado por nodo.

39

Caso 2.2 Eliminar un nodo intermedio

eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo

40

Caso 3 Eliminar el ltimo nodo

eliminaUltimo(nodo) 1-. Si nodo apunta a Lista Lista=anterior. 2-nodo=anterior=siguiente apunte a NULL 3-. Borramos el nodo apuntado por nodo.

41

42

Circular
Una lista circular es una lista lineal en la que el ltimo

nodo a punta al primero.

inicio

fin

43

Operaciones de una lista circular


las operaciones que se pueden realizar sobre las listas circulares :
Aadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a travs de la lista

44

Insertar un elemento
Insertar elemento en la lista vaca

lista apunta a nodo. lista->siguiente apunte a nodo.

Insertar elemento en una lista no vaca


1. 2.

Hacemos que nodo = siguiente apunte a lista = siguiente. Despus que lista = siguiente apunte a nodo.

45

Eliminar un elemento de la lista Eliminar el nico nodo de la lista.


1. 2. 3.

lista = siguiente mientras lista = siguiente sea distinto de nodo. Hacemos que lista = siguiente apunte a nodo = siguiente. Eliminamos el nodo.

1. 2.

Eliminar un nodo en una lista circular con ms de un elemento


Borramos el nodo apuntado por lista. Hacemos que lista valga NULL.

46

Eliminar un elemento de la lista

Caso general
1. 2. 3. 4.

Copiamos el contenido del nodo = siguiente sobre el contenido de nodo. Hacemos que nodo = siguiente apunte a nodo = siguiente = siguiente. Eliminamos nodo = siguiente. Si lista es el nodo = siguiente, hacemos lista = nodo.

47

Una pila (stack en ingls) es una lista ordinal o

estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informtica debido a su simplicidad y ordenacin implcita en la propia estructura

Ejemplos:
Pila de platos Pila de discos

Ejemplo
Insertar Inicio: A: Insertar B: Insertar C: Eliminar elemento

C B A A B A B A

Tope

-1

Tope

Tope

Tope

Tope

COLAS
DEFINICION: Es un tipo especial de lista abierta en la

que puede insertar nodos en uno de los extremos de la lista y solo se puede eliminar nodos en el otro. El primero en entrar es el primero en salir OPERACIONES BASICAS CON COLAS:
Aadir: Inserta un elemento al final de la cola Leer :Lee y elimina un elemento del principio de la cola

ARBOLES
DEFINICION : Un rbol es una estructura no lineal en la

que cada nodo puede apuntar a uno o mas nodos. EN CUANTO A LA POSICION :
Nodo raz.

Nodo.
Nodo hoja.

EN CUANTO A SU TAMAO : Camino. Enlace entre dos elementos Nivel. Longitud de cada camino Peso. Nmeros de terminales Altura. Numero mximo de una rama

ARBOLES
ARBOLES BINARIOS :Son arboles en la que cada

nodo puede tener solo dos ramificaciones o hijos. El rbol binario es un conjunto de nodos, que consta de un nodo raz enlazada a dos arboles binarios disjuntos, denominados sub rbol izquierdo y sub rbol derecho y que cada uno de estos sub arboles llegan a ser arboles.

Desafortunadamente no existe una terminologa estandarizada en la teora de los grafos, por lo tanto es oportuno aclarar que las presentes definiciones pueden variar, pero en general se puede decir que un grafo como indica su nombre es la representacin. * Por ejemplo: Tambin un grafo es una terna G = ( V, A, j ), en donde V y A son conjuntos finitos, y j es una aplicacin que hace corresponder a cada elemento de A un par de elementos de V. Los elementos de V y de A se llaman, respectivamente, "vrtices" y "aristas" de G, y j asocia entonces a cada arista con sus dos vrtices.

5.6.1.-ARISTAS
Son las lneas con las que se unen las aristas de un grafo y con la que se construyen tambin caminos. Si la arista carece de direccin se denota indistintamente {a, b} o {b, a}, siendo a y b los vrtices que une. Si {a ,b} es una arista, a los vrtices a y b se les llama sus extremos. * Aristas Adyacentes: Se dice que dos aristas son adyacentes si convergen en el mismo vrtice. * Aristas Paralelas: Se dice que dos aristas son paralelas si vrtice inicial y el final son el mismo. * Aristas Cclicas: Arista que parte de un vrtice para entrar en el mismo. * Cruce: Son dos aristas que cruzan en un punto.

5.6.2.- VRTICES
Son los puntos o nodos con los que est conformado un grafo. Llamaremos grado de un vrtice al nmero de aristas de las que es extremo. Se dice que un vrtice es `par' o `impar' segn lo sea su grado. * Vrtices Adyacentes: si tenemos un par de vrtices de un grafo (U, V) y si tenemos un arista que los une, entonces U y V son vrtices adyacentes y se dice que U es el vrtice inicial y V el vrtice adyacente. * Vrtice Aislado: Es un vrtice de grado cero. * Vrtice Terminal: Es un vrtice de grado 1.

5.6.3.- CAMINOS
Sean x, y " V, se dice que hay un camino en G de x a y si existe una sucesin finita no vaca de aristas {x,v1}, {v1,v2},..., {vn, y}. En este caso x e y se llaman los extremos del camino El nmero de aristas del camino se llama la longitud del camino. Si los vrtices no se repiten el camino se dice propio o simple. Si hay un camino no simple entre 2 vrtices, tambin habr un camino simple entre ellos. Cuando los dos extremos de un camino son iguales, el camino se llama circuito o camino cerrado. Un vrtice a se dice accesible desde el vrtice b si existe un camino entre ellos. Todo vrtice es accesible respecto a si mismo.

5.6.4.- CLASIFICACIN DE GRAFOS


Los grafos se pueden clasificar en

dos grupos: dirigidos y no dirigidos. En un grafo no dirigido el par de vrtices que representa un arco no est ordenado. Por lo tanto, los pares (v1, v2) y (v2, v1) representan el mismo arco. En un grafo dirigido cada arco est representado por un par ordenado de vrtices, de forma que y representan dos arcos diferentes.

5.6.5.- GRAFOS EULERIANOS


Para definir un camino euleriano o desconectado es

importante definir un camino euleriano primero. Un camino euleriano se define de la manera ms sencilla como un camino que contiene todos los arcos del grafo. Teniendo esto definido podemos hablar de los grafos eulerianos describindolos simplemente como aquel grafo que contiene un camino euleriano. El primer grafo de ellos no contiene caminos eulerianos mientras el segundo contiene al menos uno.

5.6.6.-GRAFOS CONEXOS
Un grafo se puede definir como conexo o complejos si cualquier vrtice V pertenece al conjunto de vrtices y es alcanzable por algn otro. Otra definicin que dejara esto ms claro sera: "un grafo conexo es un grafo no dirigido de modo que para cualquier par de nodos existe al menos un camino que los une.

REPRESENTACIN MEDIANTE MATRICES

La forma ms fcil de guardar la informacin de los nodos es mediante la utilizacin de un vector que indexe los nodos, de manera que los arcos entre los nodos se pueden ver cmo relaciones entre los ndices. Esta relacin entre ndices se puede guardar en una matriz, que llamaremos de adyacencia. 1 si existe arista (Vi, Vj ) Vi es adyacente Vj M( i, j ) = 0 en caso contrario Las columnas y las filas da la matriz representan los vrtices del grafo.

REPRESENTACIN DE GRAFOS Hay tres maneras de representar un grafo en un programa: mediante matrices, mediante listas y mediante matrices dispersas.
APLICACIONES

Una de las aplicaciones ms importantes es de hallar el camino ms corto hacia un destino, ya sea de una ciudad a otra, de unos departamentos a otros.

You might also like