Listas lineares
Listas Lineares
Pilha Fila Fila Dupla
Entrada restrita Saída restrita
Listas linearesConjunto de elementos (nós) agrupados. Algumas Operações:
• Acesso a um determinado elemento
• Inserção de elementos
• Remoção de elementos
• Cópia de listas
• Combinação de listas
• Particionamento de listas
• Ordenação de listas
• Outras ...
Listas lineares
Alocação:
• Estática: durante compilação.
• Dinâmica: durante execução.Agrupamento:
• Seqüêncial: espaço contínuo de memória
• Encadeada: células dispersas na memória
Pilha
BASE
TOPO
SAÍDA
ENTRADA
Elemento 1
Elemento 2
Pilha
Operações primitivas:
• Inicializar a pilha: prepara a pilha para utilização, sem nenhum elemento.• Pilha Vazia: verifica se a pilha está vazia.• Pilha Cheia: verifica se a pilha está cheia.• Empilha Elemento: insere um elemento no topo da pilha.• Desempilha: retira o elemento do topo da pilha. • Topo: retorna o elemento do topo da pilha.
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
Atributos necessários para armazenar dados da classe:
• um vetor que armazenará os elementos empilhados
• uma variável de controle com a posição do topo da pilha
e uma com o número máximo de elementos da pilha.
public class Pilha{
private object [] elementos;private int topo, max;
...
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
• O vetor de elementos é do tipo object para que qualquer
objeto possa ser empilhado.
• Os atributos são privados pois os usuários da classe
não devem acessá-los diretamente, somente através dos
métodos de empilhar, desempilhar etc.
public class Pilha{
private object [] elementos;private int topo, max;
...
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
A inicialização da pilha é feita no seu construtor. Nesse momento, o usuário da classe deve informar a quantidade máxima de elementos para a alocação dinâmica.
public class Pilha{...
public Pilha(int maximo){
max = maximo;elementos = new object[max];topo = 0;
}...
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
O método para empilhar (Push) deve verificar se a pilha não está cheia, empilhar o elemento no vetor e incrementar o topo.
public class Pilha{...
public void Push(object x){
if (PilhaCheia())throw new Exception(“Pilha Cheia!”);
elementos[topo++] = x;}
...
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
O método para desempilhar (Pop) deve verificar se a pilha não está vazia, desempilhar o elemento no vetor e decrementar o topo.
public class Pilha{...
public object Pop(){
if (PilhaVazia())throw new Exception(“Pilha Vazia!”);
return elementos[--topo];}
...
Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
• Implemente as funções restantes: pilha vazia, pilha cheia e função topo.
• Simule o funcionamento da pilha com este exemplo de código:
...Pilha p = new Pilha(10);p.Push(1);p.Push(2);p.Push(3);int x = Convert.ToInt32(p.Pop());...