Sei sulla pagina 1di 19

COORPORATIVO INTERNACIONAL UNIVERSITARIO

EDUARDO JIMENEZ ACOSTA

GABRIEL FLORES GONZALES

SEGUNDO CATRIMESTRE

LIC. INFORMATICA

INDICE: 2. ESTRUCTURAS LINEALES 2.1 pilas 2.2 colas 2.3 dobles colas 2.4 listas generalizadas. 3 .ALGORITMOS PARA MANIPULAR LISTAS. 3.1 organizacin de lista lineales 3.1.1 arreglos 3.1.2listas ligadas simples 3.1.3 listas doble mente ligada 3.2 mtodos de proceso 3.3 aplicacin de listas lineales 4 .ALGORITMOS PARA MANIPULAR ARBOLES 4.1arboles binarios 4.2viaje por arboles binarios

4.3 estructuras generales 4.4 aplicaciones de arboles y estructuras generales 5. GRAFOS Y SUS APLICACIONES 5.1terminologia de teora de grafos 5.2 caminos mnimos 5.3operaciones y recorridos. 6. ORDENACION Y BUSQUEDA 6.1 Ordenacin por insercin 6.2Ordenacion por seleccin 6.3Busqueda modificacin de datos 6.4 Bsqueda de hash

ESTRUCTURAS LINEALES DE DATOS Esta seccin est orientada a comprender y manejar las estructuras lineales de datos, teniendo en cuenta la representacin lgica y fsica de las mismas y el lenguaje de programacin Utilizado. Se caracterizan porque sus elementos estn en secuencia, Relacionados en forma lineal, uno luego del otro. Cada elemento de la estructura puede estar Conformado por uno o varios subelementos o campos que pueden pertenecer a cualquier tipo de dato, pero que normalmente son tipos bsicos. PILAS. 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. Esta estructura se aplica en multitud de ocasiones en el rea de informtica debido a su simplicidad y ordenacin implcita de la propia estructura. Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un objeto en la pila, y su operacin inversa, retirar (o desapilar, pop), que retira el ltimo elemento apilado. En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al ltimo objeto apilado (denominado TOS, Top of Stack en ingls). La operacin retirar permite la obtencin de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS. Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar un plato sobre una pila de platos, y una operacin retirar a retirarlo. Las pilas suelen emplearse en los siguientes contextos:

Evaluacin de expresiones en notacin postfija (notacin polaca inversa). Reconocedores sintcticos de lenguajes independientes del contexto Implementacin de recursividad.

COLAS Una cola (tambin llamada fila) 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. Las colas se utilizan en sistemas informticos, transportes y operaciones de investigacin (entre otros), dnde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas. DOBLES COLAS La bicola o doble cola es un tipo de cola especial que permiten la insercin y eliminacin de elementos de ambos extremos de la cola. Puede representarse a partir de un vector y dos ndices, siendo su representacin ms frecuente una lista circular doblemente enlazada. Todas las operaciones de este tipo de datos tienen coste constante. fmod COLA-DOBLE {X :: TRIV} is protecting NAT . sorts ColaDobleNV{X} ColaDoble{X} . subsort ColaDobleNV{X} < ColaDoble{X} . ***generadores op crear : -> ColaDoble{X} [ctor] . op encolarIzq : X$Elt ColaDoble{X} -> ColaDobleNV{X} [ctor] . ***constructores op encolarDch : X$Elt ColaDoble{X} -> ColaDobleNV{X} . op extraerIzq : ColaDoble{X} -> ColaDoble{X} . op extraerDch : ColaDoble{X} -> ColaDoble{X} . ***selectores op frenteIzq : ColaDobleNV{X} -> X$Elt . op frenteDch : ColaDobleNV{X} -> X$Elt .

vars E E1 E2 : X$Elt . vars C : ColaDoble{X} . vars CNV : ColaDobleNV{X} . eq encolarDch(E, crear) = encolarIzq (E, crear) . eq encolarDch(E1, encolarIzq(E2, C)) = encolarIzq(E2, encolarDch(E1, C)) . eq extraerIzq(crear) = crear . eq extraerIzq(encolarIzq(E, C)) = C . eq extraerDch(crear) = crear . eq extraerDch(encolarIzq(E, crear)) = crear . eq extraerDch(encolarIzq(E, C)) = encolarIzq(E, extraerDch(C)) . eq frenteIzq(encolarIzq(E, C)) = E . eq frenteDch(encolarIzq(E, crear)) = E . eq frenteDch(encolarIzq(E, CNV)) = frenteDch(CNV) . endfm LISTAS GENERALIZADAS Una lista enlazada es una estructura de datos en la cual los objetos estn organizados linealmente. Listas enlazadas proveen una forma simple de estructurar conjuntos dinmicos de datos. Una lista puede tener diferentes formas, puede ser enlazada simple, doblemente enlazada, ordenada o circular. Una lista generalizada, A, es una secuencia finita de n! 0 elementos, !1, . . . , !n, donde !i es un Elemento tomo o una lista. Si es una lista, se llama sablista de A. Si n ! 1,entonces !1 se dice la cabeza de A y el resto la cola. Ejemplos: A = (a,(b,c)) B = (A,A,()) C = (a,C) Consecuencias: Listas generalizadas pueden ser compartidas o pueden ser recursivas. ORGANIZACIN DE LISTA LINEALES

Lista Lineal Una misma definicin de un TDA puede conllevar a implementaciones diferentes en dependencia de las necesidades, as como de las caractersticas del lenguaje en el que se va a desarrollar dicha implementacin. Por su forma de almacenamiento, la lista lineal se puede implementar en una de las siguientes disposiciones: Secuencial Enlazada. ARREGLOS Lista Lineal Una misma definicin de un TDA puede conllevar a implementaciones diferentes en dependencia de las necesidades, as como de las caractersticas del lenguaje en el que se va a desarrollar dicha implementacin. Por su forma de almacenamiento, la lista lineal se puede implementar en una de las siguientes disposiciones: Secuencial Enlazada. LISTAS LIGADAS SIMPLES. Son de acceso o procesamiento secuencial y suelen ser pilas o colas. Son las ms sencillas y responden a la descripcin general que se ha hecho para los ficheros secuenciales encadenados. LISTAS DOBLEMENTE LIGADAS Es una coleccin de nodos en la cual cada nodo tiene dos punteros, uno de ellos apuntando a su predecesor (li) y otro a su sucesor (ld). Por medio de estos punteros se podr avanzar o retroceder a travs de la lista, segn se tomen las direcciones de uno u otro puntero. Existen dos tipos de listas doblemente ligadas: Listas dobles lineales. En este tipo de lista doble, tanto el puntero izquierdo del primer nodo como el derecho del ltimo nodo apuntan a NIL o NULL. Listas dobles circulares. En este tipo de lista doble, el puntero izquierdo del primer nodo apunta al ltimo nodo de la lista, y el puntero derecho del ltimo nodo apunta al primer nodo de la lista. Importancia: Nos permite almacenar datos de una forma organiza

Es una estructura TDA dinmica cada nodo de la lista doblemente enlazada contiene dos punteros, de forma que uno apunta al siguiente nodo y el otro al predecesor.( permite que se pueda recorrer la lista en ambos sentidos)

METODO DE PROCESO Dos o ms procesos pueden cooperar mediante seales de forma que uno obliga a detenerse a los otros hasta que reciban una seal para continuar.

Se usa una variable de tipo semforo para sincronizar los procesos. Si un proceso est esperando una seal, se suspende hasta que la seal se enve. Se mantiene una cola de procesos en espera en el semforo. La forma de elegir los procesos de la cola en espera es mediante una poltica first in first out. Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador. Su estado de ejecucin en un momento dado, esto es, los valores de los registros de la unidad central de procesamiento para dicho programa. Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos. Otra informacin que permite al sistema operativo su planificacin.

Un proceso es un programa en ejecucin. Los procesos son gestionados por el sistema operativo y estn formados por:

Esta definicin vara ligeramente en el caso de sistemas operativos multihilo, donde un proceso consta de uno o ms hilos, la memoria de trabajo (compartida por todos los hilos) y la informacin de planificacin. Cada hilo consta de instrucciones y estado de ejecucin. Los procesos son creados y destruidos por el sistema operativo, as como tambin este se debe hacer cargo de la comunicacin entre procesos, pero lo hace a peticin de otros procesos. El mecanismo por el cual un proceso crea otro

proceso se denomina bifurcacin (fork). Los nuevos procesos pueden ser independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria. APLIACCION DE LISTA LINALES Una lista lineal 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 vectores 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. Una lista enlazada es un tipo de dato auto-referenciado porque contienen un puntero o link a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminacin de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto est previamente identificado o localizado), pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares. RBOLES BINARIOS Se definir el rbol con una clave de tipo entero (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con los hijos se utilizan punteros. El rbol vaco se representar con un puntero nulo. Un rbol binario puede declararse de la siguiente manera: typedef struct tarbol { int clave; struct tarbol *izq,*der; } tarbol; Otras declaraciones tambin aaden un enlace al nodo padre, pero no se estudiarn aqu. Tipos de rboles binarios

Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos.

Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura). A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n.

Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

VIAJES POR RBOLES BINARIOS Se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en anchura o a nivel. Puesto que los rboles no son secuenciales como las listas, hay que buscar estrategias alternativas para visitar todos los nodos. - Recorridos en profundidad: * Recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y despus visitar el subrbol izquierdo y una vez visitado, visitar el subrbol derecho. Es un proceso recursivo por naturaleza. Si se hace el recorrido en preorden del rbol de la figura 1 las visitas seran en el orden siguiente: a,b,d,c,e,f. void preorden(tarbol *a) { if (a != NULL) { visitar(a); preorden(a->izq); preorden(a->der); } }

* Recorrido en inorden u orden central: se visita el subrbol izquierdo, el nodo actual, y despus se visita el subrbol derecho. En el ejemplo de la figura 1 las visitas seran en este orden: b,d,a,e,c,f. void inorden(tarbol *a) { if (a != NULL) { inorden(a->izq); visitar(a); inorden(a->der); } } * Recorrido en postorden: se visitan primero el subrbol izquierdo, despus el subrbol derecho, y por ltimo el nodo actual. En el ejemplo de la figura 1 el recorrido quedara as: d,b,e,f,c,a. void postorden(arbol *a) { if (a != NULL) { postorden(a->izq); postorden(a->der); visitar(a); } } La ventaja del recorrido en postorden es que permite borrar el rbol de forma consistente. Es decir, si visitar se traduce por borrar el nodo actual, al ejecutar este recorrido se borrar el rbol o subrbol que se pasa como parmetro. La razn para hacer esto es que no se debe borrar un nodo y despus sus subrboles, porque al borrarlo se pueden perder los enlaces, y aunque no se perdieran se rompe con la regla de manipular una estructura de datos inexistente. Una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este recorrido. ESTRUCTURAS GENERALES Es la disposicin y orden de las partes dentro de un todo. Tambin puede entenderse como un sistema de conceptos coherentes enlazados, cuyo objetivo es precisar la esencia del objeto de estudio. Tanto la realidad como el lenguaje

tienen estructura. Uno de los objetivos de la semntica y de la ciencia consiste en que la estructura del lenguaje refleje fielmente la estructura de la realidad. En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mnima informacin que se tiene en el sistema) con el objetivo de facilitar la manipulacin o gestin de dichos datos como un todo, ya sea de manera general o particularmente. Estructuras de control En programacin, las estructuras de control permiten modificar el flujo de ejecucin de las instrucciones de un programa. Con las estructuras de control se puede ejecutar instrucciones de forma condicionada.

TERMINOLOGIA DE TEORIA DE GRAFOS En matemticas y en ciencias de la computacin, la teora de grafos (tambin llamada teora de las grficas) estudia las propiedades de los grafos (tambin llamadas grficas). Un grafo es un conjunto, no vaco, de objetos llamados vrtices (o nodos) y una seleccin de pares de vrtices, llamados aristas (edges en ingls) que pueden ser orientados o no. Tpicamente, un grafo se representa mediante una serie de puntos (los vrtices) conectados por lneas (las aristas).

Diagrama de un grafo con 6 vrtices y 7 aristas. La teora de grficas o teora de grafos es aplicada en una gran cantidad de reas tales como ciencias sociales, lingstica, ciencias fsicas, ingeniera de comunicacin, y otras. La teora de grafos tambin juega un papel importante en varias reas de la ciencia de la computacin, tales como teora de cambio y lgica de diseo, inteligencia artificial, lenguajes formales, grficos por computadora, sistemas operativos, compiladores, y organizacin y recuperacin de informacin. La terminologa usada en la teora de grafos no es estndar, En esta seccin debemos definir un grafo como un sistema matemtico abstracto.

CAMINOS MINIMOS Teniendo como entrada la matriz W se calculan las matrices D(1), D(2) , ..., D(n-1) , donde m = 1, 2, ..., (n-1), la matriz D(n-1) contiene los pesos del C+C actual y D(1) = W.

En la teora de los grafos, el problema de los caminos ms cortos es el problema que consiste en encontrar un camino entre dos vrtices (o nodos) de tal manera que la suma de los pesos de las aristas que lo constituyen es mnima. Un ejemplo es encontrar el camino ms rpido para ir de una ciudad a otra en un mapa. En este caso, los vrtices representan las ciudades, y las aristas las carreteras que las unen, cuya ponderacin viene dada por el tiempo que se emplea en atravesarlas. Un camino en un grafo es una sucesin finita en la que aparecen alternadamente vrtices y aristas de dicho grafo. Otras definiciones bsicas son:

Los extremos son los vrtices iniciales y final del camino. La longitud de un camino es el nmero de aristas que contiene. Un camino es cerrado si sus extremos coinciden. Un camino es simple si en la sucesin de vrtices no hay ninguno repetido. Un ciclo es un camino cerrado donde los nicos vrtices repetidos son el primero y el ltimo. Un circuito es un camino cerrado que no repite aristas. Si en un grafo existe un camino que conecta dos vrtices distintos, entonces existe un camino simple con extremos en dichos vrtices. Un grafo es conexo si para cada par de vrtices, existe un camino con extremos en dichos vrtices.

OPERACIN Y RECORRIDOS El mtodo de este recorrido es tratar de encontrar de la cabecera a la raz en nodo de unidad binaria

ORDENACION Y BSQUEDA Uno de los procedimientos ms comunes y tiles en el procesamiento de datos, es la clasificacin u ordenacin de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada.

Cuando se analiza un mtodo de ordenacin, hay que determinar cuntas comparaciones e intercambios se realizan para el caso ms favorable, para el caso medio y para el caso ms desfavorable.

ORDENACION POR INSERCION El fundamento de este mtodo consiste en insertar los elementos no ordenados del arreglo en subarreglos del mismo que ya estn ordenados. Dependiendo del mtodo elegido para encontrar la posicin de insercin tendremos distintas versiones del mtodo de insercin. El algoritmo de insercin directa se mejora fcilmente al notar que la secuencia destino aj..ai-1, donde debe insertarse el nuevo elemento, ya est ordenada . Por eso puede ser empleado un mtodo ms rpido para determinar el punto de insercin. La eleccin obvia es una bsqueda binaria que prueba la secuencia destino en la mitad y contina buscando hasta encontrar el punto de insercin. El algoritmo de clasificacin modificado recibe el nombre de insercin. PROCEDURE Insercin; VAR i,j,m,L,R:index; x:item; BEGIN FOR i=2 TO n DO x=a[i]; L:=1; R:=i;

WHILE L<R DO m:=(L+R) DIV 2; IF a[m] <=x THEN L:=m+1 ELSE R:=m END END; FOR j=i TO R+1 BY -1 DO a[j]:=a[j-1] (*desplazamiento*) END; a[R]:=x(*insercin*) END Ejemplo: Supngase que estn almacenados cuatro nmeros en un arreglo con casillas de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente: Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los nmeros, se intercambian sus contenidos. Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario. Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario. Al final de la primera pasada, el mayor de los nmeros estar en x[4]. Ejemplo: Supngase que estn almacenados cuatro nmeros en un arreglo con casillas de memoria de x[1] a x[4]. Se desea disponer esos nmeros en orden creciente. La primera pasada de la ordenacin por burbujeo hara lo siguiente: Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los nmeros, se intercambian sus contenidos. Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario. Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario.

Al final de la primera pasada, el mayor de los nmeros estar en x[4].

ORDENACION POR SELECCIN. Los mtodos de ordenacin por seleccin se basan en dos principios bsicos: Seleccionar el elemento ms pequeo (o ms grande) del arreglo.

Colocarlo en la posicin ms baja (o ms alta) del arreglo. A diferencia del mtodo de la burbuja, en este mtodo el elemento ms pequeo (o ms grande) es el que se coloca en la posicin final que le corresponde. BUSQUEDA DE HASH En este mtodo se requiere que los elementos estn ordenados.
El mtodo consiste en asignar el ndice a cada elemento mediante una transformacin del elemento, esto se hace

mediante una funcin de conversin llamada funcin hash. Hay diferentes funciones para transformar el elemento y el nmero obtenido es el ndice del elemento. Es una situacin que se produce cuando dos entradas distintas a una funcin de hash producen la misma salida. Es matemticamente imposible que una funcin de hash carezca de colisiones, ya que el nmero potencial de posibles entradas es mayor que el nmero de salidas que puede producir un hash. Sin embargo, las colisiones se producen ms frecuentemente en los malos algoritmos. En ciertas aplicaciones especializadas con un relativamente pequeo nmero de entradas que son conocidas de antemano es posible construir una funcin de hash perfecta, que se asegura que todas las entradas tengan una salida diferente. Pero en una funcin en la cual se puede introducir datos de longitud arbitraria y que devuelve un hash de tamao fijo (como MD5), siempre habr colisiones, dado que un hash dado puede pertenecer a un infinito nmero de entradas. Clasificacin

Hashing Perfecto: Existe una Funcin de Enumeracin que asigna a cada valor del dominio una nica posicin de memoria. No posee colisiones. Hashing Puro: La funcin de Hash puede asignar a dos valores distintos el mismo valor hash. y h(x1) = h(x2). Estos dos valores reciben el nombre de sinnimos. Las estructuras de hashing puros poseen colisiones y en consecuencia se debern establecer mecanismos para tratar los mismos. Podemos clasificarlos en estructuras cerradas y abiertas y dentro de las abiertas en estticas y dinmicas:

Cerradas: No utilizan un nuevo espacio en memoria.

Abiertas: Utilizan espacio adicional.


Esttica: La estructura principal no crece. Dinmica: La estructura principal se expande a medida que aumenta la cantidad de elementos.

CONCLUSIONES Me sirvi haber investigado estos temas por que conoc temas nuevos y que son necesarios para conocer bien sobre informtica; y si me hacen preguntas sobre pilas, colas algoritmos, grafos, etc., sabr que contestar. Los temas estn muy interesantes por que hablan sobre sus significados y nos explican en partes como es la forma en que se escribe un cdigo. BIBLIOGRAFIA McCarthy, John (1960). Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I. Communications of the ACM. [1] HTML DVI PDF PostScript Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Sections 2.2.3 2.2.5, pp.254298. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 10.2: Linked lists, pp.204209.

Potrebbero piacerti anche