Estrutura de dados em Java - Pilhas

17,309 views 26 slides Oct 31, 2012
Slide 1
Slide 1 of 26
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26

About This Presentation

No description available for this slideshow.


Slide Content

Estrutura de Dados Pilhas Prof. Adriano Teixeira de Souza

Pilhas É uma das estruturas de dados mais simples A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo. Assim , quando um elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o único elemento que pode ser removido da pilha é o do topo.

Pilhas :: Aplicações Verificação de parênteses. Retirada de vagões de um trem. Retirada de mercadorias em um caminhão de entregas .

Pilhas Os elementos da pilha são retirados na ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o último que entrou (LIFO – last in, first out). Existem duas operações básicas que devem ser implementadas numa estrutura de pilha: operação para empilhar ( push ) um novo elemento, inserindo-o no topo, operação para desempilhar ( pop ) um elemento, removendo-o do topo

Pilhas :: Push topo push(a) k m x a push(b) b

Pilhas :: Push topo k m x topo k m x a topo k m x a b push(a) push(b)

Pilhas :: Pop topo pop(b) k m x a pop(a) b

Pilhas :: Pop k m x topo topo k m x topo k m x a a b pop(b) pop(a)

Pilhas :: Implementação de pilha com vetor Supondo a pilha está armazenada em um vetor pilha[0..n-1]. A parte do vetor ocupada pela pilha será: t n-1 pilha[0..n-1]

Pilhas :: Implementação de pilha com vetor public class Pilha { static final int MAX = 50; int n;//Elementos adicionados float vet [] = new float [MAX ]; } Pilha ;

Pilhas :: Cria estrutura de pilha Prof. Adriano Teixeira de Souza Pilha cria() { Pilha p; p = new Pilha(); p.n = 0;/*Inicializa com zero elementos*/ return p ; }

Pilhas :: Inserir o elemento do topo - push() void push( Pilha p, float v) { if ( p.n == Pilha.MAX ){ System.out.println ("Capacidade da pilha estourou ."); System.exit (1 ); /*aborta programa*/ } /* insere elemento na próxima posição livre */ p.vet [ p.n ] = v; p.n ++; }

Pilhas :: Remover o elemento do topo - pop() float pop(Pilha p) { float v; if (vazia(p)) { System.out.println ("Pilha vazia."); System.exit (1 ); /*aborta programa*/ } /* retira elemento do topo*/ v = p.vet [p.n-1]; p.n - -; return v; }

Pilhas :: Verificar se a pilha está vazia boolean vazia(Pilha p) { return ( p.n == 0); }

Pilhas :: Imprime estrutura de pilha Prof. Adriano Teixeira de Souza void imprime (Pilha p) { int i; for (i=p.n-1; i>=0; i--) System.out.println ( p.vet [i]); }

Pilhas :: Teste Prof. Adriano Teixeira de Souza public static void main(String[] args ) { ManipuladorPilha maninula = new ManipuladorPilha (); Pilha p = maninula .cria (); maninula.push (p,20.0f ); maninula.push (p,20.8f ); maninula.push (p,20.3f ); maninula.push (p,44.5f ); maninula.push (p,33.3f ); maninula.push (p,20.9f ); maninula.imprime (p); System.out.println ("Retirado: "+ maninula .pop (p )); System.out.println ("Retirado: "+ maninula.pop (p )); System.out.println (" Configuracao da fila:"); maninula.imprime (p); p = null ; }

Implementação de pilha com lista Quando o número máximo de elementos que serão armazenados na pilha não é conhecido, devemos implementar a pilha usando uma estrutura de dados dinâmica, no caso, empregando uma lista encadeada. Os elementos são armazenados na lista e a pilha pode ser representada simplesmente por um ponteiro para o primeiro nó da lista.

Pilhas :: Implementação de pilha com lista public class No { float info ; No anterior; } public class Pilha { No topo; }

Pilhas :: Operações básicas Criar uma estrutura de pilha; Inserir um elemento no topo (push); Remover o elemento do topo (pop); Verificar se a pilha está vazia; Liberar a estrutura de pilha

Pilhas :: Criar uma estrutura de pilha Pilha cria () { Pilha p = new Pilha(); p.topo = null ; return p; }

Pilhas :: Inserir o elemento do topo - push() void push( Pilha p, float v) { No aux = new No(); aux.info = v; aux.anterior = p.topo ; p.topo = aux ; }

Pilhas :: Remover o elemento do topo - pop() float pop(Pilha p) { float v; if (vazia(p)) { System.out.println ("Pilha vazia."); System.exit (1 ); /*aborta o programa*/ } v = p.topo.info; No aux = p.topo ; p.topo = aux.anterior ; return v; }

Pilhas :: Verificar se a pilha está vazia boolean vazia(Pilha p) { return ( p.topo == null ); }

Pilhas :: Imprime estrutura de pilha Prof. Adriano Teixeira de Souza void imprime (Pilha p) { for (No q= p.topo ; q!= null ; q= q.anterior ) System.out.println (q.info ); }

Pilhas :: Teste Prof. Adriano Teixeira de Souza public static void main(String[] args ) { ManipulaPilha manipula = new ManipulaPilha (); Pilha p = manipula.cria (); manipula.push (p,20.0f ); manipula.push (p,20.8f ); manipula.push (p,20.3f ); manipula.push (p,44.5f ); manipula.push (p,33.3f); manipula.push (p,20.9f ); manipula.imprime (p); System.out.println ("Retirado: "+ manipula.pop (p)); System.out.println ("Retirado: "+ manipula.pop (p)); System.out.println (" Configuracao da fila:\n"); manipula.imprime (p); p = null ; }

Utilizando o algoritmo anteriormente apresentado implemente um programa que insira dados em uma pilha A e em seguida remova-os elementos da pilha A e insira-os na pilha B com sua ordem invertida. Exercício Prof. Adriano Teixeira de Souza
Tags