Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mar90_13 en 29 Julio 2022, 20:53 pm



Título: Cola limittar elementos
Publicado por: Mar90_13 en 29 Julio 2022, 20:53 pm
¿Cómo establezco el numero de elementos que acepta la cola?
Y ¿como muestro el elemento al principio de la cola?

Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. struct Nodo{
  9. int dato;
  10. Nodo *siguiente;
  11.  
  12. };
  13.  
  14. void insertarCola(Nodo *&,Nodo *&, int);
  15. void mostrarCola(Nodo *&);
  16. bool cola_vacia(Nodo *);
  17. void eliminarCola(Nodo *&,Nodo *&, int &);
  18. void frenteCola(Nodo *&);
  19. void finalCola(Nodo *&);
  20.  
  21. int main(){
  22. Nodo *frente = NULL;
  23. Nodo *fin = NULL;
  24. int dato[10];
  25.  
  26. cout<<"\nIngrese el valor para la COLA: ";
  27. cin>>dato[10];
  28. insertarCola(frente,fin,dato[10]);
  29. cout<<"\nValor: " <<dato[10]<< " ingresado correctamente\n";
  30. system("pause");
  31.  
  32.  
  33. mostrarCola(frente);
  34. system("pause");
  35. frenteCola(frente);
  36. system("pause");
  37. finalCola(fin);
  38. system("pause");
  39.  
  40.  
  41. cout<<"\nLos valores fueron eliminados correctamente ";
  42. while (frente !=NULL){
  43. eliminarCola(frente,fin,dato[10]);
  44. if(frente !=NULL){
  45. cout<<dato<<" , ";
  46. }
  47. else{
  48. cout<<dato<<" . ";
  49. }
  50. }
  51. cout<<"\n";
  52. system("pause");
  53.  
  54. system("cls");
  55.  
  56. getch();
  57. return 0;
  58. }
  59.  
  60.  
  61. //Función para insertar valores a la COLA
  62. void insertarCola(Nodo *&frente, Nodo *&fin, int n){
  63. Nodo *nuevo_nodo = new Nodo();
  64. nuevo_nodo->dato = n;
  65. nuevo_nodo->siguiente = NULL;
  66.  
  67. if(cola_vacia(frente)){
  68. frente = nuevo_nodo;
  69. }
  70. else{
  71. fin->siguiente = nuevo_nodo;
  72.  
  73. }
  74.  
  75. fin = nuevo_nodo;
  76. }
  77.  
  78. void mostrarCola(Nodo *&frente){
  79. while(frente !=NULL){
  80. cout<<"Datos de la cola: "<<frente->dato<< "\n";
  81. frente=frente->siguiente;
  82. }
  83. }
  84.  
  85. //Función determinar si la cola esta vacía
  86. bool cola_vacia(Nodo *frente){
  87. return (frente == NULL)? true : false;
  88. }
  89.  
  90. //Función para mostrar el principio de la COLA
  91. void frenteCola(Nodo *&frente){
  92. while(frente != NULL){
  93. cout<<"Dato: " <<frente->dato<< " se encuentra al frente de la COLA\n";
  94. frente = frente->siguiente;
  95. }
  96.  
  97. }
  98.  
  99. //Función para mostrar el final de la cola
  100. void finalCola(Nodo *&fin){
  101. while (fin != NULL){
  102. cout<<"Dato: " <<fin->dato<< " se encuentra al final de la COLA\n";
  103. fin=fin->siguiente;
  104. }
  105. }
  106.  
  107. //Función para extraer valores de la COLA
  108. void eliminarCola(Nodo *&frente,Nodo *&fin, int &n){
  109. n = frente->dato;
  110. Nodo *aux = frente;
  111.  
  112. if(frente == fin){
  113. frente = NULL;
  114. fin = NULL;
  115.  
  116. }
  117. else{
  118. frente = frente->siguiente;
  119.  
  120. }
  121. delete aux;
  122. }

MOD: El código debe ir entre etiquetas de Código GeSHi


Título: Re: Cola limittar elementos
Publicado por: Serapis en 29 Julio 2022, 21:25 pm
¿Cómo establezco el numero de elementos que acepta la cola?
Durante diseño, puedes establecer una constante: MaxItems
O durante ejecución, puedes optar por solicitar el valor al inicializar o que pueda cambiarse en cualquier momento.

- Se establece durante diseño, cuando se conoce la aplicación destino y por tanto que el límite impuesto es el adecuado.
- Se establece al inicializar la instancia cuando el consumidor conoce el valor que resulta adecuado.
- Se establece y cambia en cualquier momento, cuando el valor depende directa o indirectamente de otros valores de los que la instancia no mantiene control...  Este caso puede ser un poco complejo, ya que si el nuevo límite se establece a un valor menor que el previo establecido, hay que decidir que hacer con los elementos 'sobrantes', si se eliminan o no, y en caso de eliminarlos, de dónde (principio, final) o cuales (si hay algún dato extra asociado, por ejemplo una fecha por lo que referiría a antigüedad (ojo, esa antigüedad no necesariamente se refiere a la fecha de introducción si no a un dato externo que es provisto con el nodo a introducir, también podría ser un valor asociado a prioridad o importancia, etc...)...

Y ¿como muestro el elemento al principio de la cola?
Hay que establecer un elemento raiz. ...a la hora de insertar:

Código:
buleano = funcion Insertar(nodo n)
    si (numitems < maxitems)  // y (maxitems > 0)
        si (numItems = 0)
            raiz = nodo
        sino
            ultimo.siguiente = nodo
        fin si
        ultimo = nodo
        
        numitems +=1
        devolver TRUE
    sino
        devolver FALSE
    fin si
fin funcion

p.d.: Nota como el código opcional (al final d ela línea): ' y (maxitems > 0)' permitiría introducir nodos aún cuando no se hubiera establecido un valor para 'maxItems'... Es decir permite que el tercer caso puede funcionar en tanto no se conozca un valor útil como el límite de nodos permitidos.


Título: Re: Cola limittar elementos
Publicado por: dario01dr en 30 Julio 2022, 03:05 am
Hola, C++ ya tienes colas prediseñadas, lee algo de stacks STL. Busca en google STL stacks C++ te va a ayudar mucho.
Salu2


Título: Re: Cola limittar elementos
Publicado por: Mar90_13 en 1 Agosto 2022, 23:04 pm
Gracias Serapis