Você está na página 1de 10

UNIVERSIDADE S.

TOMÁS DE MOÇAMBIQUE
CURSO DE TECNOLOGIAS DE SISTEMAS DE
INFORMAÇÃO
Estrutura de Dados e Algoritmos
Ano 2007

Aula 6:Pilhas

Conteúdo

1. Conceito
2. Operações
3. Implementação
4. Exercícios práticos

1
1. Conceito

A forma mais geral de uma lista permite a inserção ou eliminação de um elemento em


qualquer posição na lista. Se restringirmos a ocorrência de inserção e eliminação a uma
extremidade da lista, por exemplo, extremidades superiores, então temos uma estrutura de
dados chamada de pilha.

Uma Pilha é uma colecção de dados, ou seja, é uma estrutura de dados de comprimento
variável que contém múltiplos elementos.

Uma pilha é uma lista de informações com operações especiais de acesso. O acesso aos
elementos da pilha é feito sempre pela mesma extremidade, isto é, a extermidade
escolhida é sempre usada para todas as operações, seja de inserção, eliminação ou
pesquisa, e é chamada de TOPO. Esta regra é também conhecida como LIFO (Last In
First Out).

Para se aceder a um elemento da pilha, é necessário que ele esteja no TOPO, caso
contrário, todos os elementos que estão antes dele devem ser retirados.

Representação de uma pilha



Uma Pilha é representada através de um vector (S[], por exemplo) com dimensão N. O
Ponteiro TOP representa o topo da pilha.

2
Exemplo prático: Um exemplo comum de pilha, que permite a selecção de seu elemento
superior, é a pilha de pratos num restaurante. Os pratos em pilha fazem com que a pessoa
tenha acesso ao prato superior, a remoção de um prato superior faz com que a pessoa
tenha acesso ao próximo prato, se colocado um novo prato na pilha, esse será o primeiro
a sair. Assim, para aceder ao último prato, deve-se antes retirar os que estão por cima
dele.

2. Operações sobre Pilhas

Nas pilhas, operações de inserção e eliminação são comumente citadas como operações
"push" e "pop", respectivamente. O único elemento directamente acessível de uma pilha é
seu elemento superior. O elemento menos acessível é seu elemento inferior.

Desde que as operações de inserção e eliminação sejam executadas na mesma


extremidade da pilha (extremidade superior), os elementos podem ser removidos somente
na ordem oposta a que foram inseridos.

3
Operações Associadas:

1) Verificar se a pilha está ou não vazia. Empty()


2) Inserir um novo elemento na pilha. Push()
3) Remover o elemento que está no topo da pilha. Pop()
4) Devolver o elemento que está no topo da pilha, Top()
5) Devolver o tamanho da pilha getSize()
6) Mostrar o conteúdo da pilha. Print()

3. Implementação de Pilhas

A pilha pode ser implementada por array's ou listas. Abaixo está ilustrada a
implementação de uma pilha que pode guardar qualquer tipo de objectos.

3.1 Implementação de Pilha usando Array

//implementação de pilha usando array


public class Stack {
Object[] array;
int index;
int size;

//constructor
public Stack () {
this.array = new Object[size];
this.index = 0;
}
}

4
1) Verificar se a pilha está ou não vazia. Empty()

public boolean empty () {


return index == 0;
}

2) Inserir um novo Elemento na Pilha. Push()

public void push (Object item) {


array[index] = item;
index++;
}

3) Remover o Elemento que está no Topo da Pilha. Pop()

public Object pop () {


index--;
return array[index];
}

5
4) Devolver o Elemento que está no Topo da Pilha Top()

public Object top (){


return array[index--];
}

5) Devolver o Tamanho da Pilha getSize()

public int getSize(){


return index;
}

6
3.2 Implementação de Pilha usando Lista

A figura seguinte mostra uma pilha representada como uma lista ligada linear:

//Implementação de pilha usando lista


public class Stack {

private static class Node {


Object item;
Node next;
int count;

//constructor
public Node(Object anItem){
item = anItem;
next = null;
}

private Node top; // ponteiro para o nodo que está no topo da pilha

//métodos de acesso
public Object getItem(){
return item;
}

public void setItem(Object anItem){


item = anItem;
}

public Node getNext(){


return next;
}
}

public void setNext(Node theNext){


next = theNext;
}

7
1) Verificar se a pilha está ou não vazia. Empty()

public boolean empty () {


return top == null;
}

2) Inserir um novo Elemento na Pilha. Push()

public void push(Object anItem) {


Node newTop = new Node(anItem); // o nodo para guardar o novo elemento.
newTop.next = top; // O novo elemento aponta para topo.
top = newTop; // O novo elemento está agora no topo.
count++;
}

3) Retirar o Elemento que está no Topo da Pilha Pop()

public Object pop() {


// Remover o elemento que está no topo da pilha e retorna-lo.
Object topItem = top.getItem(); // O item a ser removido.
top = top.getNext(); // O anterior Segundo elemento toma a posição de topo
count--;
return topItem;
}

4) Devolver o Elemento que está no Topo da Pilha Top()

public Object top (){


return top.getItem();
}

5) Devolver o Tamanho da Pilha

public int getSize(){


return count;
}

8
4. Exercícios

1) Mostrar o conteúdo de uma pilha implementada tanto em array como usando lista
(Print()).

2) Considere uma implementação de pilha através do uso de uma estrutura estática


(array).
2.1 Escolha e descreva os atributos da classe PilhaArray.
2.2 Implemente o método da classe PilhaArray que retorna o elemento do topo da
Pilha.
2.3 Implemente o método da classe PilhaArray que permite inserir um elemento
na Pilha.
2.4 Imprima metade dos elementos da pilha.

3) Suponha que uma pilha que implementa uma lista é composta por elementos do
seguinte tipo que compoem a classe PilhaLista:

public Node
{
String nome;
Node next;
}

3.1 Implemente o método construtor da classe PilhaLista.


3.2 Implemente o método da classe PilhaLista que permite inserir um elemento na
Pilha.
3.3 Implemente o método que devolva o último elemento da pilha.
3.4 Implemente o método que determine o menor valor da pilha.

9
4) Uma palavra é uma palíndrome se a sequência de letras que a forma é a mesma
seja ela lida da esquerda para a direita ou vice-versa. Exemplos: arara, rairar,
hanah. Escreva o método palindrime() que, dada uma palavra, retorne true caso a
palavra seja uma palíndrome, e false caso contrário.

________________________________________________________________________
Docentes regentes:
Rossana Abdul Carimo
Hamilton Isaias Mutaquiha

10

Você também pode gostar