Vous êtes sur la page 1sur 11

MOISANIEL PAULO DE OLIVEIRA CURSO LICENCIATURA EM COMPUTAO 3 PERODO

PILHAS

Araguatins TO 2011

Instituto Federal de Educao, Cincia e Tecnologia Tocantins Campus Araguatins

Moisaniel Paulo de Oliveira Curso Licenciatura em Computao 3 Perodo

Trabalho Acadmico de Estrutura de Dados Pilhas

Araguatins TO 2011
SUMRIO 04 04 03 06

Resumo 1. Introduo 2. Viso Geral 3 Interface do tipo Pilha

4 Implementao de pilha 07 com vetor 5 Implementao de pilha 09 com lista 6 - Referncias: 7 - Concluso: 13 13

Resumo: Umas das estruturas de dados mais simples e mais teis em computao a pilha. Possivelmente por essa razo, a estrutura de dados mais utilizada em programao. Sua Ideia fundamental que todo o acesso a seus elementos seja feito a partir do topo. Assim, quando um elemento novo introduzido na pilha, ele passa a ser o elemento do topo. O nico elemento que pode ser removido da pilha o do topo. 1. Introduo: Para entender o funcionamento de uma estrutura de pilha, podemos fazer uma analogia com uma pilha de pratos. Se quisermos adicionar um prato na pilha, o colocamos no topo. Para pegar um prato da pilha, retiramos o do topo. Assim, temos de retirar o prato do topo para ter acesso ao prximo prato. A estrutura de pilha funciona de maneira anloga. Cada novo elemento inserido no topo e s temos acesso ao elemento do topo da pilha. Logo, os elementos da pilha s podem ser retirados na ordem inversa ordem em que foram introduzidos: o primeiro 3

que sai o ltimo que entrou ( a sigla LIFO last in, first out usada para descrever essa estratgia).

2 - Viso Geral Existem duas operaes bsicas que devem ser implementadas em uma estrutura de pilha: a operao para empilhar um novo elemento, inserindo-o no topo, e a operao para desempilhar um elemento, removendo-o do topo. comum nos referirmos a essas duas operaes pelos termos em ingls push (empilhar) e pop (desempilhar). A figura 2.1 ilustra o funcionamento conceitual de uma pilha. O exemplo de utilizao de pilha mais prximo a prpria pilha de execuo da linguagem C. As variveis locais das funes so dispostas em uma pilha, e uma funo s tem acesso s variveis da funo que est no topo ( no possvel acessar as variveis da funo locais s outras funes) H varias implementaes possveis de uma pilha, que se distinguem pela natureza dos seus elementos, pela maneira como so armazenadas e pelas operaes disponveis para o tratamento da pilha.

Figura 2.1 Funcionamento da pilha

3 Interface do tipo Pilha

Neste captulo, consideraremos duas implementaes de pilhas: usando um vetor e usando uma lista encadeada. Para simplificar a exposio, consideraremos uma pilha que armazena valores reais. De modo independente da estratgia de implementao, podemos definir a interface do tipo abstrato que representa uma estrutura de pilha. Ela composta pelas operaes que estaro disponibilizadas para manipular e acessar as informaes da pilha. Neste exemplo, vamos considerar a implementao de cinco operaes: Criar uma pilha vazia; Inserir um elemento no topo (push); Remover o elemento do topo (pop); Verificar se a pilha est vazia; Liberar a estrutura da pilha. O arquivo pilha.h, que representa a interface do tipo, pode conter o seguinte cdigo: typedef struct pilha pilha; Pilha* pilha_cria (void); void pilha_push (Pilha* p. float v); float pilha)pop (Pilha* p); int pilha_vazia (Pilha* p); void pilha_kibera (Pilha* p); A funo cria aloca dinamicamente a estrutura da pilha, inicializa seus campos e retorna seu ponteiro; as funes push e pop inserem e retiram, respectivamente, um valor real na pilha; a funo vazia informa se a pilha est ou no vazia; e a funo libera destri a pilha, e assim libera toda a memria usada pela estrutura. 4 Implementao de pilha com vetor Em aplicaes computacionais que precisam de uma estrutura de pilha, comum saber de antemo o nmero mximo de elementos que podem estrar armazenados simultaneamente na pilha, isto , a estrutura da pilha tem um limite conhecido. Nesses casos, a implementao da pilha pode ser feita por um vetor, o que muito simples. Devemos ter um vetor 5

(vet) para armazenar os elementos da pilha, e os elementos inseridos ocupam as primeiras posies do vetor. Dessa forma, se temos n elementos armazenados na pilha, o elemento vet [n-1] representa o do topo. A estrutura que representa o tipo pilha deve, portanto, ser composta pelo vetor e pelo nmero de elementos armazenados. #define N 50 struct pilha { int n; float vet[N] }; A funo para criar a pilha aloca dinamicamente essa estrutura e inicializa a pilha como sendo vazia, isto , com o nmero de elementos igual a zero. Pilha* pilha_cria (void) { Pilha* p * (Pilha*) malloc(sizeof(plha)); p-> = 0; */ inicializa com zero elementos */ return p; } Para inserir um elemento na pilha, usamos a prxima posio livre do vetor. Devemos ainda assegurar que existe esao para a insero do novo elemento, tendo em vista que se trata de um vetor com dimenso fixa. void pilha_push (Pilha* p. float v) { if (p->n == N) { /* capacidade esgotada */ printf(Capacidade da pilha estourou.\n); exit(1) /* aborta programa */ } /* Insere elemento na prxima posio livre */ p->vet[p->] = v; p->n++; } A funo pop retira o elemento do topo da pilha, e fornece seu valor como retorno. Podemos tambm verificar se a pilha est vazia ou no. float pilha_pop (Pilha* p) 6 /* nmero mximo de elementos */

{ float v; if (pilha_vazia(p)) { printf(Pilha vazia.\n); exit(1); } /* retira elemento do topo */ v = p->vet[p->n1]; p->n-; return v; } A funo que verifica se a pilha est vazia pode ser dada por: int pilha_vazia (Pilha* p) { return (p->n == 0); } Finalmente, a funo para liberar a memria alocada pela pilha pode ser: void pilha_libera (Pilha* p) { free(p); } 5 Implementao de pilha com lista Quando o numero mximo de elementos que sero armazenados na pilha no conhecido, devemos implementar a pilha co uma estrutura de dados dinmica, no caso, com uma lista encadeada. Os elementos so armazenados na lista, e a pilha pode ser representada simplesmente por um ponteiro para o primeiro n da lista. O n da lista para armazenar valores pode ser dado por: struct lista { float infor; 7 */ aborta programa */

struct lista* prox; }; typedef struct lista Lista; A estrutura da pilha ento simplesmente: struct pilha { Lista* prim; }; A funo cria aloca a estrutura da pilha e inicializa a lista como sendo vazia. Pilha* pilha_cria (void) { Pilha* p = (Pilha*) malloc(sizeof(Pilha)); p->prim = NULL; return p; } O primeiro elemento da lista representa o topo da pilha. Cada novo elemento inserido no incio da lista e, consequentemente, sempre que solicitado, retiamos o elemento tambm do incio da lista. A implementao dessas funes ilustrada a seguir: void pilha_push (Pilha* p, float v) { Lista* n = (Lista*) malloc(sizeof(Lista)); n->info = p->prim; p->prim = n; } float pilha_pop (Pilha* p) { Lista * t; float v; if (pilha_vazia(p)) { printf(Pilha vazia.\n); exit(1); /* aborta programa */ } t = p->prim; v = t->info; p->prim = t->prox; 8

free(t); return v; } A pilha estar vazia se a lista estiver vazia: int pilha_vazia (Pilha* p) { return (p->prim==NULL); } Por fim, a funo que libera a pilha deve antes liberar todos os elementos da lista: void pilha_libera (Pilha* p) { Lista* q = p->prim; while (p!=NULL) { Lista* t = q->prox; free(q); q = t; } free(p); } A rigor, pela definio da estrutura de pilha, s temos acesso ao elemento do topo. No entanto, para testar o cdigo, pode ser til implementar uma funo que imprima os valores armazenados na pilha. O cigos a seguir ilustram a implementao dessa funo na duas verses de pilha (vetor e lista). A orem de impresso adotada do tipo topo para a base. /* imprime: verso com vetor */ void pilha_imprime (Pilha* p) { int i; ior (i=p->n-1; i>=0; i--) printf(%f\n , p->vet[i]); } /* imprima : verso com lista */ void pilha)imprime (Pilha* p) { Lista* q; for (q=p->prim; q!=NULL; q=p->prox) printf(f\n,q->info); } 9

Cada vez que um novo elemento deve ser inserido na pilha, ele colocado no seu topo; e em qualquer momento, apenas aquele posicionado no topo da pilha pode ser removido. Devido a esta disciplina de acesso os elementos so sempre removidos numa ordem inversa quela em que foram inseridos, de modo que o ltimo elemento que entra exatamente o primeiro que sai.
"Pilhas podem ser utilizadas em muitas aplicaes. Uma aplicao importante de pilhas na avaliao de expresses. Como possvel o computador entender e avaliar expresses digitadas pelo usurio? (PERERIA, Silvio do Lago, Estrutura de dados fundamentais. Conceitos e aplicaes 8 edio. Editora rica. So Paulo, 2003).

A pilha reservada para as necessidades de alocao de memria do programa. Ele uma rea separada no cdigo de programa e a pilha. Programas C tpicos usam as funes malloc e livre para alocar e desalocar memria da pilha. ... tal como a memria fila, a memria pilha tem as implementaes esttica e semiesttica. A pilha tem um indicador numrico que indica o ndice do elemento que o topo da pilha. Por uma questo de implementao, o topo da pilha indica a primeira posio livre para a prxima operao de colocao de um elemento. Sempre que se coloca um elemento na pilha o indicador de topo da pilha deslocado para o elemento seguinte do agregado. Quando o topo da pilha atinge o elemento a seguir ao fim do agregado, ou seja, o ndice N, ento sinal que a pilha est cheia. Sempre que se retira um elemento da pilha, primeiro o indicador de topo da pilha deslocado para o elemento anterior do agregado e depois o elemento retirado da pilha. Quando o indicador de topo da pilha atinge o elemento inicial do agregado, ou seja, o ndice 0, ento sinal que a pilha ficou vazia.( ROCHA, Professor Doutor Antonio Manuel Adrego, BORGES, Professor Doutor Antonio Rui Oliveira e Silva. Programao Estruturas de Dados e Algoritimos em C, Departamento de Eletrnica e Telecomunicaes da Universidade de Aveiro)

6 - Referncias:

10

http://msdn.microsoft.com/pt-br/library/123by34a(v=vs.80).aspx, acesso em 28/06/2011; ROCHA, Professor Doutor Antonio Manuel Adrego, BORGES, Professor Doutor Antonio Rui Oliveira e Silva. Programao Estruturas de Dados e Algoritimos em C, Departamento de Eletrnica e Telecomunicaes da Universidade de Aveiro: CELES, Waldemar; CERQUEIRA, Renato; RANGEL, Jos Lucas, Introduo Estrutura de Dados, com Tcnica em Programao em C. 7 - Concluso: Atravs da Estrutura de Dados realizamos uma pequena viagem s metodologias aplicadas pelas cincias da computao modelagem de situaes do mundo real. Este item no explora todo o contedo de estrutura de dados, mas fornece uma boa base para que o leitor, caso necessite, consiga, de forma auto-didtica, desenvolver um estudo de maior profundidade.

11

Vous aimerez peut-être aussi