lunes, 21 de octubre de 2019

Pilas

Continuando con el curso de Estructuras de datos, en esta entrada aprenderemos sobre las pilas, ¿Que son las pilas?, ¿Como funcionan? y sus operaciones.

¿Que es una pila?

Se podría decir que es una lista ordinal, o estructura de datos en la que el modo de acceso de sus elementos es de tipo LIFO "FAST IN FIRST, OUT" que en español es ultimo en entrar, primero en salir.

y que nos permite almacenar datos y recuperar datos.

Otro concepto podría ser:

Tipo especial de lista abierta en la que solo se pueden insertar y eliminar nodos en uno de los extremos de la lista


¿Como funcionan?

La pila es un contenedor de NODOS y tiene dos operaciones basicas que son PUSH(añade)  y POP(Quita)
Push añade un nodo en la parte superior de la pila, dejando por debajo el resto de los nodos y pop elimina y devuelve el actual nodo superior de la pila





Operaciones 


  • Crear: se crea la pila vacía. 
  • Apilar: se añade un elemento a la pila.(push)
  • Quitar elemento: se elimina el elemento frontal de la pila.(pop)
  • Cima pila: devuelve el elemento que esta en la cima de la pila. (top o peek)
  • Pila Vacía: devuelve cierto si la pila está vacía o falso en caso contrario.




miércoles, 16 de octubre de 2019

Listas Doblemente Enlazadas



Continuando con el curso de Estructuras de datos.!

En esta entrada aprenderemos sobre las listas doblemente enlazadas, ya hemos aprendido sobre las listas enlazadas así que sin mas preámbulo veamos que son las listas doblemente enlazadas.

¿Que son?

Podemos definir un lista doblemente enlazada como una estructura que consiste en un conjunto de nodos enlazados sucesivamente, y en este caso a diferencia de las listas simplemente enlazadas cada nodo contiene dos enlaces, que respectivamente un enlace hace referencia al nodo siguiente y el otro al nodo anterior en la secuencia de los nodos.


El enlace al nodo anterior del primer nodo apunta a NULL, así como el enlace al nodo siguiente del ultimo nodo también apunta a NULL.


A diferencia de la lista simplemente enlazada podemos decir que la lista doblemente enlazada posee o recorre dos direcciones, hacia siguiente y hacia anterior.

En este tipo de listas enlazadas podemos realizar el mismo tipo de operaciones básicas que se hacen en la lista simplemente enlazada para manipular los datos con la única diferencia que los datos los podemos manipular de los dos sentidos.


  • Inicialización o Creación
  • Insertar elementos a la lista: Inserta un Nodo "x" en la lista, pudiendo realizarse la inserción al principio o al final de la lista.
  • Eliminar elementos de la lista: Elimina un Nodo de la lista, puede ser por su posición o por su dato.
  • Buscar elementos de la lista: Busca un elemento de la lista.
  • Recorrer la lista enlazada.
  • Comprobar si la lista esta vacía.



lunes, 14 de octubre de 2019

Eliminar nodo especifico y buscar elemento en la lista.



Eliminar un nodo en especifico

El eliminar un nodo en especifico se puede realizar en base al siguiente algoritmo.


Algoritmo

1.       1. Sí la lista no está vacía.
a.       Sí inicio es igual a fin y elemento es igual a inicio de datos.
                                                               i.      Inicio apunta a inicio y fin apunta a nulo.
b.       Sí no elemento igual a inicio de dato.
                                                               i.      Inicio apunta a inicio de siguiente.
c.       Sí no
                                                               i.      Crear nodo, anterior y siguiente.
                                                             ii.      Anterior igual a inicio.
                                                           iii.      Temporal igual a inicio de siguiente.
                                                           iv.      Mientras temporal sea diferente a nulo y temporal de dato sea nulo a elemento.
1.       Anterior a igual de anterior de siguiente.
2.       Temporal igual temporal de siguiente.
                                                             v.      Sí temporal es diferente de nulo.
1.       Anterior de siguiente igual a temporal de siguiente.
2.       Sí temporal igual a fin.
a.       Fin igual a anterior.



 Codificado en JAVA seria de la siguiente manera:



Buscar un elemento.

Ejemplo codificado en JAVA para buscar un elemento en la lista.




jueves, 10 de octubre de 2019

Eliminar nodos de la lista.





Para eliminar un nodo al inicio de la lista se crea un método y tiene que cumplirse lo siguiente condición:

Sí inicio es igual a fin.

Es decir, que inicio y fin sean iguales y ambos apunten a nulo. Esto se realiza por el siguiente algoritmo.

Algoritmo.

1. Elemento es igual a inicio de dato.
2. Sí inicio es igual a fin.
     a) Inicio apunta a nulo.
     b) Fin apunta a nulo.
3. Sí no
     a) Inicio apunta a inicio de siguiente.
4. Retorna el elemento.

Codificado en Java quedaría de la siguiente manera:



Eliminar al final de la lista


Este es el ejemplo codificado para eliminar un elemento al final de la lista.



miércoles, 9 de octubre de 2019

Listas Enlazadas



Una lista enlazada es un TDA que nos permite almacenar datos de forma ordenada, al igual que los vectores pero con la diferencia que esta estructura es dinámica.

También podemos verlo como una secuencia de elementos dispuestos uno detrás de otro, en el cual cada elemento se conecta al siguiente por medio de un enlace.



En una lista enlazada cada elemento apunta al siguiente, excepto el ultimo que apunta a null, Los elementos de una lista reciben el nombre de NODOS. 

En una lista enlazada el elemento principal es el NODO.

Pero ¿Que es un nodo?
Es una estructura sencilla que almacena información y ademas hace referencia a algún otro nodo y para hacer esa referencia utilizamos el puntero, la idea es que el puntero haga referencia a otro objeto de tipo nodo.



¿Que es un puntero?

Es una variable que contiene una dirección de memoria de un dato o de otra variable que contiene al dato en un arreglo.

 El NODO se compone de dos campos:
  • La información (Dato o Información)
  • La referencia (Enlace)

Para que esta estructura sea un TDA de tipo lista enlazada debe de tener algún tipo de operadores que nos permitan la manipulación de los datos que contiene.

Las operaciones básicas en una lista enlazada son:

  • Inicialización o Creación
  • Insertar elementos a la lista: Inserta un Nodo "x" en la lista, pudiendo realizarse la inserción al principio o al final de la lista.
  • Eliminar elementos de la lista: Elimina un Nodo de la lista, puede ser por su posición o por su dato.
  • Buscar elementos de la lista: Busca un elemento de la lista.
  • Recorrer la lista enlazada.
  • Comprobar si la lista esta vacía.
Existen distintos tipos de listas enlazadas las cuales son:

  • Listas Simplemente Enlazadas
  • Listas Doblemente Enlazadas
  • Listas Circular Simplemente Enlazadas
  • Listas Circular Doblemente Enlazadas
Mas adelante estaremos hablando de cada una de ellas.!



    

viernes, 4 de octubre de 2019

RECURSIVIDAD



¿Qué es la recursividad?
Es un proceso de recurrencia con n repeticiones, replicando algo que ya ocurrió. En Java es un procedimiento para resolver un problema complejo reduciéndolo a uno o más subproblemas; un método se puede llamar a si mismo.

Características de la Recursividad.

  • Tiene las misma estructura que el problema original.
  • Más simple de resolver.
  • Los subproblemas se dividen usando el mismo procedimiento.
  • Los subproblemas se hacen más simples.

Estructura general de un algoritmo recursivo.



Un ejemplo puede ser el factorial de un numero donde: 


n! = 1 * 2 * 3 * 4 ... *(n - 1) * n

Codificado en Java seria: 

Public int factorial(int n) {
   if (n == 0){                                      
      return 1;
   } else {
      return n  * factorial(n - 1);
   }

}

Donde el caso base es:

 Public int factorial(int n) {
   if (n == 0){                                      
      return 1;
   }
}

Y el dominio es:

else {
      return n  * factorial(n - 1);

   }

Otro ejemplo es la solución de la sucesión de Fibonacci, que es la suma de los dos números anteriores. Iniciando esta serie con 0 y 1, dicha sucesión es infinita...
Vídeo de ejemplo... ↓↓


Memoria Dinámica

¿Qué es memoria dinámica?

Es un espacio de memoria la cual su tamaño puede variar durante la ejecución del programa, es decir los datos que su tamaño pude variar ya que los datos pueden crearse o destruirse a lo largo de la ejecución del programa, a este tipo de datos se le puede llamar Datos Dinámicos.

Esto permite dimensionar la estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecución según se va necesitando.

Para implementar la memoria dinámica utilizaremos la clase ArrayList, que es una clase que nos permite almacenar datos en memoria de forma similar a los Arrays, con la ventaja que el numero de elementos que almacena lo hace de forma dinámica.

Es decir los ArrayList nos permiten añadir, eliminar y modificar elementos en tiempo de ejecución.

y los principales métodos para trabajar con Arrays son los siguientes:


Ejemplos de declaración de cada uno de los métodos:


// Añade el elemento al ArrayList
nombreArrayList.add("Elemento");

// Añade el elemento al ArrayList en la posición 'n'
nombreArrayList.add(n, "Elemento 2");

// Devuelve el numero de elementos del ArrayList
nombreArrayList.size();

// Devuelve el elemento que esta en la posición '2' del ArrayList
nombreArrayList.get(2);

// Borra el elemento de la posición '5' del ArrayList  
nombreArrayList.remove(5);

// Borra la primera ocurrencia del 'Elemento' que se le pasa como parámetro. 
nombreArrayList.remove("Elemento");


 AQUÍ UN EJEMPLO DE ARRAYLIST  | VÍDEO | ↓↓



martes, 1 de octubre de 2019

Memoria Estática

¿Que es Memoria ?
 
   Es un espacio lógico para guardar algún tipo de información.

¿Que es memoria Estática?
 
  1. Es la memoria que se reserva en el momento de la compilación, antes de comenzar a ejecutar el código del programa.

  2.Espacio de memoria que no se modifica al menos en tiempo de ejecución.

Un arreglo es:
 Una variable o identificador que define un “grupo” de variables.
 Define un nombre
 Define un tipo
 Define el tamaño del “grupo”.
 Las variables dentro del “grupo” se conocen como elementos y están ordenados en posiciones

¿Como implementar la clase Array en la memoria estática?


como paso número uno tenemos que declarar los arreglos.
Una vez creado el arreglo, se puede proceder a llenar con elementos dispuestos en cada posición

Todos los arreglos tienen una propiedad que retorna su longitud, es decir el tamaño con el cuál han sido creados, para ello utilizan el método length que proporciona el tamaño de un arreglo. De la siguiente forma:

nombreArreglo.length


luego tenemos que capturar los datos.
for(int j =0; j<10; j++) { numeros[j] = j++; }

El arreglo e empieza en la posición 0, es decir, el primer elemento del arreglo ocupa la posición de 0, de ahí que el for comienza en 0.

Luego mostramos los datos del arreglo.

aquí les dejo un vídeo tutorial que nos muestra como implementar la clase Array en la memoria estática







viernes, 27 de septiembre de 2019

TIPOS DE DATOS ABSTRACTOS E INTRODUCCIÓN A PILAS



¿QUÉ ES UN CONSTRUCTOR?
La función del constructor es inicializar un objeto de una clase. 
Las características son:
  1. Un constructor no especifica un valor de devolución.
  2. Un constructor se puede sobrecargar.
  3. Inicializa objetos de la clase.
  4. Reserva memoria.

TIPOS DE MÉTODOS

MÉTODO DE TIPO FUNCIÓN.
  •  Son métodos que nos devuelven algo
  • Un método de tipo función devuelve solo un dato u objeto como resultado, no varios.
  • La devolución del resultado se expresa con la palabra clave return seguida del dato u objeto a devolver.
  • La sentencia return implica que termina la ejecución del código en el método y estará típicamente en la linea final.


MÉTODO DE TIPO PROCEDIMIENTO.
  • Son métodos que realizan ciertas operaciones sin devolver un valor u objeto concreto.
  • Un método de tipo procedimiento si comienza con la palabra clave void, que significa "vacio" o "nulo".
  • Un método con tipo de retorno void no llevara sentencia return.


MODULARIDAD

En Java toda la lógica de programación esta agrupada en modulo (Métodos). Los métodos son porciones de programa que contienen la funcionalidad o comportamiento de un objeto.


¿PARA QUE SIRVEN LOS MÉTODOS?
  1. Reutilización de código.
  2. Mejor comprensión del código.
  3. Orden.
  4. Separación de tareas.
  5. Realiza trabajos complejos.


¿QUE CONTIENE UN MÉTODO EN JAVA?
  • Un bloque de código con su respectivo nombre.
  • Recibe parámetros o argumentos (Opcionales).
  • Acciones o instrucciones a realizar.
  • Devuelve un valor de algún tipo conocido (Opcional).

Vídeo de ejemplo... ↓↓







martes, 24 de septiembre de 2019

Introducción



En este foro estaremos compartiendo sobre los TDA (Tipos de Datos Abstracto), Memoria Estática, Memoria Dinámica, Recursividad, Listas conoceremos su definición y algunas características importantes.

Una estructura de datos es:

Representación organizada de un conjunto de información.

una manera natural de representar la información.

las estructuras de datos implementan algo que se llama TDA (Tipos de Datos Abstractos)

qUE ES UN TDA.?
1.Es un tipo de datos que consta de datos (Estructura de Datos propia) y operaciones que se pueden realizar sobre ellos (Inserción, Eliminación, búsqueda, Vaciado, Inicialización).
2.Un TAD se compone de Estructuras de Datos y los método o funciones que manipulan esas estructuras de datos.

Que es una memoria dinámica...
Que es una memoria estática...
Que es la recursividad...

Todo esto y más aprenderemos en este curso de estructura de datos.