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

Creando tu primera Queue: implementar la función enQueue

17/42
Recursos

En esta clase nos pusimos a estructurar el código la función enQueue que recibe un entero y agrega ese valor a la cola del queue.

Aportes 67

Preguntas 4

Ordenar por:

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

Mi aporte: lo realicé con Angular y le agregué una parte gráfica para que sea más simple de entender:

https://stackblitz.com/edit/first-queue-unk47u

Comparto mi código (inclui una función para ver por consola cómo está funcionando el algoritmo)
 

const SIZE = 5;
let rear = -1, front = -1, show = ""
let values = new Array(SIZE)
// ESTO SOLO ES PARA IMPRIMIR EN PANTALLA
function Show() {
  values.forEach(value => {
    show += " " + value;
  });  
  console.log(`Array = ${show}`);
  console.log(`Front = ${front} Rear = ${rear}`);
}
Show();
// ESTA ES LA FUNCION QUE IMPORTA
function enQueue(val) {
  if (rear == SIZE-1) {
    console.log(`${val} no se pudo insertar, el queue esta lleno`);
  }
  else {
    if(front == -1){
      front = 0;
    }
    rear++
    values[rear] = val
    console.log("Se inserto " + val );
  }
}
enQueue(1);
enQueue(2);
enQueue(3);
enQueue(4);
enQueue(5);
enQueue(6);
Show();

Salida por consola:

Array = 
Front = -1 Rear = -1
Se inserto 1
Se inserto 2
Se inserto 3
Se inserto 4
Se inserto 5
6 no se pudo insertar, el queue esta lleno
Array =  1 2 3 4 5
Front = 0 Rear = 4```

Shift + Alt + a = Comentar todo el código seleccionado

Excelente clase me quedo todo super claro, te recomiendo usar las llaves para el if else ya que de esta forma el codigo sera mucho mas facil de entender para nosotros

Dejo mi version de la implementación de Queue con JavaScript

class Queue {
  constructor () {
    this.sizeMax = 5
    this.items = []
  }

  enqueue (value) {
    if (this.items.length >= this.sizeMax) {
      return 'Nuestro Queue esta lleno'
    }

    this.items[this.items.length] = value
    return `Se inserto el valor ${value} en el Queue`
  }

  dequeue () {
    let element = null

    if (this.items.length === 0) {
      return 'Nuestro Queue esta vacio'
    } else if (this.items.length === 1) {
      element = this.items[0]
      this.items.length = 0
    } else {
      for (let i = 0; i < this.items.length; i++) {
        if (i === 0) {
          element = this.items[i]
          continue
        }

        this.items[i - 1] = this.items[i]

        if (i === this.items.length - 1) {
          this.items.length = i
          break
        }
      }
    }

    return element
  }

  peek () {
    return this.items[0]
  }

  size () {
    return this.items.length
  }

  isEmpty () {
    return this.items.length === 0
  }

  isFull () {
    return this.items.length === this.sizeMax
  }
}```

mi aporte en javascript

<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
		var array=[0,0,0,0,0];
		var front=-1;
		var rear=-1;
		

		function enQueue(v){
			if(rear<(array.length-1)){
				rear++;
				array[rear]=v;
				document.write("el valor del array en la posicion array["+rear+"] es = "+array[rear]+"<br>");
			}else{
				document.write("el array esta lleno <br>");
			}
		}
		enQueue(2);
		enQueue(4);
		enQueue(5);
		enQueue(7);
		enQueue(8);
		enQueue(1);
		enQueue(4);
		

	</script>
</body>
</html>
<code>

Lo estoy haciendo en Java 😃

public class Queue {

    public final int SIZE = 5;
    private int front;
    private int rear;
    private int[] values = new int[SIZE];

    /**
     * Añade un elemento de la cola si y sólo si hay espacio en el array.
     * */
    void enQueue(int value) {
        if (rear == SIZE-1) {
            System.out.println("Nuesto Queue está lleno.");
        } else {
            if (front == -1) front = 0;

            rear++;
            values[rear] = value;
            System.out.println("Se insertó el valor: " + value + " correctamente");
        }
    }

}

Realice el ejercicio en JS, el html cuenta con 2 botones, uno para el ingreso de clientes y otro para cuando son atendidos, de igual forma dos párrafos uno para mostrar el array y el otro para mostrar el numero de clientes que han ingresado al restaurante.

var Size = 10; //Cantidad de espacios en el array

var Turn = []; //Array de control 
var Cliente = 0; //Numero de clientes

var Ingreso = document.getElementById("In"); //Boton Ingreso de cliente
Ingreso.addEventListener("click", enQueue);
var Salida = document.getElementById("Out"); //Boton de Cliente atendido
Salida.addEventListener("click", Out);

var Rank = document.getElementById("Array"); //Parrafo para mostrar el Array
Rank.innerHTML = Turn;
var Next = document.getElementById("Pending"); //Parrafo para mostrar numero de clientes que han ingresado
Next.innerHTML = Cliente;

function enQueue() // Ingreso
{
    if (Turn.length>=Size)
    {
        console.log("Limite superado "+Turn.length);
        Rank.innerHTML = Turn;
        Next.innerHTML = Cliente;
    }
    else
    {
        Cliente++;
        Turn.push(Cliente);
        console.log("Cliente ingresado "+Turn.length);
        Rank.innerHTML = Turn;
        Next.innerHTML = Cliente;
    }
}
function Out() //Salida
{
    if (Turn.length<=0)
    {
        Rank.innerHTML = "No tienes clientes";
    }
    else
    {
        Turn.shift();
        console.log("Cliente ingresado "+Turn.length);
        Rank.innerHTML = Turn;
        Next.innerHTML = Cliente;
    }    
}

No se si es la forma de explicar o la falta de conocimientos previos pero se me hace algo revuelto la forma de ir explicando de Ricardo.

Desde python

SIZE = 5

def enQueue(value):
	if rear is SIZE - 1:
		print('Nuestro queue está lleno\n')

	else:
		if front is -1:
			fornt = 0
		rear++

		values[rear] = value
		print('El valor ' + value + ' se inserto correctamente\n')```

Hola Ricardo: Excelente curso. Tengo una pregunta: ¿En este código no es necesario declarar rear, front y values ? Saludos.

Seria excelente que en la sección de archivos ya incluyeras el código comentado con la función que hace cada linea de código. así mismo al principio del todo el objetivo del código a realizar. Tome un curso anterior de arduino y el programador lo hacia de esa manera y todo quedaba mas claro.

Si como a mí no te funcionan muchos de los shortcuts de VScode puedes ir a

File > Preferences > Keyboard Shortcuts 

Y desde ahí definirlos como el profe lo indica o personalizarlos a tu gusto

Código en Java:

void EnQueue (int value)
{
	if (rear == size-1)
		System.out.println("The queue is full.");
	else
	{
		if (front == -1)
			front = 0;
		rear++;
		items[rear] = value;
		System.out.println("Value" + value + "has been inserted correctly.");
	}
}

Muy buena explicación, profe Celis

#include  <stdio.h>
#define SIZE 5

void enQueue(int value){
    if (rear == SIZE-1)
    printf("Nuestro Queue esta lleno\n");
    else {
        if(front == -1)
            front = 0;
        rear++;
        items[rear] = value;
        printf("Se inserto el valor correctamente %d correctamente \n", value);
    }
}

Bien!

#include<stdio.h>
#define SIZE 5

void enQueue(int value)
{
  if(rear == SIZE-1)
    print("Nuestro Queue esta lleno\n");
  else
  {
    if(front == -1)
        front = 0;
    rear++;
    values[rear] = value;
    print("Se inserto el valor %d correctamente\n", value);    
  }

}

Me encanto porque lo entendí, claro después de ver el video varias veces y con la lógica que requiere.

Excelente explicación.

/*stdio.h por que en este programa necesito imprimir
lo que sea que estoy guardando en mi queue.
voy a usar #define para ir definiendo el tamaño de mi array
El hecho de usar definiciones nos ayuda a hacer cambios cuando tenemos
un programa muy grande.
 */

#include <stdio.h>
#define SIZE 5

void enQueue(int value){
/* escribimos Void por que esta funcion no nos va a retornar nada
si trabajamos con nombre en vez de int seria char
Si nos fuese a retornar un valor entero seria int */
    if(rear == SIZE-1)
    printf("Nuestro Queue está lleno\n" );
    else {
        if(front == -1)
            front = 0;
        rear++;
        values[rear] == value;
        printf("Se inserto el valor %d correctamente\n", value)
    }

}

yo lo implemente así no si se si a sido correcto el planteamiento pero bueno veré que depara la siguiente clase
![](

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5

int items[5];

void enQueue(const int valor){
    short rear;
    for(rear = 0; rear < 5;++rear){
        if(items[rear] == -1)
            break;}
    if(rear < SIZE){
        items[rear] = valor;
        printf("se ha ingresado el valor %d\n",valor);}
    else
        printf("nuestro Queue esta lleno\n");}

void inicializar(int *cola){
    short i;
    for(i = 0; i < SIZE; ++i)
        cola[i] = -1;}

void imprime(int *cola){
    short i;
    for(i = 0; i < SIZE; ++i)
        printf("el %d vaor es : %d\n", i+1,items[i]);}

int main(void)
{
    inicializar(items);
    enQueue(5);
    enQueue(8);
    enQueue(9);
    enQueue(3);
    enQueue(1);
    enQueue(6);//aqui ya esta lleno
    imprime(items);

    return 0;
}```

#define: Es una funcion de C, que se usa para definir tipos de variable, ademas cuadno tenemos un proyecto y necesitamos hacer modificaciones de estaa manera ya sabremos donde se ubica la definicion de variable para modificarla o por ejempl ocambiar el tamaño del array

Ejemplo de uso de define: La instrucción #define nos permite declarar variables (const) de una manera rápida y sencilla. Hay que tener en cuenta que al declarar variables con #define debemos hacerlo despues de los #include para importar librerías pero antes de declarar nuestras funciones y demás. Veamos un ejemplo:

< #include <std.h>
#define PI 3.1416

int main()
{
    printf("El valor de PI es: %s\n",PI);
    return 0;
} >

ni modos aun no se sabe si corre bien 🐧😶‍🌫️

Realmente no hace falta poner if (front == -1) no? porque si ponemos que el valor es igual a -1 cuando entre en el else de enqueue se sumará y valdrá 0 igualmente

Mi duda es. Al realizar la comparación rear == SIZE -1 NO está validando la cantidad de valores en el queue, lo que está haciendo es validar la longitud de rear con SIZE. ¿cierto o no?

Importante mostrar y aclarar que rear debe tener como valor inicial -1,para que cuando su sume el incremento el elemetno quede guarado en la posision [0], en Java seria algo asi:

int rear = -1;
rear++;
items[rear] = value;

En Python

# Python program to 
# demonstrate implementation of 
# Queue (FIFO) using lists

queue = ["","","","",""]
size = 5
front = -1
rear = -1

def insert(value):
    global queue
    global size
    global front
    global rear
    if rear == len(queue)-1:
        print("Queue is full")
    else:
        if front == -1:
            front = 0
        rear += 1
        queue[rear] = value

def run():
    insert("x1")
    insert("x2")
    insert("x3")
    insert("x4")
    insert("x5")
    insert("x6")
    print(f'{queue} front: {front} rear: {rear}')
    
if __name__ == "__main__":
    run()```

Ejemplo de uso de define: La instrucción #define nos permite declarar variables (const) de una manera rápida y sencilla. Hay que tener en cuenta que al declarar variables con #define debemos hacerlo despues de los #include para importar librerías pero antes de declarar nuestras funciones y demás. Veamos un ejemplo:

#include <std.h>
#define PI 3.1416

int main()
{
    printf("El valor de PI es: %s\n",PI);
    return 0;
}

Excelente clase todo muy esta quedando cada vez mas claro reforzando e leyendo la lista creada de lo que debe hacer el algoritmo creado, he podio entender mas a fondo 😃.

No comprendo porque hacerlo tan elaborado, cuando podemos hacer un array y acceder a sus celdas fácilmente.

apenas iba a comentar lo de \n y lo corrigió jejee

Corrigiendo errores

class Cola:
    
    def __init__(self, max_e):
        self.max_element = max_e
        self.cola = list()
        
    
    def encolar(self, e):
        if (len(self.cola) < self.max_element):
            self.cola.append(e)
        else:
            print("Cola llena")
            
    def desencolar(self):
        if (len(self.cola) > 0):
            return self.cola.pop(0)
        else:
            print("La cola está vacia")
    
    
    def imprimir(self):
        return self.cola
        
        
    def disponibles(self):
        return self.max_element - len(self.cola)
    
    
    def llena(self):
        if (len(self.cola) == self.max_element):
            return True
        else:
            return self.disponibles()
        

if __name__ == '__main__':
    reserva = Cola(5)
    reserva.encolar("Pedro")
    reserva.encolar("Juan")
    reserva.encolar("Alicia")
    print("Imprimimos reservas pendientes {}".format(reserva.imprimir()))
    print("Quedan {} disponibles".format(reserva.disponibles()))
    print("El siguiente es {}".format(reserva.desencolar()))
    print("Imprimimos reservas pendientes {}".format(reserva.imprimir()))

Aquí dejo el código de la Cola en Java.

<code>
public class Cola<T> {

private Object[] elements;

private int numElemts;

private int count = -1;

public Cola(int numElements) {
	this.numElemts = numElements;
	elements = new Object[numElements];
}


public void enQueue (T element) {
	
	if(count == numElemts -1) {
		
		System.out.println("La cola a alcanzado el numero total de elementos: " + numElemts);
	}
	else {
		count++;
		elements[count] = element;
	}
	
}


public Object deQueue() {
	
	if(count >= 0) {
		Object aux = elements[0];
		
		for( int j=0; j<=count-1; j++ )
		{
			elements[j]=elements[j+1];
		}
		count--;
	return aux;
		
	}
	
	return "No hay datos en la cola";
	
}


public Object[] getElements() {
	return elements;
}


public int getCount() {
	return count;
}

}
</code>

este es mi código en python, lo hice en funciones

import logging
logging.basicConfig(level=logging.INFO)
class Queue(object):
    def __init__(self,max_size):
        self.__rear=-1
        self.__front=-1
        self.__queue=[]
        self.__max_size=max_size-1
        pass
    def enQueue(self,data):
        if self.__rear<self.__max_size:
            self.__queue.append(data)
            logging.info('el dato {} ha sido agregado'.format(str(data)))
            self.__rear+=1
        
        else:
            logging.info('el queue ya ha alcanzado su capacidad maxima')
        pass
    def deQueue(self):
        if self.__rear>-1:
            logging.info('el dato {} ha sido retornado y removido'.format(self.__queue[0]))
            self.__front+=1
            self.__rear-=1
            return self.__queue.pop(0)
        else:
            logging.info('no existen más datos en el queue')
        pass
    def returnQueue(self):
        return self.__queue
    pass
queue=Queue(5)
queue.enQueue(1)
queue.enQueue(2)
queue.enQueue(3)
queue.enQueue(4)
queue.enQueue(5)
queue.enQueue(6)
queue.deQueue()
queue.deQueue()
queue.deQueue()
queue.deQueue()
queue.deQueue()```

gracias

Existe algún glosario para conocer cada comando que se implementa en este ejercicio y en los próximos?

#include <stdio.h>
#define SIZE 5

void enQueu(int value){
if(rear == SIZE - 1)
printf(“ESTA LLENO \n”);
else
{
if(front == 1)
front = 0;
rear ++;
values[rear] = value;
printf(“Valor insertado : %d \n”, value);
}

}

enQueue en Javascript

var maxSize= 5;
		var array=[];
		var front=-1;
		var rear=-1;
		

		function enQueue(v){

			if(!(rear>=maxSize-1)){
				rear++;
				array[rear]=v;
				document.write("el valor del array en la posicion array["+rear+"] es = "+array[rear]+"<br>");
				front=0;
			}else{
				document.write("el array esta lleno <br>");
			}
		}
		
		for(y in array){
			document.write("array["+y+"]= "+array[y]+"<br>");
		}```
var maxSize = 5;
var rearIsThevalueFarToOut = -1;
var frontIsTheValueNearToOut = -1;
var items = [];

function enQueue(value) {
    if(rearIsThevalueFarToOut == maxSize-1){
        console.log("Our queue is full");
        if (frontIsTheValueNearToOut == -1) {
            frontIsTheValueNearToOut = 0;
            rearIsThevalueFarToOut++;
            items[rearIsThevalueFarToOut] = value;
            console.log("The value was inserted correctly", value);
        }

    }

}

en c++

#include <iostream>
#define size 5
using namespace std;

void enQueue(int value)
{
    if(rear == size-1)
    cout<<"nuestro Queue esta lleno"<<endl;
    else{
        if(front == -1)
            front = 0;
        rear++;
        values[rear] = value ;
        cout<<"se inserto el valor"<<value<<"correptamente" ;
    }
}

Para comentar en visual studio code para mi es:
Comentar ctrl + k + c
Descomentar ctrl + k + u
Nota no dejas de presionar ctrl hasta que presiones las siguientes dos teclas

*/

#include<stdio.h>
#define SIZE 5

void enQueue(int value){
    if(rear == SIZE-1)    
      printf("Nuestro Queue esta lleno \n" );
    else {
        if(front == -1)
            front = 0;
        rear++;
        values[rear] = value;
        printf("Se inserto el valor %d correctamente\n", value);
    }

}
#include <stdio.h>

#DEFINE SIZE 5


// Insertar un valor a la cola
void enQueue( int value ) {

  // Condicion de ver si la cola ya esta llena
  if ( rear == ( SIZE - 1 ) ) {
    printf("Nuestro queue esta lleno\n");
    return;
  }

  // Si no hay elementos, inicializar el front
  if ( front == -1 ) {
    front = 0;
  }

  // Extender el rear e insertar el valor
  rear++;
  items[rear] = value;
  printf("Se inserto el valor %d correctamente\n", value);
}



int main(int argc, char const *argv[]) {
  
  return 0;
}```

*/
#include<stdio.h>
#define SIZE 6

void enQueu(int value){
if(rear == SIZE-1)
print(“nuestro queue esta lleno\n”);
else{
if(front == -1)
front = 0
rear++;
items[rear] = value;
printf(“se inserto el valor correctamente%d correctamente\n”)
}
}

#include<stdio.h>
#define SIZE 5

void enQueue(int value)
{
	if (rear == SIZE - 1)
		printf("Nuestro Queue está lleno\n");
	else 
	{
		if (front == -1)
			front = 0;
		rear++;
		items[rear] = value;
		printf("Se insertó el valor correctamente %d correctamente\n", value);
	}
}```

este es mi codigo

#include "stdio.h"
#include "stdlib.h"
#define SIZE 5

void enQueue(int value){
    if(rear == SIZE - 1)
      printf("nuestro queue esta lleno\n");
    else{
        if(front == -1)
           front = 0;
        rear++;
        values[rear] = value;
        printf("se inserto el valor %d correctamente\n", value);

    }

}
    

Que extencion recomiendan para C/C++ ?

así quedo mi código.

#include <sfaio.h>
#include <stdlib.h>

#define SIZE 5

void enQueue(int value)
{
	if(rear == 5-1)
	{
		printf("Nuestro Queue esta lleno \n");
	}else{
		if(front == -1)
		{
			front = 0;	
		}
		
		rear++;
		values[rear] = value;
		printf("Se inserto el valor %d correctamente. \n", value);
	}
}```

Función enQueue en C.

void enQueue(int value) {
    if(rear == SIZE - 1) {
        printf("Full queue :(\n");
    } else {
        if(front == -1) front = 0;
        rear++;
        queue[rear] = value;
        printf("Item %i added to queue at position %i.\n", value, rear);
    }
}
<code>
#include <stdio.h>
#define SIZE 5

int front=0, rear=0;
void enQueue(int value){
	if((rear +1) % SIZE != front) {
		queue[rear++] = value;
		rear %=SIZE;
		printf(“Item %i added to queue at position %i.\n”, value, rear);
	} else 
		printf(“Sorry, queue is full\n”);
	
}

</code>

Bueno el planteamiento, la expectativa se centra en la ejecución

Las ordenes que él escribe con palabras, su termino es pseudo Codigo 😉

Soy poco menos que neofito en programación, por supuesto incluye Python, así que recibo feedback, por supuesto lo iré mejorando en la medida de la práctica, ya que se requiere que los nombres de los clientes vayan a una base de datos, debería recibir el menú e insertarlo en una lista, entre otros…

def queue():
    turno = 0
    LIMITE = 4
    while turno <= LIMITE:

        nombre = input('Por favor Inserte Nombre del cliente:')
        turno += 1
        if turno <= LIMITE:
            print('{}, tu turno es el numero {}'.format(nombre, turno))
        else:
            print('Lo sentimos {}, no tenemos espacico en este momento, por favor regresa despues'.format(nombre))


if __name__ == "__main__":
    queue()

Si se construyeran arrays donde se empezara en 1 y no en cero como esta establecido en los lenguajes de programación, ¿ya no seria necesario colocar el -1 en la condicional?

Honestamente no le había entendido del todo bien pero que bueno que el profe hizo el repaso al final

let arr = [0,0,0,0,0]
    let front, rear = -1;
    
    const algoritmo = n => {
        if(rear < (arr.length - 1)){
            rear++
            arr[rear] = n
            document.write(`El cliente <strong>${arr[rear]}</strong> se le asigno la meza  <strong>${rear}</strong><br>`)
        }else{
            document.write(`No hay mas lugares disponibles.`)
        }
    }

    algoritmo("Marcelo Rodriguez")
    algoritmo("Agusto Batalla")
    algoritmo("Juan Urirate")
    algoritmo("Federico Fernadez")
    algoritmo("Ana Rojas")
    algoritmo("Ana Rojas")

Algoritmo con js (arrow Function)

Les comparto el código realizado hasta el momento, en C.

#include <stdio.h>
#define SIZE 5

void enQueue(int value)
{
    if(rear==SIZE-1)
    {
        printf("Our queue is full\n");
    }
    else
    {
        if(front==-1)
        {
            front=0;
        }
        rear++;
        items[rear]=value;
        printf("The value %i has been inserted correctly\n",value);
    }
}

Buena clase!

Camel Case, es un estilo de escritura utilizado como buena práctica al momento de escribir código, aquí les dejo el enlace con la explicación Ricardo esta utilizando lowerCamelCase (o simplemente CamelCase) Ejemplo: ejemploDeLowerCamelCase.