[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;
}
}
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.
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.