Executando verificação de segurança...
1

[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;
}
Carregando publicação patrocinada...
4

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;
        }
}
2

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.

3

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.

1

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.

2

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.

1

é 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.