Mi aporte: lo realicé con Angular y le agregué una parte gráfica para que sea más simple de entender:
Bienvenido al Curso
Introducción al curso básico de algoritmos y estructuras de datos
Introducción a los algoritmos
¿Qué entiende una computadora?
Lenguajes de programación
Estructuras de datos
¿Qué es un algoritmo?
Metodología para la construcción de un algoritmo
Variables y tipos de datos
User defined data types
Instalando Ubuntu Bash en Windows
Creando nuestro user defined data type
Abstract Data Types básicos: Lists, Stacks, Queues
Explicación gráfica Data Types básicos
Glosario de funciones para Abstract Data Types
Clases y objetos
Creando tu primera Queue: Arrays
Creando tu primera Queue: implementación.
Creando tu primera Queue: implementar la función enQueue
Creando tu primera Queue: implementar la función deQueue
Creando tu primera Queue: main code
Algoritmos de ordenamiento
Algoritmos de ordenamiento
Bubble sort
Bubble sort: implementación
Bubble sort: main code
Insertion sort
Desafío: implementa un algoritmo de ordenamiento
Recursividad
Recursividad
La función Factorial, calculando el factorial recursivamente
Manejo de cadenas de caracteres
Arte: Generando arte recursivo
Divide and conquer y programación dinámica
Divide and Conquer (divide y vencerás)
Qué es la programación dinámica (divide y vencerás v2.0)
MergeSort
Desafío: Buscar el algortimo más rápido de sort
Implementando QuickSort con Python
Implementando QuickSort con Python: main code
Algoritmos 'Greedy'
Qué son los Greedy Algorithm
Ejercicio de programación greedy
Ejercio de programación greedy: main code
Grafos y árboles
Grafos y sus aplicaciones
Árboles
¿Cómo comparar Algoritmos?
Cómo comparar algoritmos y ritmo de crecimiento
¿Qué sigue?
Cierre del curso y siguientes pasos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Ricardo Celis
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
Mi aporte: lo realicé con Angular y le agregué una parte gráfica para que sea más simple de entender:
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!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?