Pilha, fila... em C

12 respostas
rodrigo_salla

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

12 Respostas

ViniGodoy

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

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. :wink:

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:

  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.

Criado 26 de março de 2008
Ultima resposta 28 de mar. de 2008
Respostas 12
Participantes 6