PublicouRyan Barros Alterado mais de 7 anos atrás
2 Listas lineares Conjunto 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 ...
3 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
4 Pilha ENTRADA SAÍDA TOPO Elemento 2 Elemento 1 BASE
5 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.
6 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; ...
7 Pilhas – Implementação (alocação dinâmica, agrupamento seqüencial)
public class Pilha { private object [] elementos; private int topo, max; ... 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.
8 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; }
9 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; }
10 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]; }
11 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());