Exercício Pilhas Estruturas de Dados

4
Estruturas de Dados Lista sobre Pilhas Profº Elifranio 1. Suponha que uma pilha é representada através de um vetor vet e de um inteiro num. As declarações podem ser #define MAX 100 int vet[MAX], num; Escreva uma função push que se recusa a acrescentar um elemento à pilha se não houver espaço suficiente no vetor vet, e, nesse caso, imprime uma mensagem apropriada de erro. 2. Com as mesmas declarações de (1), imagine que resolvemos separar as duas funções da função pop, usando duas funções, int top(void); void pop1(void); ficando para top a função de dizer qual é o elemento do topo da pilha, e para pop1 a função de retirar este elemento, sem devolver nenhum resultado. (Este arranjo seria usado quando queremos ver o elemento do topo antes de resolver retirá-lo de lá.) Escreva as funções top e pop1. 3. Adapte as funções de (1) e de (2) para o caso em que o tipo PILHA é declarado por #define MAX 100 struct pilha { int vet[MAX], num; }; typedef struct pilha PILHA; 4. Redefina as operações do tipo PILHA, ou seja, init, push, pop, vazia e show quando o tipo PILHA é declarado por #define MAX 100

description

ESTRUTRA DE DADOS - ´PILHA

Transcript of Exercício Pilhas Estruturas de Dados

Estruturas de DadosLista sobre PilhasProf Elifranio

1. Suponha que uma pilha representada atravs de um vetor vet e de um inteironum. As declaraes podem ser#define MAX 100int vet[MAX], num;Escreva uma funo push que se recusa a acrescentar um elemento pilha se nohouver espao suficiente no vetor vet, e, nesse caso, imprime uma mensagemapropriada de erro.

2. Com as mesmas declaraes de (1), imagine que resolvemos separar as duasfunes da funo pop, usando duas funes,int top(void);void pop1(void);ficando para top a funo de dizer qual o elemento do topo da pilha, e para pop1 afuno de retirar este elemento, sem devolver nenhum resultado. (Este arranjo seriausado quando queremos ver o elemento do topo antes de resolver retir-lo de l.)Escreva as funes top e pop1.

3. Adapte as funes de (1) e de (2) para o caso em que o tipo PILHA declarado por#define MAX 100struct pilha {int vet[MAX], num;};typedef struct pilha PILHA;

4. Redefina as operaes do tipo PILHA, ou seja, init, push, pop, vazia e showquando o tipo PILHA declarado por#define MAX 100struct pilha {int vet[MAX], num;};typedef struct pilha *PILHA;(Note que neste caso, o tipo PILHA j definido como o endereo da estrutura quecontm a pilha propriamente dita.)

5. Suponha que vamos implementar uma pilha de caracteres usando uma listaencadeada, com as declaraestypedef struct no NO, *PT;struct no {char elem;PT prox;};typedef PT PILHA;Redefina as operaes do tipo PILHA, adaptadas para este caso, em que os elementosda pilha so caracteres.

6. Idem, supondo que vamos usar operaes top e pop1 em vez de pop, como em(2).

7. Idem, para uma pilha de elementos do tipo struct info * , sendo o tipostruct info declarado porstruct info {char nome[80];int matricula;};

8. Suponha uma maquina de calcular que trabalha apenas com nmeros nonegativos, e que tem apenas as quatro operaes: soma, subtrao, produto ediviso inteira. A mquina tem 16 teclas, representadas pelos caracteres:0 1 2 3 4 5 6 7 8 9 + - * / C Eonde C representa clear, e E representa enter, que usada indicar que vai serfornecido entrado um nmero. A mquina usa notao polonesa sufixo, aquela emque o operador vem depois dos operandos. Escreva um programa que usa uma pilhade inteiros para simular a mquina: cada caracter que entra tratado, e a resposta ocontedo da pilha da mquina. Inicialmente, a pilha da mquina est vazia. As aescorrespondentes a cada caracter so:i=0, 9 troque o valor x do topo da pilha por x*10+iE empilhe um 0op=+,-,*,/ tire dois elementos y e x do topo da pilha, e empilhex op yC esvazia a pilha.Por exemplo, se as entradas fossem sucessivamenteE 9 0 E 2 0 E 1 5 E 1 3 - * E 5 + /a pilha teria sucessivamente os seguintes contedos:( ) [ ]E [ 0 ]9 [ 9 ]0 [ 90 ]E [ 90 0 ]2 [ 90 2]0 [ 90 20 ]E [ 90 20 0 ]1 [ 90 20 1 ]5 [ 90 20 15 ]E [ 90 20 15 0 ]1 [ 90 20 15 1 ]3 [ 90 20 15 13 ]- [ 90 20 2 ]* [ 90 40 ]E [ 90 40 0 ]5 [ 90 40 5 ]+ [ 90 45 ]/ [ 2 ]indicando o resultado 2 de 90 20 15 13 - * 5 + /, ou seja,(90/((20*(15-13))+5)) na notao habitual

9. Suponha que uma pilha declarada portypedef struct no NO, *PT;Estruturas de Dados J .L. Rangel 3struct no {char elem;PT prox;};typedef PT PILHA;para representar uma pilha de caracteres atravs de uma lista encadeada. Escreva umafuno com prottipoint conta(PILHA p);que tem como reultado o nmero de elementos da pilha.

10. Suponha uma pilha de caracteres, cuja interface est no arquivo pilha.h, cujocontedo typedef struct no *PILHA;PILHA init(void);void push(PILHA *p, char i);char pop(PILHA *p);int vazia(PILHA p);void show(PILHA p);Escreva um programa que l uma cadeia s, empilha os caracteres de s em uma pilhap, retira os caracteres de p para uma outra cadeia t, de forma que os caracteres de tso os mesmos caracteres de s em forma invertida. Finalmente, o programa imprimes e t.(Para testar este programa, ser necessrio terminar a implementao da pilha (ouseja, o arquivo pilha.c) , completando as declaraes de struct no e dasfunes.)(abr 00)

Referncias: Prof J. L. Rangel