Pilhas

Propaganda
Folha prática - EAD Pilha
1
EAD Pilha
A. Considere as declarações de Nodo e PNodo (adaptada dos apontamentos) seguintes:
struct Nodo {
int Elemento;
struct Nodo *Ant;
};
typedef struct Nodo *PNodo;
Considere as funções relacionadas com a Estrutura Abstrata de Dados Pilha com armazenamento
não sequencial usando memória dinâmica (que constam em Capítulo 3 - Estruturas de Dados
sequenciais com armazenamento não sequencial www.di.ubi.pt/~cbarrico –> Programação
III/Estruturas de Dados -> Apontamentos) adaptadas às declarações anteriores.
- Copiar e adaptar todas as funções associadas às operações básicas de uma EAD Pilha de
inteiros estudadas nas aulas teóricas para um ficheiro denominado “PilhaInteiros.h”, as quais se
encontram descritas nos apontamentos disponibilizados na página web da disciplina.
- Elaborar um programa que inclua o ficheiro anterior e resolva as questões colocadas a seguir,
usando, sempre que possível, as funções/operações básicas mencionadas.
1. Implementar uma função para construir uma pilha S com valores inteiros positivos, inseridos
a partir do teclado.
2. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, determine o segundo elemento a partir do topo da pilha S.
3. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, determine o segundo elemento a partir do topo da pilha S, mas deixando a pilha S
inalterada.
4. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, e dado um inteiro N, determine o N-ésimo elemento a partir do topo da pilha S.
5. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, e dado um inteiro N, determine o N-ésimo elemento a partir do topo da pilha S, deixando
a pilha S inalterada. (Sugestão: usar uma pilha auxiliar).
6. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, determine o elemento do fundo da pilha S.
7. Usando a definição de pilha de inteiros em cima, implemente uma função de dada uma pilha
S, determine o elemento do fundo da pilha, deixando a pilha inalterada.
8. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, determine o terceiro elemento a partir do fundo da pilha S.
Programação III / Estruturas de Dados
Folha prática - EAD Pilha
2
9. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, inverta a ordem dos elementos da pilha S, utilizando apenas uma estrutura auxiliar.
Definir adequadamente a estrutura auxiliar e prever a possibilidade da pilha estar vazia.
10. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, troque de lugar o elemento que está no topo da pilha S com o que está na base da pilha
S. Usar apenas uma pilha auxiliar.
11. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, coloque os números pares na base da pilha S e os ímpares no topo da pilha S. Usar duas
pilhas auxiliares.
12. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, verifique se uma expressão matemática que inclui vários conjuntos de parênteses
agrupados estão balanceados (número de '(' igual ao número de ')'). Por exemplo:
7 - (( X * ((X + Y) / (J - 3)) + Y) / (4 - 2.5))
Pretende-se verificar se os parênteses estão corretamente agrupados, ou seja, se:
- existe um número igual de parênteses '(' e ')'.
Expressões como “A((A + B)” ou “A + B(” violam este critério.
- todo o parêntese '(' é precedido por um parêntese ')' correspondente.
Expressões como “)A+B(-C” ou “(A+B))-(C+D” violam este critério.
Sugestão: usar dois números inteiros diferentes, um associado a '(' e o outro a ')'.
13. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, verifique se uma expressão matemática, composta por operadores e operandos, está bem
definida na notação “Infixa”. Esta notação define-se da seguinte forma: - um operador unário
precede o operando; - um operador binário separa os dois operandos; - parênteses indicam
prioridades. Por exemplo: (a + b) * c.
14. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, verifique se uma expressão matemática, composta por operadores e operandos, está bem
definida na notação “Pós-fixa”. Esta notação define-se da seguinte forma: os operadores
seguem os operandos. Por exemplo: a b + c *.
15. Usando a definição de pilha de inteiros em cima, implemente uma função que dada uma pilha
S, verifique se uma expressão matemática, composta por operadores e operandos, está bem
definida na notação “Pré-fixa”. Esta notação define-se da seguinte forma: os operadores
precedem os operandos. Por exemplo: * + a b c.
Programação III / Estruturas de Dados
Folha prática - EAD Pilha
3
B. Outros problemas
16. Implemente uma EAD Pilha e uma função para determinar se uma string de caracteres de
entrada é da forma:
xCy
onde x é uma string consistindo nas letras 'A' e 'B' , e y é o inverso de x (isto é, se x =
"ABABBA", y deve equivaler a "ABBABA"). Em cada ponto, você só poderá ler o próximo
caractere da string.
17. Implemente uma EAD Pilha e uma função para determinar se uma string de caracteres de
entrada é da forma:
a D b D c D...D z
onde cada string, a, 6, ..., z, é da forma da string definida no Exercício 11. (Por conseguinte,
uma string estará no formato correto se consistir em qualquer número de strings desse tipo,
separadas pelo caractere 'D'.) Em cada ponto, você só poderá ler o próximo caractere da
string.
18. Elabore um algoritmo que sem usar uma EAD Pilha leia uma sequência de operações push e
pop, e determine se está ocorrendo erro ou não nalguma operação pop.
19. Que conjunto de critérios é necessário e suficiente para que uma sequência de operações
push e pop sobre uma única pilha (inicialmente vazia) deixe a pilha vazia sem provocar
erro? Que conjunto de critérios é necessário para que essa sequência deixe uma pilha não
vazia inalterada?
20. Implemente uma EAD Pilha qual cada item seja um número variável de inteiros. Escolha uma
estrutura de dados em C para essa pilha e elabore as funções push e pop para ela.
Programação III / Estruturas de Dados
Download