Disciplina: Estrutura de Dados
Unidade: I — Memória e Estruturas Lineares
Tema Central:
- Usar a pilha sempre como ponteiro (
Pilha *p).
- Analogia com Java/Python: variáveis como ponteiros para objetos alocados no
heap.
- Conceito de alocação dinâmica:
stack vs heap.
malloc, calloc e free com exemplos práticos.
- Relação entre vetores e ponteiros:
v[i] é igual a (v + i).
- Implementação de
Pilha com:
struct alocada dinamicamente;
- primeiro vetor estático, depois vetor dinâmico, definido por parâmetro
size.
Duração: 2 aulas × 50 minutos
Objetivo Didático:
- Mostrar que, em C, podemos modelar o TAD de pilha como se fosse um objeto referenciado por um ponteiro, como em Java/Python.
- Introduzir alocação dinâmica, relação vetor/ponteiro e evoluir para uma pilha completamente dinâmica, com tamanho configurável.
Parte 1 – Pilha como Ponteiro: Analogia com Java e Python
1.1 Pergunta Inicial para a Turma
"Se já estamos acostumados a usar Pilha *p, será que podemos lidar com pilhas sempre como ponteiros? Ou seja, sempre trabalhar com endereços de pilhas e nunca com cópias de Pilha no main?"
Resposta Guiada:
- Em C,
Pilha *p é um ponteiro para a estrutura, não a estrutura em si.
- Isso é semelhante ao que acontece em linguagens como Java e Python:
- Quando fazemos
new Stack() ou pilha = Pilha(), na verdade estamos:
- Criando o objeto no heap;
- E a variável é apenas um ponteiro/referência para esse objeto.