REPUBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA DE LA FUERZA ARMADA

CUIDAD BOLÍVAR – EDO BOLÍVAR

Profesora: ING Denis Acosta

Bachiller: Yusneydi González CI: 20.772.047 ADS #01-03

Junio, 12/2013

INDICE

Pg NTRODUCCIÓN……………………………………………………………………………………03 UNIDAD 6 ESTRUCTURA DINÁMICA DE DATOS ……………………………………04 6.1 PILAS: DEFINICIÓN Y OPERACIÓN SOBRE PILAS…………………………….05  Ejemplos  Pilas alojadas en arreglos.  Implantación de procedimiento recursivo mediante pilas. 6.2 COLAS: DEFINICIONES Y OPERACIONES CON COLAS………………………06  Ejemplo.  Colas circulares.  Doble cola.  Aplicaciones. 6.3 LISTAS: DEFINICIÓN, TIPOS Y OPERACIONES CON LISTA…………………07  Aplicaciones.  Representación  Ejemplos. 6.4 IMPLEMENTACIÓN DE LISTAS ENCADENADAS………………………………….08  Métodos de Inserción, Búsqueda. Unidad 7 Programación Avanzada. 7.1 CONCEPTO DE AVANZADOS……………………………………………………………09  Excepciones  Multithrading 7.2 FUNDAMENTOS DE LA PROGRAMACIÓN AVANZADA ORIENTADA A OBJETOS..10  Utilización de estructuras dinámicas de datos y operaciones de entrada/salida. CONCLUSION……………………………………………………………………………………………11 BIBLIOGRAFÍA…………………………………………………………………………………………..12 ANEXO………………………………………………………………………………………………………13

INTRODUCCIÓN
Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés 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 informática debido a su simplicidad y ordenación implícita de la propia estructura. Para el manejo de los datos se cuenta con dos
operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.

Una cola (también llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde 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. Es un TAD que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinámica, por lo que tenemos que saber “a priori” los elementos que pueden contener. Una lista se utiliza para almacenar información de mismo tipo, con la característica de que puede Contener un número indeterminado de elementos (mientras haya memoria) y que estos Elementos mantienen un orden explícito (al menos el de la forma en que se introducen en la lista). Este ordenamiento explicito implica que cada elemento mantiene un enlace al siguiente elemento.

Unidad 6: ESTRUCTURAS DINÁMICAS DE DATOS:  PILAS: DEFINICIÓN Y OPERACIONES SOBRE PILAS. Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés 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 informática debido a su simplicidad y ordenación implícita de la propia estructura. Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado. En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS.

EJEMPLO: Si tenemos un par de elementos en la pila, uno de ellos debe estar en la parte superior de la pila, que se considera ``el más alto'' en la pila que el otro. En la figura 9 el elemento F es el más alto de todos los elementos que están en la pila. El elemento D es el más alto de los elementos A,B,C, pero es menor que los elementos E y F.

Figura 9: Pila con 6 elementos

 PILAS ALOJADAS EN ARREGLOS: Resulta conveniente el almacenamiento secuencial para el tratamiento de pilas. Podemos tener una variable llamada TOPE que contenga el índice donde está ubicado

el tope de la pila. Cuando la pila está vacía, hacemos TOPE=0. Por ej.: podemos definir una constante llamada CANTELEMENTOS que tenga el valor máximo de elementos que podrá contener la pila, un tope con la última posición, un Valor a ser ingresado y el arreglo mismo: #define CANTELEMENTOS 10; int tope = -1; /*inicializamos a la variable tope con el valor –1 para que represente a la pila vacía porque el 1° elemento tiene índice 0.*/ int pila[CANTELEMENTOS]; int valor; Para darte un ejemplo sencillo: suponte que tienes una pila de 10 platos. El primer plato de la pila será el último en quitarse y el último plato de la pila será el primero en quitarse.

 IMPLANTACIÓN DE PROCESAMIENTO RECURSIVOS MEDIANTE PILAS: La recursividad es un concepto difícil de entender en principio, pero luego de analizar diferentes problemas aparecen puntos comunes. En Java los métodos pueden llamarse a sí mismos. Si dentro de un método existe la llamada a sí mismo decimos que el método es recursivo. Cuando un método se llama a sí mismo, se asigna espacio en la pila para las nuevas variables locales y parámetros. Al volver de una llamada recursiva, se recuperan de la pila las variables locales y los parámetros antiguos y la ejecución se reanuda en el punto de la llamada al método. Problema 1: Implementación de un método recursivo. Programa: public class Recursividad { void repetir() { repetir(); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.repetir()

La función repetir es recursiva porque dentro de la función se llama a sí misma. Cuando ejecuta este programa se bloqueará y generará una excepción: "Exception in thread "main" java.lang.StackOverflowError" Analicemos como funciona: Primero se ejecuta la función main, luego de crear un objeto llamamos a la función repetir. Hay que tener en cuenta que cada vez que se llama a una función se reservan 4 bytes de la memoria que se liberarán cuando finalice su ejecución. La primera línea de la función llama a la función repetir, es decir que se reservan 4 bytes nuevamente. Se ejecuta nuevamente una instancia de la función repetir y así sucesivamente hasta que la pila estática se colme y se cuelgue el programa. Problema 2: Implementación de un método recursivo que reciba un parámetro de tipo entero y luego llame en forma recursiva con el valor del parámetro menos 1. Programa: public class Recursividad { void imprimir(int x) { System.out.println(x); imprimir(x-1); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } } Desde la main se llama a la función imprimir y se le envía el valor 5. El parámetro x recibe el valor 5. Se ejecuta el algoritmo de la función, imprime el contenido del parámetro (5) y seguidamente se llama a una función, en este caso a sí misma (por eso decimos que es una función recursiva), enviándole el valor 4. El parámetro x recibe el valor 4 y se imprime en pantalla el cuatro, llamando nuevamente a la función imprimir enviándole el valor 3. Si continuamos este algoritmo podremos observar que en pantalla se imprime: 5 4 3 2 1 0 ?1 ?2 ?3 . . . . . . . . . hasta que se bloquee el programa. Tener en cuenta que cada llamada a una función consume 4 bytes por la llamada y en este caso 4 bytes por el parámetro x. Como nunca finaliza la ejecución completa de las funciones se desborda la pila estática por las sucesivas llamadas.

 COLA: DEFINICIÓN Y OPERACIONES CON COLA Una cola (también llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde 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.

Ejemplos de colas: en la vida real serían: personas comprando en un supermercado, esperando para entrar a ver un partido de béisbol, esperando en el cine para ver una película, una pequeña peluquería, etc. La idea esencial es que son todas líneas de espera.

 COLA CIRCULAR: El ambiente es el mismo que en la sección anterior, en concreto, disponemos de un vector de estructuras donde almacenar los datos. Sea m el número de estructuras. La cola no puede almacenar más de m elementos y los datos los numeramos como siempre, por índices que varían entre 0 y m-1 (ver figura siguiente):

 DOBLE COLA: Una doble cola o bicola es una generalización de una ed. Tipo cola. en una doble cola, los elementos se pueden Insertar o eliminar por cualquiera de los dos extremos. es Decir, se pueden insertar y eliminar valores tanto por Frente como por el final de la cola.  APLICACIONES DE LAS COLAS: Las Colas también se utilizan en muchas maneras en los sistemas operativos para planificar el uso de los distintos recursos de la computadora. Uno de estos recursos es la propia CPU (Unidad Central de Procesamiento). Si esta trabajando en una sistema multiusuario, cuando le dice a la computadora que ejecute un programa concreto, el sistema operativo añade su petición a su "cola de trabajo". Cuando su petición llega al frente de la cola, el programa solicitado pasa a ejecutarse. Igualmente, las colas se utilizan para asignar tiempo a los distintos usuarios de los dispositivos de entrada/salida (E/S), impresoras, discos, cintas y demás. El sistema operativo mantiene colas para peticiones de imprimir, leer o escribir en cada uno de estos dispositivos.

 LISTAS: DEFINICIÓN, Y TIPOS DE OPERACIONES CON LISTAS Como ya hemos comentado, una lista se puede definir como una secuencia de elementos del mismo tipo. Por ejemplo [1,2,-3,0] constituye una lista de elementos enteros. Una función que acepta como parámetro una lista, puede trabajar con un argumento actual de cualquier longitud, siempre que los elementos sean del tipo especificado en la signatura, en el caso de que aparezca, y la lista sea homogénea. Las listas se pueden representar de formas diversas, como ocurría en prolog:
    

signatura: [1,2,3]::[int] [[1,2,3],[2,3]]::[[int]] [[1,2],[‘a’,’b’]] ü incorrecto. []=lista vacía. cabeza:cola (como en prolog): para obtener la cabeza tenemos una función predefinida: head. para la cola tenemos tail.

Para realizar operaciones con listas en haskell debemos acoger el método que usábamos en prolog: recursividad. Recordemos que recursividad y backtraking no son lo mismo, así pues, en haskell no aparece la idea de backtracking en la ejecución de los programas. La sintaxis para especificar los datos de una lista es variada:
  

1:2:3:[] þ uso del operador : (asociativo por la derecha). [1, 2,3] þ forma más cómoda y adecuada. ‘a’:’b’: [] = [‘a’,’b’] = "ab" þ en el caso de las cadenas de caracteres.

haskell proporciona un conjunto de funciones predefinidas para el manejo de listas:
   

length xs ü número de elementos de xs. xs ++ ys ü concatena las listas argumentos. concat xss ü concatena todas las listas del argumento. map f xs ü aplica la función f sobre los elementos de xs.

 APLICACIONES: Son usadas como módulos para otras muchas estructuras de datos, tales como pilas, colas y sus variaciones. El campo de datos de un nodo puede ser otra lista enlazada. Mediante este mecanismo, podemos construir muchas estructuras de datos enlazadas con listas; esta practica tiene su origen en el lenguaje de programación Lisp, donde las listas enlazadas son una estructura de datos primaria (aunque no la única), y ahora es una característica común en el estilo de programación funcional.

A veces, las listas enlazadas son usadas para implementar vectores asociativos, y estas en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este uso de las listas enlazadas; hay mejores formas de implementar éstas estructuras, por ejemplo con árboles binarios de búsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinámicamente creada fuera de un subconjunto propio de nodos semejante a un árbol, y son usadas más eficientemente para recorrer ésta serie de datos.

 REPRESENTACIÓN: Una lista enlazada, salvo que se indique lo contrario. Almacenaremos LISTA en memoria de la forma siguiente. Como mínimo, LISTA estará compuesta por dos arrays lineales, a los que llamaremos INFO y ENLACE, tales que INFO [K] y ENLACE [K] contienen la parte de información y el campo de puntero de cada nodo de LISTA respectivamente. Necesitamos también una variable especial llamada COMIENZO que contiene la posición ocupada por el primer elemento de la lista, y una marca especial NULO que indica el final de la misma. Puesto que los índices de los arrays INFO y ENLACE serán habitualmente positivos, el valor NULO será el -999, salvo que digamos lo contrario. El siguiente ejemplo muestra la representación memoria de una lista enlazada en la que cada nodo de la lista contiene un único carácter. Podemos obtener la lista de caracteres o, en otras palabras, la cadena de la forma siguiente: COMIENZO = 9, luego INFO [9] = N primer carácter. ENLACE [9] = 3, luego INFO [3] = 0 segundo carácter. ENLACE [3] = 6, luego INFO [6] = (carácter blanco) tercer carácter. ENLACE [6] = 11, luego INFO [11] = E cuarto carácter. ENLACE [11] = 7, luego INFO [7] = X quinto carácter. ENLACE [7] = 10, luego INFO [10] = I sexto carácter. ENLACE [10] = 4, luego INFO [4] = T séptimo carácter. ENLACE [4] = -999 valor nulo, luego termina la lista.

 EJEMPLOS: A manera de ejemplo, podemos pensar en una lista conteniendo datos numéricos ingresados desde algún dispositivo, en el ejemplo dicho dispositivo será el teclado y los números ingresados se tratarán como reales (doublés). La idea es básica,

ya que no se sabe de antemano cuantos serán los números ingresados para ser sumados usamos una lista dinámica por contener a cada uno de los números Ingresados. Al final se suman los elementos ingresados y se muestra el resultado de la suma de los mismos. // Un simple ejemplo de uso de la plantilla de clase list #include <cstdlib> #include <iostream> #include <iomanip> #include <list> using namespace std; int main(int argc, char *argv[]) { List<double> lalista; Double num, suma=0; cout << "Una sencilla calculadora" << endl; Do { cout << "Ingrese un número, 0 para salir: "; cin >> num; if (num != 0) lalista.push_back(num); } While (num != 0); cout << "----------" << endl; while ( !lalista.empty() ) { num = lalista.front(); cout << setw(10) << num << endl; suma += num; lalista.pop_front(); } cout << "----------" << endl; cout << setw(10) << suma << endl; System ("PAUSE"); Return EXIT_SUCCESS;  IMPLEMENTACIÓN DE LISTAS ENCADENADAS:

Una lista se utiliza para almacenar información de mismo tipo, con la característica de que puede Contener un número indeterminado de elementos (mientras haya memoria) y que estos Elementos mantienen un orden explícito (al menos el de la forma en que se introducen en la lista). Este ordenamiento explicito implica que cada elemento mantiene un enlace al siguiente elemento. Una lista es una estructura de datos dinámica, el número de elementos en la lista puede variar Rápidamente en Un proceso, aumentando por Agregaciones o disminuyendo por extracciones. Las Agregaciones Se pueden realizar por cualquier punto de la lista; por la cabeza (inicio), por el Final (cola), a partir o antes de un elemento determinado de la lista. Las extracci ones también se Pueden realizar en cualquier punto; además se extraen elementos dependiendo del valor de un Atributo del elemento mismo.

 METODOS DE INSERCIÓN, BÚSQUEDA:

Es una manera muy natural de ordenar para un ser humano, y puede usarse fácilmente para ordenar un mazo de cartas numeradas en forma arbitraria. Requiere O (n²) operaciones para ordenar una lista de n elementos. Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado. Después, cuando hay k elementos ordenados de menor a mayor, se toma el elemento k+1 y se compara con todos los elementos ya ordenados, deteniéndose cuando se encuentra un elemento menor (todos los elementos mayores han sido desplazados una posición a la derecha) o cuando ya no se encuentran elementos (todos los elementos fueron desplazados y este es el más pequeño). En este punto se inserta el elemento k+1 debiendo desplazarse los demás elementos.

UNIDAD 7: PROGRAMACIÓN AVANZADA  CONCEPTO DE AVANZADOS Las estructuras de control, los operadores y todas las utilidades propias de javascript que se han visto en los capítulos anteriores, permiten crear scripts sencillos y de mediana complejidad. Sin embargo, para las aplicaciones más complejas son necesarios otros elementos como las funciones y otras estructuras de control más avanzadas, que se describen en este capítulo. Igual que escribir en un idioma tiene una serie de normas de estilao, que, si se cumplen, hacen el texto más comprensible y elegante, igual los lenguajes de programación tienen una serie de normas de estilo, para hacer su código más elegante, comprensible e incluso fácil de depurar. en c++, las normas de estilo parten del diseño correcto de las clases, de la utilización correcta de la herencia y de la encapsulación, y del aprovechamiento de todas las capacidades de c++. Simultáneamente, veremos como los conceptos fundamentales de la programación orientada a objetos, tales como la herencia y encapsulación se implementan en c++  EXCEPCIONES: Una excepción se genera cuando ocurre un error en tiempo de ejecución. En java es común manejar a excepciones para controlar la ejecución del programa. Es por ello la importancia de conocer como se puede detectar y manipular las diferentes excepciones.  MULTITHRADING  Capacidad del S.O de ejecutar la diferente parte de un programa (THREADS) simultanea mente. Contadores de programaciones independientes. Mecanismo de etiquetado para distinguir las intrusiones de diferentes hilos. Mecanismo que dispare el cambio del hilo. THREADS

   

Seme –proceso caracterizado por:    Un punto definido de comienzo Una secuencia de ejecución Un punto de terminación

Los threads comparten memoria y datos entre ellos.

 FUNDAMENTOS DE LA PROGRAMACIÓN AVANZA ORIENTADA A OBJETOS La programación orientada a objetos, es, desde su raíz, una forma de concebir un programa de computadora. Un programa es una serie de instrucciones que le indican a la computadora que hacer. La manera en que la poo ve a un programa es como un conjunto de objetos que operan juntos en formas predefinidas para realizar tareas. En este artículo el autor hace una sucinta descripción de los fundamentos de la programación orientada a objetos, necesaria para aquellos que no poseen nociones sobre esta materia, y material de consulta para los que la conocen o dominan.  UTILIZACIÓN DE ESTRUCTURAS DINÁMICA DE DATOS Y OPERACIONES DE ENTRADA/SALIDAS. Las estructuras dinámicas de datos son estructuras que cuya dimensión puede crecer o disminuir durante la ejecución del programa. Una estructura dinámica de datos es una colección de elementos llamados nodos. Al contrario que un array, que contiene espacio para almacenar un número fijo de elementos, una estructura dinámica de datos se amplía y contrae durante la ejecución del programa. las estructuras dinámicas de datos se pueden dividir en dos grandes grupos: lineales: listas enlazadas, pilas, colas no lineales: árboles , grafos las estructuras dinámicas de datos son de gran utilidad para almacenar datos del mundo real, que están cambiando constantemente. Por ejemplo si tenemos almacenados en un array los datos de los alumnos de un curso, los cuales están ordenados de acuerdo al promedio, para insertar un nuevo alumno seria necesario correr cada elemento un espacio: si en su lugar se utilizara una estructura dinámica de datos, los nuevos datos del alumno se pueden insertar fácilmente, las declaraciones de funciones y la definición de tipos usados por varias operaciones estándar de entrada y salida. Por motivos de compatibilidad, el lenguaje de programación c++ (derivado de c) también tiene su propia implementación de estas funciones, que son declaradas con el archivo de cabecera cstdio.

CONCLUSIÓN Las estructuras dinámicas de datos son estructuras que cuya dimensión puede crecer o disminuir durante la ejecución del programa. Una estructura dinámica de datos es una colección de elementos llamados nodos. Al contrario que un array, que contiene espacio para almacenar un número fijo de elementos, una estructura dinámica de datos se amplía y contrae durante la ejecución del programa. Las estructuras dinámicas de datos son de gran utilidad para almacenar datos del mundo real, que están cambiando constantemente. Por ejemplo si tenemos almacenados en un array los datos de los alumnos de un curso, los cuales están ordenados de acuerdo al promedio, para insertar un nuevo alumno seria necesario correr cada elemento un espacio: Si en su lugar se utilizara una estructura dinámica de datos, los nuevos datos del alumno se pueden insertar fácilmente. En las estructuras dinámicas de datos se menciona pilas, la cual es una lista ordinal o estructura de datos, que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura. Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado. Otro de las estructura de datos es la colas, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde 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. En Ciencias de la Computación, 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. 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 eliminación 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.

BIBLIOGRAFÍA

www.monografias.com www.sildeshare.net www.buenastarea.con http://es.wikipedia.org/wiki/Geometr%C3%ADa_descriptiva

ANEXOS