that_one_nigga_you_k

fila ainda mais completa

Sep 3rd, 2024
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdexcept>
  3.  
  4. template <typename T>
  5. class Fila {
  6. private:
  7.     T* arr;
  8.     int capacidade;
  9.     int frente;
  10.     int traseira;
  11.     int tamanhoAtual;
  12.  
  13. public:
  14.     // Construtor padrão
  15.     Fila(int tamanho = 10) {
  16.         arr = new T[tamanho];
  17.         capacidade = tamanho;
  18.         frente = 0;
  19.         traseira = -1;
  20.         tamanhoAtual = 0;
  21.     }
  22.  
  23.     // Destrutor
  24.     ~Fila() {
  25.         delete[] arr;
  26.     }
  27.  
  28.     // Adicionar um elemento à fila
  29.     void enfileirar(T dado) {
  30.         if (tamanhoAtual == capacidade) {
  31.             throw std::overflow_error("Fila cheia");
  32.         }
  33.         traseira = (traseira + 1) % capacidade;
  34.         arr[traseira] = dado;
  35.         tamanhoAtual++;
  36.     }
  37.  
  38.     // Adicionar um elemento à fila usando colocar
  39.     template <typename... Args>
  40.     void colocar(Args&&... args) {
  41.         if (tamanhoAtual == capacidade) {
  42.             throw std::overflow_error("Fila cheia");
  43.         }
  44.         traseira = (traseira + 1) % capacidade;
  45.         new (&arr[traseira]) T(std::forward<Args>(args)...);
  46.         tamanhoAtual++;
  47.     }
  48.  
  49.     // Remover um elemento da fila
  50.     void desenfileirar() {
  51.         if (tamanhoAtual == 0) {
  52.             throw std::underflow_error("Fila vazia");
  53.         }
  54.         frente = (frente + 1) % capacidade;
  55.         tamanhoAtual--;
  56.     }
  57.  
  58.     // Obter o elemento da frente da fila
  59.     T obterFrente() const {
  60.         if (tamanhoAtual == 0) {
  61.             throw std::underflow_error("Fila vazia");
  62.         }
  63.         return arr[frente];
  64.     }
  65.  
  66.     // Verificar se a fila está vazia
  67.     bool estaVazia() const {
  68.         return tamanhoAtual == 0;
  69.     }
  70.  
  71.     // Verificar se a fila está cheia
  72.     bool estaCheia() const {
  73.         return tamanhoAtual == capacidade;
  74.     }
  75.  
  76.     // Obter o tamanho atual da fila
  77.     int tamanho() const {
  78.         return tamanhoAtual;
  79.     }
  80.  
  81.     // Imprimir os elementos da fila
  82.     void imprimir() const {
  83.         if (tamanhoAtual == 0) {
  84.             std::cout << "Fila vazia" << std::endl;
  85.             return;
  86.         }
  87.         int count = tamanhoAtual;
  88.         int i = frente;
  89.         while (count > 0) {
  90.             std::cout << arr[i] << " ";
  91.             i = (i + 1) % capacidade;
  92.             count--;
  93.         }
  94.         std::cout << std::endl;
  95.     }
  96. };
  97.  
  98. int main() {
  99.     Fila<int> fila(5);
  100.  
  101.     fila.enfileirar(10);
  102.     fila.enfileirar(20);
  103.     fila.enfileirar(30);
  104.     fila.enfileirar(40);
  105.     fila.enfileirar(50);
  106.  
  107.     std::cout << "Elementos da fila: ";
  108.     fila.imprimir();
  109.  
  110.     fila.desenfileirar();
  111.     fila.desenfileirar();
  112.  
  113.     std::cout << "Elementos da fila após desenfileirar: ";
  114.     fila.imprimir();
  115.  
  116.     std::cout << "Elemento na frente da fila: " << fila.obterFrente() << std::endl;
  117.  
  118.     // Usando o método colocar
  119.     fila.colocar(60);
  120.     std::cout << "Elementos da fila após colocar: ";
  121.     fila.imprimir();
  122.  
  123.     return 0;
  124. }
  125.  
Add Comment
Please, Sign In to add comment