Primeiro desculpe-me pelo tópico não ser especificamente sobre Java é sobre C.
Gostaria de pedir por favor se alguem tem algum material fácil de entender para me passar sobre (pilha, estática, dinâmica, encadeada, duplamente encadeada, fila… e ponteiros também). Recorri a vocês porque na net estou ficando cada vez mais confuso e desfocado, estou penando muito para aprender isso na faculdade.
Entendendo o conceito, fica fácil implementar em outras linguagens.
luistiagos
recomendo que leia o livro “Estrutura de dados em C” do Tanenbaum acho que é assim que se escreve…
e um livro azul escuro com o desenho de uma estrutura…
ele e o melhor livro de estrutura de dados que existe…
ViniGodoy
Na verdade é Tenenbaum. E o pior, o cara chama Aaron.
Não confundir com Andrew Tanenbaum, que é o tal cara que escreve os livros de SO, redes e arquitetura de computadores…
Andre_Brito
E pra C++?
Eu fiz em Java, usando referências (tipo, uma árvore binária com a informação (int) e duas referências para outros nós). Mas em C++ é possível fazer dessa maneira sem usar ponteiros? (e eficiente?).
Abraço.
ViniGodoy
Não. Vai ter que usar ponteiros.
Na verdade, se você está usando o C++, pode usar a biblioteca de collections da linguagem, e não precisa implementar na mão. Nesse caso, veja uma das classes de lista: std::vector, std::list, std::deque e, se quiser limitar a interface delas a uma fila ou pilha, use os wrappers std::queue ou std::stack.
Se você estiver usando a boost, pode fugir dos ponteiros e usar no lugar o boost::scoped_ptr, que é um “ponteiro inteligente” que faz contagem de referências e dá o delete automático, quase como o garbage collector do Java…
Por isso eu digo, C++ é muito diferente de C…
rodrigo_salla
Primeiro muito obrigado pelas informações, sempre achei a comunidade GUJ maravilhosa, por isso que posto aqui e desculpem-me por postar em tópico errado, fazia muito tempo que não vinha por aqui e acabei na pressa cometendo essa falta.
Na verdade o que estou fazendo é em C, (NÃO É C++), infelizmente na faculdade estou tendo aulas de C com pilhas dinâmicas, filas, árvore e controle manual dos ponteiros e das pilhas, está sendo doloroso, risos, não estou entendendo muita coisa não.
Obrigado novamente.
Rodrigo
ViniGodoy
O livro do Tenenbaum é de Czão, não é C++. Então vale essa dica mesmo.
Vinicius_Sartori
Eu estou vendo pilhas na faculdade também, e a melhor recomendação que eu tive foi Tenenbaum que o próprio professor me passou…mais eu recomendo voce não se focar em código…pega apenas o conceito. :thumbup:
peczenyj
No java2s.com na parte de ANSI C tem codigos sobre fila, pilha e outras coisas.
tudo em ingles, mas bem facil.
Andre_Brito
ViniGodoy:
Não. Vai ter que usar ponteiros.
Na verdade, se você está usando o C++, pode usar a biblioteca de collections da linguagem, e não precisa implementar na mão. Nesse caso, veja uma das classes de lista: std::vector, std::list, std::deque e, se quiser limitar a interface delas a uma fila ou pilha, use os wrappers std::queue ou std::stack.
Se você estiver usando a boost, pode fugir dos ponteiros e usar no lugar o boost::scoped_ptr, que é um “ponteiro inteligente” que faz contagem de referências e dá o delete automático, quase como o garbage collector do Java…
Por isso eu digo, C++ é muito diferente de C…
Usar ponteiros em C++ como eu uso em C é arriscado ou não tem nada a ver?
Abraço.
ps.: parabéns Sergio, pelo novo trabalho. Só agora lembrei de te dizer isso.
Vinicius_Sartori
usar ponteiros sempre eh arriscado, voce ta trabalhando direto na posição de memória, acho que se você tiver bom senso, mesmo eu nunca tendo usado em C++ o.O
ViniGodoy
É sim. Em C++ há formas melhores:
Alocar e desalocar usando new e delete, não malloc e free;
Usar referências quando possível;
Usar ponteiros apenas se vc precisar ter valores nulos;
Ainda assim, existe a biblioteca boost, que te dá a alternativa de Smart Pointers. Pesquise sobre isso.