lunes, 19 de septiembre de 2011

Trabajo en Equipo (Listas Enlazadas)


Listas
LISTAS 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 arrayconvencionales 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.

Tipos de Listas Enlazadas
Listas enlazadas lineales
Listas simples enlazadas
La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si es el último nodo.


Una lista enlazada simple contiene dos valores: el valor actual del nodo y un enlace al siguiente nodo
Lista Doblemente Enlazada
Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si es el último nodo.


Una lista doblemente enlazada contiene tres valores: el valor, el link al nodo siguiente, y el link al anterior
En algún lenguaje de muy bajo nivel, XOR-Linking ofrece una vía para implementar listas doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de esta técnica no se suele utilizar.
Listas enlazadas circulares
En una lista enlazada circular, el primer y el último nodo están unidos juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos los nodos de una lista a partir de uno dado.


Una lista enlazada circular que contiene tres valores enteros
Listas enlazadas circulares simples
Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del último apunta al primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo eficientemente insertados después de uno que ya tengamos referenciado. Por esta razón, es usual quedarse con una referencia solamente al último elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al principio, y también permite accesos al primer nodo desde el puntero del último nodo.
Lista Enlazada Doblemente Circular
En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan bien como en una lista doblemente enlazada.
 Operaciones en Listas Enlazadas


Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:
  • Recorrido. Esta operación consiste en visitar cada uno de los nodos que forman la lista . Para recorrer todos los nodos de la lista, se comienza con el primero, se toma el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos dará la dirección del tercer nodo, y así sucesivamente.
  • Inserción. Esta operación consiste en agregar un nuevo nodo a la lista. Para esta operación se pueden considerar tres casos:
    • Insertar un nodo al inicio.
    • Insertar un nodo antes o después de cierto nodo.
    • Insertar un nodo al final.
  • Borrado. La operación de borrado consiste en quitar un nodo de la lista, redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:
    • Eliminar el primer nodo.
    • Eliminar el último nodo.
    • Eliminar un nodo con cierta información.
    • Eliminar el nodo anterior o posterior al nodo cierta con información.
  • Búsqueda. Esta operación consiste en visitar cada uno de los nodos, tomando al campo liga como puntero al siguiente nodo a visitar.

martes, 6 de septiembre de 2011

Las Torres de Hanoi (Recursivo)

Historia
En 1883 empezó a venderse en Francia un antiguo rompecabezas oriental, rescatado para Occidente por el profesor N. Claus (de Siam) y cuyas primeras referencias eran los escritos del ilustre mandarín Fer-Fer-Tam-Tam. Según una leyenda india, en el Templo de Benarés, bajo el domo que marca el centro del mundo, hay una placa de latón con tres agujas de diamante. Durante la creación, Dios puso sesenta y cuatro discos de oro puro de distinto tamaño en una de las agujas, formando una torre. Los bramanes llevan generaciones cambiando de lugar, uno a uno, los discos de la torre entre las tres agujas de forma que en ningún momento un disco mayor descanse sobre otro más pequeño. Cuando hayan conseguido trasladar todos los discos a otra aguja su trabajo estará terminado, y la torre y el templo se derrumbarán, y con un gran trueno, el mundo se desvanecerá. La versión simplificada que se vendía en Francia se componía de ocho discos de madera


Este programa fue escrito y corrido en nedbeans .

jueves, 1 de septiembre de 2011

Recursividad

RECURSIVIDAD

Concepto:
  
     La Recursividad es una tecnica de programacion  importante. Es aquella propedad que posee un metodo por la cual  puede llamarse asi mismo. Los procedimientos recursivos son la forma mas natural de representacion de muchos algoritmos.

    Cuando esta funcion es invocada, por ejemplo para encontrar el factorial del numero 3, se crea en la memoria de la computadora, las siguientes instancias.
Y al finalizar comienza el retorno a la invocacion anterior efectuandose las acciones que habian quedado pendientes.

Observe  como una nueva invocacion a la funcion factorial, cuando aun no se a terminado la invocacion anterior, no afecta el valor de la variable local  n que se creo en la invocacion anterior. Esto es esencialmente el principio fundamental de las funciones o procedimientos recursivos.Y que hacen de estos un mecanismo culñitativamente superior, cada instacia interrumpida de la funcion o del procedimiento, por una llamada a otro procedimiento o función, conserva sus  locales, aún cuando el procedimiento o función pueda ser nuevamente invocado

Funciones


Las funciones recursivas se componen de:
Caso base: una solución simple para un caso particular (puede haber más de un caso base). La secuenciación, iteración condicional y selección son estructuras válidas de control que pueden ser consideradas como enunciados

Caso recursivo: una solución que involucra volver a utilizar la función original, con parámetros que se acercan más al caso base. Los pasos que sigue el caso recursivo son los siguientes:
1.El procedimiento se llama a sí mismo
2.El problema se resuelve, resolviendo el mismo problema pero de tamaño menor
3.La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará