Você está na página 1de 3

Estruturas de Dados

Lista sobre Pilhas


Prof Elifranio
1. Suponha que uma pilha representada atravs de um vetor vet e de um inteiro
num. As declaraes podem ser

#define MAX 100


int vet[MAX], num;
Escreva uma funo push que se recusa a acrescentar um elemento pilha se no
houver espao suficiente no vetor vet, e, nesse caso, imprime uma mensagem

apropriada de erro.
2. Com as mesmas declaraes de (1), imagine que resolvemos separar as duas
funes 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 a

funo 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 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 100
struct pilha {
int vet[MAX], num;
};
typedef struct pilha PILHA;

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

contm a pilha propriamente dita.)


5. Suponha que vamos implementar uma pilha de caracteres usando uma lista
encadeada, com as declaraes

typedef 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 elementos

da 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 tipo
struct info declarado por
struct info {
char nome[80];
int matricula;
};

8. Suponha uma maquina de calcular que trabalha apenas com nmeros no


negativos, e que tem apenas as quatro operaes: soma, subtrao, produto e
diviso inteira. A mquina tem 16 teclas, representadas pelos caracteres:

0 1 2 3 4 5 6 7 8 9 + - * / C E
onde C representa clear, e E representa enter, que usada indicar que vai ser

fornecido entrado um nmero. A mquina usa notao polonesa sufixo, aquela em


que o operador vem depois dos operandos. Escreva um programa que usa uma pilha
de inteiros para simular a mquina: cada caracter que entra tratado, e a resposta o
contedo da pilha da mquina. Inicialmente, a pilha da mquina est vazia. As aes
correspondentes a cada caracter so:
i=0, 9 troque o valor x do topo da pilha por x*10+i
E empilhe um 0
op=+,-,*,/ tire dois elementos y e x do topo da pilha, e empilhe
x op y
C esvazia a pilha.

Por exemplo, se as entradas fossem sucessivamente


E 9 0 E 2 0 E 1 5 E 1 3 - * E 5 + /

a pilha teria sucessivamente os seguintes contedos:


()[
E [
9 [
0 [
E [
2 [
0 [
E [
1 [
5 [
E [
1 [
3 [
- [
* [
E [
5 [
+ [
/ [

]
0 ]
9 ]
90 ]
90 0 ]
90 2]
90 20 ]
90 20 0 ]
90 20 1 ]
90 20 15 ]
90 20 15 0 ]
90 20 15 1 ]
90 20 15 13 ]
90 20 2 ]
90 40 ]
90 40 0 ]
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 por


typedef struct no NO, *PT;
Estruturas de Dados J .L. Rangel 3

struct no {
char elem;
PT prox;
};
typedef PT PILHA;

para representar uma pilha de caracteres atravs de uma lista encadeada. Escreva uma
funo com prottipo
int 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, cujo
contedo
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 pilha


p, retira os caracteres de p para uma outra cadeia t, de forma que os caracteres de t
so os mesmos caracteres de s em forma invertida. Finalmente, o programa imprime
s e t.
(Para testar este programa, ser necessrio terminar a implementao da pilha (ou
seja, o arquivo pilha.c) , completando as declaraes de struct no e das
funes.)
(abr 00)

Referncias: Prof J.

L. Rangel

Você também pode gostar