Python - Problema al eliminar elemento de una cola circular.

 
Vista:
sin imagen de perfil

Problema al eliminar elemento de una cola circular.

Publicado por Gustavo (5 intervenciones) el 03/10/2021 07:32:42
Hola, estoy tratando de hacer un programa de colas de maximo 5 elementos y estoy teniendo un problema a la hora de eliminar un elemento cuando mi cola se vuelve circular, explico, cuando lleno mi cola y elimino 3 elementos me van a quedar 2 elementos en las posiciones 4 y 5, si ingreso otro elemento la cola se volvera circular y el nuevo elemento se ingresara en la posicion 1, el problema esta en que no logro encontrar una manera para que me elimine el de la posicion 4 y no el de la posicion 1. Si alguien me puede ayudar lo agradeceria mucho.

Codigo y algoritmos para insertar y eliminar a la cola:
#Insertar un elemento en una cola
#1.- Si (frente = final + 1) o (frente = 1 y final = n) escribir
# "desbordamiento" y terminar
#2.- Si no encontrar el nuevo valor de final
# a) si frente = 0 y final = 0 entonces
# hacer frente = final = 1
# b) si no
# si final = n y frente != 1
# hacer final = 1
# c) si no
# hacer final = final + 1
# Fin_paso2
#3.- Hacer cola [final] = elemento
#4.- terminar

#Eliminar un elemento de una cola
#1.- Si (frente = 0 y final = 0) entonces escribir
# "cola vacía" y terminar
#2.- si no
# Hacer elemento = cola [frente]
#3.- Encontrar el nuevo valor de frente
# a) si frente = final entoces /*solo tenía un elemento*/
# hacer frente = final = 0
# b) si no
# si frente = n entonces (Inciso h ejercicios)
# hacer frente = 1
# c) si no
# hacer frente = frente + 1
# fin si
#4.- terminar
import os

cola = []
frente = 0
final = 0

while True:
print("Menu")
print("Seleccione una opcion:")
print("1. Introducir datos:")
print("2. Eliminar datos:")
print("3. Mostrar cola:")
print("4. Terminar.")
opcion=input()

if opcion == "1":

if frente == final + 1 or frente == 1 and final == 5:
print("Desbordamiento")

else:
if frente == 0 and final == 0:
frente = final = 1
elif final == 5:
final = 1
else:
final += 1
valor = int(input("ingrese un elemento: "))
cola += [valor]

elif opcion == "2":
if frente == 0 and final == 0:
print("Cola vacía")
else:
del(cola[frente-1])
if frente == final:
frente = final = 0
elif frente == 5:
frente = 1
else:
frente += 1
elif opcion == "3":
print (cola,
frente,
final)

elif opcion == "4":
break
os.system("pause")
os.system("cls")
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problema al eliminar elemento de una cola circular.

Publicado por tincopasan (937 intervenciones) el 03/10/2021 14:07:39
1) inserta el código usando el tag </>Código
2) ¿hay que usar si o si ese mal algoritmo en intento de solución o se puede realmente usar python como corresponde?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema al eliminar elemento de una cola circular.

Publicado por Gustavo (5 intervenciones) el 03/10/2021 20:57:13
tengo que usar ese algoritmo jajajaja, pero si no se puede pues usando python como corresponde
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problema al eliminar elemento de una cola circular.

Publicado por tincopasan (937 intervenciones) el 06/10/2021 06:04:02
Me olvidé de esta pregunta, dicho sea de paso, para que sea realmente circular como una cola (first in, first out) cuando agregas elementos estos ocupan la última posición, no la primera, no voy a usar lo que te piden como tal en ese código, sino que mostraré como se puede hacer sin usar deque(de collections) pero haciendo algo similar, aunque declarado más en python y no como se les ocurre a los maestros o profesores. Lamento que no te servirá como tal pero quiza te oriente, en todo caso eliminas la clase y las funciones y lo haces como quieras. Si usaré el estilo del menú, por vago y no escribir de más.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#-*- coding: utf  -8 -*-
import os
class Cola:
    def  __init__(self):
        self.inicio=None
        self.final=None
        self.Cola=[]
    def Primero(self):
        return self.inicio
    def Final(self):
        return self.final
    def Agregar(self,elemento):
        self.Cola.append(elemento)
        self.final=elemento
        self.inicio=self.Cola[0]
        return self.final,self.inicio
    def Elimina(self):
        self.Cola.pop(0)
        self.inicio=self.Cola[0]
        return self.inicio
    def __str__(self):
        return str(self.Cola)
    def __len__(self):
        return len(self.Cola)
 
def principal():
    lista=Cola()
    while True:
        print("Menu")
        print("Seleccione una opcion:")
        print("1. Introducir datos:")
        print("2. Eliminar datos:")
        print("3. Mostrar cola:")
        print("4. Terminar.")
        opcion=input(">>> ")
        if opcion == "1":
            if lista.__len__() == 5:
                print("Desbordamiento")
            else:
                lista.Agregar(int(input("ingrese un elemento: ")))
        elif opcion == "2":
            if lista.__len__() == 0:
                print("Cola vacía")
            else:
                lista.Elimina()
                print("Primer elemento eliminado")
        elif opcion == "3":
            if lista.__len__() == 0:
                print("Cola vacia")
            else:
                print (lista,lista.inicio,lista.final)
        elif opcion == "4":
            break
        os.system("pause")
        os.system("cls")
 
if __name__=="__main__":
    principal()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil

Problema al eliminar elemento de una cola circular.

Publicado por Gustavo (5 intervenciones) el 07/10/2021 22:57:23
Gracias, esta bastante bien lo que hiciste, de hecho yo ya estaba empezando a usar clases porque no encontraba una solucion, y bueno, s me ayudaste bastante para guiarme, lo de eliminar que hiciste me funciona bastante bien, pero en la parte de imprimir me solicitan saber el valor de mi inicio y mi valor del final, no el elemento que esta al inicio y final, si no que posicion representan, ademas de que si mi valor final esta al principio de la cola imprimir mi elemento final al principio, no se si se me entiende, o estoy entendiendo mal como funciona una cola circular.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar