Bienvenido al Curso

1

Introducción al curso básico de algoritmos y estructuras de datos

Introducción a los algoritmos

2

¿Qué entiende una computadora?

3

Lenguajes de programación

4

Estructuras de datos

5

¿Qué es un algoritmo?

6

Metodología para la construcción de un algoritmo

7

Variables y tipos de datos

8

User defined data types

9

Instalando Ubuntu Bash en Windows

10

Creando nuestro user defined data type

11

Abstract Data Types básicos: Lists, Stacks, Queues

12

Explicación gráfica Data Types básicos

13

Glosario de funciones para Abstract Data Types

14

Clases y objetos

15

Creando tu primera Queue: Arrays

16

Creando tu primera Queue: implementación.

17

Creando tu primera Queue: implementar la función enQueue

18

Creando tu primera Queue: implementar la función deQueue

19

Creando tu primera Queue: main code

Algoritmos de ordenamiento

20

Algoritmos de ordenamiento

21

Bubble sort

22

Bubble sort: implementación

23

Bubble sort: main code

24

Insertion sort

25

Desafío: implementa un algoritmo de ordenamiento

Recursividad

26

Recursividad

27

La función Factorial, calculando el factorial recursivamente

28

Manejo de cadenas de caracteres

29

Arte: Generando arte recursivo

Divide and conquer y programación dinámica

30

Divide and Conquer (divide y vencerás)

31

Qué es la programación dinámica (divide y vencerás v2.0)

32

MergeSort

33

Desafío: Buscar el algortimo más rápido de sort

34

Implementando QuickSort con Python

35

Implementando QuickSort con Python: main code

Algoritmos 'Greedy'

36

Qué son los Greedy Algorithm

37

Ejercicio de programación greedy

38

Ejercio de programación greedy: main code

Grafos y árboles

39

Grafos y sus aplicaciones

40

Árboles

¿Cómo comparar Algoritmos?

41

Cómo comparar algoritmos y ritmo de crecimiento

¿Qué sigue?

42

Cierre del curso y siguientes pasos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Abstract Data Types básicos: Lists, Stacks, Queues

11/42
Recursos

Un tipo de dato abstracto (ADT) representa un set particular de comportamientos, aunque no define su implementación.
Mientras que una estructura de datos es más concreta. Típicamente es la implementación de un ADT.
Los ADT más básicos serían: Lists, Stacks, Queues, Diccionarios, Arrays, Linked Lists, Trees

Aportes 85

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

  • Stack (Pila): Su comportamiento es LIFO (Last In First Out), Último en Entrar, Primero en Salir.
  • Queue (Cola) : Su comportamiento es FIFO (First In, First Out), Primero en Entrar, Primero en Salir.

Encontré un video donde pude entender claramente la diferencia entre un ADT y un Data Structure. https://www.youtube.com/watch?v=s-PGxWBcnkg

Y ahora un resumen :3

Muchas veces se confunden los ADT (Abstract Data Types) con las Estructuras de Datos.

Los ADT van a ser una representación de un set particular de comportamientos. Va a tener la capacidad de almacenar datos pero además va a decirte cuál va a ser el comportamiento de los datos que tengas almacenados en él.

Un stack (Una pila) es una lista que implementa una política “LIFO”, Lifo significa (Last In, First Out) esto en español viene siendo Último en llegar, Primero en Salir. Un ejemplo de un stack puede estar siempre en tu día a día en el software, por ejemplo cuando utilizas el tabulador.
Una estructura de datos va a ser una técnica o estrategia para implementar nuestro ADT.

De los tipos de datos abstractos más usados son el Stack (o Pila que ya lo mencionábamos), Queue (Cola, este utiliza otra comportamiento que se llama “First in, First Out” la persona que llega al primero será la primera también en salir), Priority Queue (Cola de Prioridades, no es más que la misma cola, solo que el orden de entrada pasa a segundo término y cada uno de los valores dentro del Queue va a tener asignado un peso o un valor que denote una importancia específica, va a salir primero del Queue el que tenga mayor relevancia o importancia), Diccionarios (especie de lista que va a tener un índice), Trees (Árboles), **Graphs **(Grafos).

stacks= lifo
queues= fifo

Que son los ADT: Son especificaciones abastractcas establecidas por el programador, lo que permite espeficicar las propriedades logicas y funcionales de un tipo de dato, de tal forma que dichas abastracciones trabajen de manera parecidas a los tipos de datos primitidos proporcionados por el lenguaje o sistema en el que se trabaja.


Estructura de datos: Las estructuras de datos son una forma eficiente de almacenar y organizar la información de nuestro programa. Para desarrollar una estructura de datos. Debemos tener en mente que los datos se representan en la memoria, pero en que forma? si son contiguas o enlazadas, al entender cual es la forma o el tipo correcto podremos darnos una idea sobre la base de nuestra estructura donde como es que los datos se almacenaran


Un ejemplo grafico, de su diferencia:

ABSTRAC DATA TYPES Y LAS ESTRUCTURAS DE DATOS
Muchas veces se confunden los Abstrac Data types con estructuras de datos y no son lo mismo.
ADT tipo de dato abstracto representa un set particular de comportamientos, esto quiere decir que va a almacenar datos, pero te va a decir de que manera lo va a hacer. Un Stack es una lista que implementa una política LIFO en elementos agregados y eliminados.
LIFO = significa que el último dato en ingresar va a ser el último dato en salir.
Estructura de datos es una técnica para implementar una ADT (Abstrac data types-Tipo de Dato Abstracto).
Ejemplo: se puede utilizar una Linked List o un array (estructura de datos) para implementar un Stack (ADT).
Los ADT más usados:
• Stack (pila) el último en ingresar es el primero en salir
• Queue (cola) el primero en ingresar es el primero en salir
• Priority queue (cola de prioridades) va a salir de primeras el que tenga mayor importancia o relevancia, si empatan dos valores en el mismo rango de importancia sale el que esta mas próximo, el que ingreso primero
• Diccionarios (tres arboles) una lista que va a tener un índice y los arboles los veremos mas gráficamente
• Graps (gráficos) son gráficos
Los ADT se implementan usando estructuras de datos de todo tipo como:
• Array
• Linked List
• Hast tables
• Trees
IMPORTANTE: LOS LENGUAJES DE PROGRAMACION TIENEN DISTINTAS IMPLEMENTACIONES DE LOS ADT, TENER EN CUENTA QUE VARIAN LAS INTRUCCIONES QUE SE UTILIZAN PARA ACCEDER A CADA UNO DE ELLOS.

https://es.wikipedia.org/wiki/Tipo_de_dato_abstracto
esta explicación me ayudo a enteder un poco mejor esta clase… sigo investigando

Un “tipo de datos abstractos” es un tipo de trabajo que consiste en transmitir la “forma” de los datos que tiene y el comportamiento que proporciona. Esto usualmente sería algo así como “tiene estos métodos y variables”. Sin embargo, si bien puede haber una implementación asociada con los tipos abstractos, generalmente no se le permitirá construir una directamente, ya que están destinados a representar la “forma”.

Una “estructura de datos” es una cosa que le permite acceder a los datos de forma organizada (o estructurada). En este contexto, puede ser incluso más abstracto que la definición anterior, ya que ni siquiera está vinculado a un lenguaje de programación específico, sino que es literalmente un concepto. Dicho esto, a menudo se usa la misma palabra para describir estructuras de datos que pueden estar disponibles (y concretamente) a través de la biblioteca estándar del idioma de otras tuercas y tornillos básicos.

Mis apuntes:

no explica muy bien este man de ricardo

Bug en la app Android al reproducir en auto, de la definición de data types se pasa a la definición de abstract.

Creo que debería dar el concepto y un ejemplo porque con demasiado concepto técnico se tiende a no entener el objetivo. “para mejorar”

ABSTRACT DATA TYPES Y LAS ESTRUCTURAS DE DATOS

TIPO DE DATOS ABSTRACTO(ADT): Representa un set particular de comportamientos, tiene la capacidad de almacenar datos y además te indica cual es el comportamiento de los datos que tienes almacenados en el.
se puede definir con precisión lo que hará un ADT, que es lo que va a ocurrir dentro de el, que va a hacer, cómo se va a comportar, por ejemplo un array, va a tener un comportamiento con ADT.

LIFO: Se utiliza más en STACK El último dato en ingresar, va a ser el primer dato en salir.
ESTRUCTURA DE DATOS: Es una estrategia para implementar una ADT. Por ej: se puede utilizar un linkedList o un array (estructuras de datos), para implementar un stack (ADT).

ADT más comunes:
Stack (pila)
queue (cola) diferencia del comportamiento, tiene otra lógica
priority queue (cola de prioridades)
Diccionarios (tres árboles)
Graphs (gráficos)

importante: todos los lenguajes de programación tienen distintas implementaciones de ADT, pueden tener algunas cosas en común, como formas o datos que se van a encontrar en cualquier lenguaje, lo único que varía son las instrucciones que se utilizan para acceder a cada uno de ellos

Habia oido sobre los ADT pero hasta ahora me quedaron súper claros!

ADT es a una interfaz ( lo que hace) lo que una estructura de datos es a una clase ( cómo lo hace )

Como yo lo entendí (si te sirve dale like para que se posicione más arriba)

Imaginen que tienen datos dispersos, los ADT son el comportamiento que le vamos a asignar a esos datos dispersos. Y las estructuras de datos son la agrupación de esos datos dispersos (a los cuales ya les asignamos su comportamiento con los ADT).
Creo que es bastante resumido y se hace entender esta explicación. Saludos!!

¿Un ejemplo de STACK podría se cuando presionamos control + t y chrome nos abre la última pagina que cerramos?

se tiende a generar confusión, no entiendo muy bien el tema.

Para el stack imaginense una pila de libros o juegos o galletitas etc. En el caso de las galletas, la ultima que se puso en el paquete en el proceso de producción va a ser la primera que vas a comer.

En el caso de las colas es lo opuesto. Esto imaginenlo como la cola para comprar algo. El que entra primero es el primero en ser atendido.

Este tema lo ví en estructura de datos, pero no he podido adaptarme a la explicación de Ricardo, vamos a ver que pasa más adelante… thks

Esto se esta poniendo interesante.y stresante jajaja

Aquí les dejo un ejercicio algo viejo de pilas y colas que hice en la escuela, ojala sirva:

un stack podrían ser las listas de reproducción

si el Abstract Data type practicamente es una CLASE porque mejor no ver clases?

Muy buena explicación. Las pilas de información se utilizan prácticamente en todos los ámbitos de la sociedad, sobre todo en la gestión de inventarios.

se va poniendo muy complicado entender bien estos conceptos

Necesitaba esta clase. Gracias.

Las Colas también se pueden usar en sistemas de digiturno

Abstract Data Types
- Representación de un set particular de comportamientos
- Almacenar datos
- Definir el comportamiento de los datos almacenados
- Stack, Queue, Priority Queue, Diccionarios, Trees, Graphs

Estructura de datos
- Técnica o estrategia para implementar un ADT
- Usar in LinkedList o un array para crear el stack
- Array, LinkedList, hash tables, trees

RESUMEN :


Un tipo de dato abstracto (ADT) representa un set particular de comportamientos, aunque no define su implementación.
Mientras que una estructura de datos es más concreta. Típicamente es la implementación de un ADT.
Los ADT más básicos serían: Lists, Stacks, Queues, Diccionarios, Arrays, Linked Lists, Trees


ADT (Tipo de dato abstracto) Representa un set de comportamientos, podemos definir con precisión lo que hará un ADT.
Va a tener la capacidad de almacenar datos y decirme el comportamiento de los datos almacenados en él.

  • Stack: Pila
  • Queue: Cola, Tiene la lógica de FIFO: “FIRST IN FIRST OUT”: Primero en entrar, primero en salir.
    dequeue, pick, size, is empty,is full. Estos son independientes del lenguaje.
  • Priority Queue: Cola de prioridades, es lo mismo que Queue el orden de entrada pasa a segundo término y cada valor dentro tiene un valor/ peso/relevancia sale primero.
  • Diccionarios: Lista
  • Trees: Árboles
  • Graphs: Grafos.

Ej:


  • Un stack es una lista que implementa una política de LIFO en elementos agregados y eliminados. Lifo: LAST IN FIRST OUT. “El último dato en ingresar va a ser el último dato en salir”. los Stacks usan estructuras de datos, estas son más concreta y son una técnica o estrategia para implementar un ADT.
    Un LinkedList o Array sirve para implementar un Stack.

  • En Windows está alt+tab para ver las ventanas en que se está trabajando, es tipo LIFO, esto es un ejemplo de como opera un stack.


“Los lenguajes de programación tienen diferentes implementaciones de los Abstrac Data Type, solo debo variar las instrucciones”

Stack: FILO (First in last out)
Queue: FIFO (First in first out)

Me identifico que no conocía los ADT así y los definía como estructura de datos como un todo. Y ahora como se muestra en el video. Las Estructuras pueden o no implementar los ADT o varios ADT y de diferentes tipos a la vez. ¡Excelente!

Me encontre con esto para entender mejor

En pocas palabras, un ADT (tipo de datos abstractos) es más una descripción lógica, mientras que una estructura de datos es concreta.

Piense en un ADT como una imagen de los datos y las operaciones para manipularlos y modificarlos.

Una estructura de datos es lo real, concreto . Se puede implementar y utilizar dentro de un algoritmo.
ADT es para una interfaz ( lo que hace ) lo que una estructura de datos es para una clase ( cómo lo hace ).

Algunos ejemplos:

ADT: List
DS: ArrayList, LinkedList…

ADT: Map
DS: HashMap, TreeMap…

Bibliografia

Ejemplo de LIFO en la vida real:

Una pila de libros, donde el ultimo libro en agregarse a la pila es el primero que vas a agarrar.

Ejemplo de FIFO:

Una cola en un local de comida rapida, donde el primero en llegar a la caja va a ser el primero en ser antendido

ADT exits only in logical form. It’s best expressed in natural language or pseudo code. Example: A List, Map, Stack, etc.

Once the ADT is implemented, it becomes a data structure. Example: A linked-list, a hashmap, etc.

Aprendí más en la sección de preguntas que en la clase

Los Abstract Data Types (ADT) son formas de estructurar y organizar información en programación. Hay tres ADT básicos que se usan mucho: las listas, las pilas y las colas.

  • Las listas son una forma de organizar información en un orden específico, como una lista de tareas pendientes. Puedes agregar, eliminar y buscar elementos en cualquier posición.
  • Las pilas son una forma de organizar información en la que el último elemento que agregas es el primero que sale. Imagina una pila de platos, donde siempre tomas el plato de arriba. Puedes agregar y quitar elementos de la cima de la pila.
  • Las colas son una forma de organizar información en la que el primer elemento que agregas es el primero que sale. Puedes imaginarte una fila para entrar a un concierto, donde el primero en llegar es el primero en entrar. Puedes agregar elementos al final de la cola y eliminarlos del frente.

Estos ADT básicos son importantes en programación porque pueden ayudar a solucionar problemas de muchas áreas, como la inteligencia artificial, la computación gráfica y la ingeniería de software.

// mi aporte
public class Febrero02 {
public static void main(String[] args) {

    String [] name= new String[4];
    String [] id = new String[4];
    float []credit = new float[4];
    String [] address = new String[4];
    int contador=0;

    name[0]="andrea vasquez";
    id[0]="00000001";
    credit[0]=1000;
    address[0]=" avenida Elena, 12-25 zona 1";

    for (int i=0; i<4; i++){
        contador++;
        System.out.println("el nombre " +contador+" es : "+name[i]);
        System.out.println("el id "+contador+" es : "+id[i]);
        System.out.println("el credito "+contador+" es : "+credit[i]);
        System.out.println("la direccion "+contador+" es : "+address[i]);
    }

}

}

Por que los arboles son adt y estructuras de datos?

Los ADT son el concepto de los tipos de datos y las estructuras de datos son la implementación de ese concepto.

Que son los ADT: Son especificaciones abastractcas establecidas por el programador, lo que permite espeficicar las propriedades logicas y funcionales de un tipo de dato, de tal forma que dichas abastracciones trabajen de manera parecidas a los tipos de datos primitidos proporcionados por el lenguaje o sistema en el que se trabaja

Los lenguajes de programación traen distintas implementaciones de los ADT.

  • Las abstract data type ADT, es la representación de un set de particular de comportamiento. Es decir almacena información y te da el comportamiento que se tiene como un stack o pila, que es una lista o array LIFO, Last In, First Out.
  • Las estructuras de datos, es más concreto y es la estrategia para implementar un ADT, como arrays, listas, tablas hash, etc.
  • Los ADT mas comunes son stack o pilas (LIFO), queue o colas (FIFO), prioriy queue, Diccionarios, tree o árboles y graphs o grafos.

Comparto con ustedes las diapositivas para el repaso


.
.

Todos estos conceptos se reflejan mejor con ejemplos, de lo contrario tiende a generar confusión.

Buena explicación

Les recomiendo leer el libro “Data Structures using C”, ahí explican con código y gráficos las diferentes DS y ADTs.

Excelente explicación!

conceptos claros

Me gusto la calcomanía del gatito verde de tu laptop 😒

Cool

Yo lo entiendo un poco como POO.
Las clases serían los ADT y los objetos serían las estructuras de datos usadas.

Interesante

Ya solucioné el problema de las imagenes, este es el código replicado del ejercicio de Ricardo.

Gracias aclaraste conceptos que tenia confusos.

el tema es bien compleo esperemos a entenderlo mas en detalle para aclarar las dudas

Al arrastrar y soltar la imagen solo sale esto:

😃

wtf!!

JAVA
Lists= Lista de datos con sus respectivos métodos se instancia la lista como un objeto en JAVA
Stacks= Es como poner o ingresar datos uno encima del otro apilando una columna y el que ingresaste de primeras esta debajo y el el ultimo que ingresaste esta de primeras para salir de hay su acronimo LIFO
Queue: Es lo tradicional que hacemos en un banco, supermercado, etc, o si quisieras entrar al estadio en una fila ordenada uno tras otro.

🤯

muchas gracias profe ya anote mi resumen.

Slides de la clase a mano:

Si bien es cierto que la ADT y las estructuras son diferentes, esto NO quiere decir que tengan nombre distintos, esa no es la diferencia. Una es el comprtamiento y otro la implementación. Por ejemplo el Stack es un ADT pero tambien existe la estructura de datos Stack en la STL de C++. El primero es el ADT y el segundo la estructura de datos.

Esto no sería grave si una de las pregunstas del examen tiene ese error, o sea está mal planteada y que además el examan tiene tan pocas pregutas que para pasarlo no se puede equivocar en ninguna.

Un Tipo de Dato Abstracto (TDA) es un modelo que define valores y las operaciones que se pueden realizan sobre ellos. Y se denomina abstracto ya que la intención es que quien lo utiliza, no necesita conocer los detalles de la representación interna o bien el cómo están implementadas las operaciones.

Es por esto una práctica que nos provee un grado de abstracción que permite desacoplar al código que usa un TDA de aquel código que lo implementa.

Interesantísimo!!!

aprendiendo

Buena clase

Claramente un ADT no es un sinónimo de Estructura de Datos pero tienen mucho en común.

Aprendo mejor con practica!

muy bueno

un ejemplo de Stack es el call stack en javascript va apilando las funciones a medida que se van ejecutando y las va liberando cuando se terminan por. Por eso cuando una funciòn nunca termina bloquea el call stack rompiendo el programa.

genial, gracias!!

Jajajaja excelente ejemplo con juegos de nintendo switch

Tipos de datos abstractos (ADT)
Un set particular de coportamientos.
Almacena datos & te dice su con presición su comportamiento.
Métodos.

Estructura de datos
Estrategia para implementar una ADT
Array,…

Stack (Pila): Su comportamiento Último en Entrar, Primero en Salir.
Queue (Cola) : Su comportamiento Primero en Entrar, Primero en Salir.

los términos ADT y Abstracción de Datos de manera equivalente, y esto es debido a la similitud e interdependencia de ambos. Sin embargo, es importante definir por separado los dos conceptos.
|
Abstract Data Types (ADT)
|
Es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.
La abstracción de datos consiste en ocultar las características de un objeto y obviarlas, de manera que solamente utilizamos el nombre del objeto en nuestro programa.
Un usuario no necesita mencionar todas las características y funciones de un objeto cada vez que este se utiliza, sino que son declaradas por separado en el programa y simplemente se utiliza el término abstracto para mencionarlo.

    Por ejemplo: Cuando yo digo la palabra “perro”, no es necesario que yo le diga lo que hace el perro. Usted ya sabe la forma que tiene un perro y también sabe que los perros ladran. De manera que yo abstraigo todas las características de todos los perros en un solo término, al cual llamo “perro”.

“perro” es un Tipo de Dato Abstracto y todo el proceso de definirlo, implementarlo y mencionarlo es a lo que llamamos Abstracción de Datos.

Definición de ADT.

La principal diferencia radica en que los ADT son estructuras de datos con un comportamineto diferente.
Un Stack puede ser un Array con la logica LIFO.

Una buena analogia es verlo como las distribuciones de linux:
donde las estructuras de datos serian el kernel y los ADT serian las distribuciones (Ubuntu, Mint, etc).

  1. Mis apuntes sobre: "Abstract Data Types básicos: Lists, Stacks, Queues"
    Un tipo de dato abstracto (ADT) representa un set particular de comportamientos.
    Podemos definir con precisión lo que hará un ADT.
    Un stack es una lista que implementa una política “LIFO” en elementos agregados y eliminados.

Una estructura de datos es más concreta. Típicamente es una técnica o estrategia para implementar una ADT.
Por ejemplo, podemos utilizar una Linked List o un Array (estructuras de datos) para implementar un Stack (ADT).

Stack (Pila): Tiene un comportamiento LIFO (Last In First Out), último en entrar, primero en salir.
Queue (Cola): Tiene un comportamiento FIFO (First In, First Out), Primero en entrar, primero en salir.

*Algunos de los ADT más comunes que debes conocer como programador preparado son:
Stack (pila), Queue (cola), Priority Queue(cola de prioridades), Diccionarios, Trees (árboles), Graphs (grafos).

*Algunas de las estructuras de datos usadas para implementar esos ADTS son:
*Array, linked list, hash tables.
*Trees.