Professional Documents
Culture Documents
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
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.
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
variable
--Operador(&) --Operador(*)
Cuando aplicamos este operador a una variable tomamos su direccin. EJEMPLO (ip0&x) /*ip apunta a x*/
//*operador &// #include <iostream.h> Int main (void) { Int x=1; Int *ip; Ip=&x
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*/
#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
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.
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
Eliminar Nodos
Casos 1 Eliminar el primer nodo
Entonces
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
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
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
sig ant
Inicio
33
fin
34
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
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
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
eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo
40
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
inicio
fin
43
44
Insertar un elemento
Insertar elemento en la lista vaca
Hacemos que nodo = siguiente apunte a lista = siguiente. Despus que lista = siguiente apunte a nodo.
45
lista = siguiente mientras lista = siguiente sea distinto de nodo. Hacemos que lista = siguiente apunte a nodo = siguiente. Eliminamos el nodo.
1. 2.
46
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
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.
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.
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.
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.