lunes, 23 de septiembre de 2013

Tipos de colas....


Cola Circular(Anillos).

Una cola circular o anillo es una estructura de datos en la que los elementos están de forma circular y cada elemento tiene un sucesor y un predecesor. Los elementos pueden cosultarse, añadirse y eliminarse únicamente desde la cabeza del anillo que es una posición distinguida. Existen dos operaciones de rotaciones, una en cada sentido, de manera que la cabeza del anillo pasa a ser el elemento sucesor, o el predecesor, respectivamente, de la cabeza actual.

Codigo En Maude(anillos)
 
fmod ANILLO {X :: TRIV} is
        sorts AnilloNV{X} Anillo{X} .
        subsort AnilloNV{X} < Anillo{X} .

        op crear : -> Anillo{X} [ctor] .
        op insertar : X$Elt Anillo{X} -> AnilloNV {X} [ctor] .

        op eliminar : Anillo{X} -> Anillo{X} .
        ops rotarDch rotarIzq : Anillo{X} -> Anillo{X} .
        op cabeza : AnilloNV{X} -> X$Elt .
        op esVacio? : Anillo{X} -> Bool .
        op aLaCola : X$Elt Anillo{X} -> Anillo{X} .
        op elimCola : Anillo{X} -> Anillo{X} .
        op cola : AnilloNV {X} -> X$Elt .

        var A : Anillo{X} .
        vars E E2 : X$Elt .

        eq eliminar(crear) = crear .
        eq eliminar(insertar(E, A)) = A .

        eq cabeza(insertar(E, A)) = E .

        eq esVacio?(crear) = true .
        eq esVacio?(insertar(E, A)) = false .

        eq cola(insertar(E, crear)) = E .
        eq cola(insertar(E, insertar(E2, A))) = cola(insertar(E2, A)) .

        eq elimCola(crear) = crear .
        eq elimCola(insertar(E, crear)) = crear .
        eq elimCola(insertar(E, insertar(E2, A))) = insertar(E, elimCola(insertar(E2, A))) .

        eq aLaCola(E, crear) = insertar(E, crear) .
        eq aLaCola(E, insertar(E2, A)) = insertar(E2, aLaCola(E, A)) .

        eq rotarDch(crear) = crear .
        eq rotarDch(insertar(E, A)) = aLaCola(E, A) .

        eq rotarIzq(crear) = crear .
        eq rotarIzq(insertar(E, A)) = insertar(cola(insertar(E, A)), elimCola(insertar(E, A))) .
endfm


Cola de prioridades.

Una cola de prioridades es una estructura de datos en la que los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen.

Implementacion en Java

package colaPrioridadSimpleEnlazada;
import colaException.*;

public class ColaPrioridad implements colaPrioridadInterface.ColaPrioridad {
    class Celda {
        Object elemento;
        int prioridad;
        Celda sig;
    }
    private Celda cola;
    public ColaPrioridad() {
        cola = new Celda();
        cola.sig = null;
    }
    public boolean vacia() {
        return (cola.sig==null);
    }
    public Object primero() throws ColaVaciaException {
        if (vacia()) throw new ColaVaciaException();
        return cola.sig.elemento;
    }
    public int primero_prioridad() throws ColaVaciaException {
        if (vacia()) throw new ColaVaciaException();
        return cola.sig.prioridad;
    }     
    public void inserta(Object elemento, int prioridad) {
        Celda p,q;
        boolean encontrado = false;
        p = cola;
        while((p.sig!=null)&&(!encontrado)) {
            if (p.sig.prioridad<prioridad)
                encontrado = true;
            else p = p.sig;
        }
        q = p.sig;
        p.sig = new Celda();
        p = p.sig;
        p.elemento = elemento;
        p.prioridad = prioridad;
        p.sig = q;
    }    
        public void suprime() throws ColaVaciaException {
        if (vacia()) throw new ColaVaciaException();
        cola = cola.sig;
    }
} // fin clase ColaPrioridad

Caracteristicas Generales:

Este tipo especial de colas tienen las mismas operaciones que las colas , pero con la condición de que los elementos se atienden en orden de prioridad.
Ejemplos de la vida diaria serían la sala de urgencias de un hospital, ya que los enfermos se van atendiendo en función de la gravedad de su enfermedad.
Entendiendo la prioridad como un valor numérico y asignando a altas prioridades valores pequeños, las colas de prioridad nos permiten añadir elementos en cualquier orden y recuperarlos de menor a mayor.

BiCola:

La bicola o doble cola es un tipo de cola especial que permiten la inserción y eliminación de elementos de ambos extremos de la cola.
Puede representarse a partir de un vector y dos índices, siendo su representación más frecuente una lista circular doblemente enlazada.
Todas las operaciones de este tipo de datos tienen coste constante.

Anexo Video informativo acerca de colas en java  :D

Implementacion en Java
 
// ArrayCircularQueue.java

package com.javajeff.cds;

public class ArrayCircularQueue implements Queue {
private int front = 0, rear = 0;
private Object [] queue;

public ArrayCircularQueue (int maxElements) {
queue = new Object [maxElements];
}

public void insert (Object o) {
int temp = rear;
rear = (rear + 1) % queue.length;
if (front == rear) {
rear = temp;
throw new FullQueueException ();
}
queue [rear] = o;
}

public boolean isEmpty () {
return front == rear;
}

public boolean isFull () {
return ((rear + 1) % queue.length) == front;
}

public Object remove () {
if (front == rear)
throw new EmptyQueueException ();
front = (front + 1) % queue.length;
return queue [front];
}
}






jueves, 5 de septiembre de 2013

Estructuras Lineales y No Lineales

Estructuras Lineales y No Lineales..

Estructura de Datos Lineales:
 Existen tres estructuras lineales especialmente importantes: 
   1.-Las pilas
   2.-Las colas
   3.-Las listas
Su importancia radica en que son muy frecuentes en los esquemas algorítmicos.
Las operaciones básicas para dichas estructuras son:
    • Crear la secuencia vacía
    • Añadir un elemento a la secuencia
    • Borrar un elemento a la secuencia
    • Consultar un elemento de la secuencia
    • Comprobar si la secuencia está vacía
La diferencia entre las tres estructuras vendrá dada por la posición del elemento a añadir, borrar y consultar:
    • Pilas: Las tres operaciones actúan sobre el final de la secuencia
    • Colas: Se añade por el final y se borra y consulta por el principio
    • Listas: Las tres operaciones se realizan sobre una posición privilegiada de la secuencia, la cual puede desplazarse.



Estructura de Datos No Lineales:
Se caracteriza por no existir una relación de sus elementos es decir que un elemento puede estar con cero uno o más elementos. 
Las estructuras no lineales de datos más general son los árboles donde no existe ninguna relación de orden Predefinida.
Esta estructura se usa principalmente para representar datos con una relación jerárquica entre sus elementos, como por ejemplo registros, árboles genealógicos y tablas de contenidos

Abstracción y su Clasificación

Abstracción y su Clasificación.. 

La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra). El común denominador en la evolución de los lenguajes de programación, desde los clásicos o imperativos hasta los orientados a objetos, ha sido el nivel de abstracción del que cada uno de ellos hace uso.


Clasificación:

Bajo Nivel..

Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.








Medio Nivel..



Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel




Alto Nivel...


Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática






FUENTE: http://lprogra.galeon.com/productos1671616.html




Estructura de Datos

Concepto....

En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son:
  • Alta, adicionar un nuevo valor a la estructura.
  • Baja, borrar un valor de la estructura.
  • Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados).
Otras operaciones que se pueden realizar son:
  • Ordenamiento, de los elementos pertenecientes a la estructura.
  • Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.
Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos.




Anexo Tutorial que te podría ayudar con tu curso de Estructura de Datos...



miércoles, 4 de septiembre de 2013

Compuestos.

Datos Compuestos....

Los datos compuestos se pueden subdividir  en campos  que tengan significado.
En algunos  ocasiones los datos  compuestos se conocen  también como datos o tipos agregados. Los tipos agregados son datos  cuyos valores  constan de colecciones de elementos de datos.  Un tipo agregado se compone de tipos  de datos previamente definidos. Existen tres  tipos agregados  básicos: Arrays (arreglos), secuenciales y registros.


 En ocasiones se necesitan tipos de datos mas complejos, y estructurados Variables que almacenen mas de un valor Variables que representen información de la vida real Estarán formados a partir de tipos de datos simples En C, tenemos: TIPO FORMATO DECLARACIÓN....




Primitivos.

Datos Primitivos..



Los tipos de datos son conjuntos de elementos que cumplen con unas 
características bien definidas, de manera que es posible determinar si un elemento 
dado pertenece a él o no. En java se habla de dos grandes grupos de tipos de 
datos: los primitivos y los referenciados. 
Los tipos de datos primitivos son comunes a casi todos los lenguajes de 
programación, y tienen como característica principal el que sus instancias son 
valores, además no se puede definir un nuevo tipo de dato, se debe trabajar con 
los que ofrece java.

Un tipo de dato primitivo es la definición de un grupo de valores y de las 
operaciones que se que existen para trabajar con ellos. Como ejemplo de tipos de 
datos se pueden citar, en matemáticas, los números naturales y los números 
enteros. Se habla de los números naturales, como los números enteros mayores o 
iguales a cero; y se sabe que para ellos están definidas las operaciones suma y 
multiplicación sin ninguna restricción, además está la resta, siempre y cuando el 
minuendo sea mayor que el sustraendo, y la división siempre y cuando el divisor 
sea diferente de 0 y se pueda encontrar otro número natural tal que al multiplicar 
este número por el divisor se obtenga el dividendo.