Pilha, fila... em C

Bom dia…

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.

Muito obrigado pela atenção de sempre.

Rodrigo

É em C ou C++?
(Você podia ter postado a dúvida no fórum “outras linguagens”)

Em Java tem uma boa explicação aqui:
http://www.guj.com.br/posts/list/55235.java

Entendendo o conceito, fica fácil implementar em outras linguagens.

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…

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…

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.

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…

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

O livro do Tenenbaum é de Czão, não é C++. Então vale essa dica mesmo. :wink:

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:

No java2s.com na parte de ANSI C tem codigos sobre fila, pilha e outras coisas.

tudo em ingles, mas bem facil.

[quote=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…
[/quote]

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.

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

É sim. Em C++ há formas melhores:

  1. Alocar e desalocar usando new e delete, não malloc e free;
  2. Usar referências quando possível;
  3. 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.