[Dúvida] Como implementar e manipular manualmente Filas e Pilhas em C++?

Faz um certo tempo que tenho programado em C++ porém ainda tenho dificuldades em entender e implementar essas estruturas de dados nos meus códigos. Nesse momento estou fazendo um projeto da faculdade quer requer o uso de Filas e Pilhas, basicamente preciso implementar na mão o equivalente ao push ou pop das bibliotecas queue e stack.

Até o momento criei uma struct para armazenar meus dados, agora preciso manipular essas structs de acordo com a necessidade do código, por exemplo: Adicionar uma pessoa em uma Fila ou remover um item da nossa pilha.

Abaixo mostra o que consegui fazer até agora, só que sinto que ainda não está fazendo sentido...

typedef struct frascosDeVacina {
  int frascosDisponiveis;
  struct frascosDeVacina *prox;
} Frascos;

Frascos *topo == NULL;

void adicionarPilha (int item) {
  Frascos *novo = malloc(sizeof(Frascos));
  novo -> dado = item;
  novo -> prox = topo;
  topo = novo;
}

Não sei se na sua faculdade permite usar new/delete e classes. Mas vou usar a minha de base. Normalmente fazemos assim:


template <typename T> 
class Node {
friend class stack;
private:
    Node* next;
    T value
public:
    Node(T new_value) {
        next = NULL;
        value = new_value; 
    }
}

template <typename T> 
class Stack {
    private:
        Node<T>* top;
    public: 
        Stack(){
            top = NULL; 
        }

         T pop() {
            if (topo == nullptr) {
                std::cout << "Pilha vazia!" << std::endl;
                return T(); 
            }

            Node<T>* temp = this->top;
            T aux = temp->value;
            top = top->next;
            delete temp;
            return aux;
        }
        
        void push(T new_value) {
            Node<T>* new_node = new Node<T>(new_value);
            new_node->next = this->top;
            this->top = new_node;
        }
}
A cadeira de Estrutura de Dados vem antes da cadeira de Orientação a Objetos aonde eu estudo, infelizmente nada de usar classe ou bibliotecas que o professor mencionou em aula. Muito obrigado pela ajuda, o código será de grande auxílio para continuar estudando esse conteúdo.

Mutable8141, tem uma série de aulas da Univesp que explicam Estrutura de Dados, uma das disciplinas do curso de Ciência da Computação.

https://www.youtube.com/playlist?list=PLxI8Can9yAHex0IsMeE_tzBP0WMYASaQD Um pouquinho mais antigo, usando C como linguagem https://www.youtube.com/playlist?list=PLxI8Can9yAHf8k8LrUePyj0y3lLpigGcl

Há um tempo, buscando por "algoritmos-teoria-e-prc3a1tica-3ed-thomas-cormen.pdf", você achava uma amostra do livro clássico do Cormen em português.

Espero que sejam úteis para você entender o assunto e resolver seu problema prático que nos apresentou.

Muito obrigado pelas recomendações, eu e meu colega conseguimos terminar o projeto mas irei continuar estudando esse conteúdo; por um breve momento eu quase recorri ao livro do Cormen para entender melhor essas estruturas.

Tem que entender o conceito teórico, arrays e listas são os conceitos mais básicos pra entender essas estruturas, principalmente listas, sejam elas ligadas, duplamente ligadas, circulares... pra poder fazer sentido, na verdade o conceito é primordial pra poder produzir o código saca? uma vez fixado o "conceito" de como aquele mecânismo funciona, já era, implementa em qualquer coisa que funcione com 0s e 1s. Por exemplo você pode pensar que uma pilha nada mais é do que uma lista com restrições de inserção e remoção, igualmente também se aplica a uma Fila saca? software, algoritmo tem que ser construído por partes, quer fixar o conceito? primeiro implementa uma lista básica e depois extende para uma Pilha e uma Fila. Fica bem interessante implementar uma lista duplamente encadeada e extender para uma Pilha e Fila.

é um excelente ponto a se considerar e acabei o entendendo durante a apresentação do projeto, o meu colega me fez lembrar que estruturas como filas e pilhas apesar de terem objetivos bem específicos, a criação de ambas ou pelo menos boa parte do funcionamento delas é similar ao próprio conceito de listas ligadas, aonde durante a implementação definimos a primeira "célula" e após isso ela aponta para um `NULL`. (acabei simplificando bastante a explicação) muito obrigado pela explicação, me fez refletir bastante sobre o assunto e acredito ter chegado na compreensão dele.