Escolar Documentos
Profissional Documentos
Cultura Documentos
Entrega em 02/05/2011
3) Para as funções a seguir, indique de quanto o valor de cada uma será alterado se o argumento for
incrementado em quatro vezes.
a) Monte e resolva uma relação de recorrência para o número de vezes que a operação básica
do algoritmo é executada.
11) Para resolver a questão a seguir considere a pilha estática vista em sala. O seguinte método para
codificar despachos diplomáticos foi adotado:
▪ Primeira etapa: todas as sequencias não vogais, incluindo o espaço em branco e os caracteres
de pontuação, são invertidas;
▪ Segunda etapa: a mensagem inteira resultante é invertida dando origem à mensagem
codificada.
13)Dada a estrutura de dados abaixo, que vimos em sala, para implementar uma lista simplesmente
encadeada dinâmica de inteiros em C++, crie uma função para inserir um nodo de forma ordenada.
A ordenação deve ser crescente. A assinatura da função é dada abaixo. Passa-se uma lista,
supostamente ordenada, por referência e o ponteiro para o nodo que se deseja inserir.
struct NodoLista {
int info;
NodoLista* prox;
};
struct Lista {
NodoLista* primeiro;
int tam;
};
struct NodoPilha {
int info;
NodoPilha* prox;
};
struct Pilha {
NodoPilha* topo;
};
// imprime a pilha
void imprime(const Pilha& p)
17) Seja uma árvore de busca binária de inteiros inicialmente vazia. Esquematize o seu estado final,
após terem sido inseridos os elementos 4, 1, 0, 5, 3, 7, 2, 6, 9 e 8, nesta ordem.
18) Informe a ordem em que os elementos acima inseridos serão visitados utilizando os
atravessamentos:
• em-ordem;
• pós-ordem;
• pré-ordem.
19) Dada a estrutura de dados abaixo, que vimos em sala, para representar uma árvore de busca
binária de caracteres em C++, faça uma função recursiva que receba uma árvore de busca binária e
retorne o número de nodos não-terminais da mesma.
struct NodoArvore {
char info; // arvore de caracteres
ArvoreBin subArvEsq;
ArvoreBin subArvDir;
};
20) Ainda baseado na estrutura de dados da questão anterior, faça uma função em C++ que retire o
maior elemento de uma árvore de busca binária.
21) Em sala de aula, demos a função em C++ abaixo para localizar um elemento numa árvore de
busca binária (baseada na estrutura de dados da questão 19). Mostre formalmente a complexidade
de pior caso deste procedimento. Suponha que a árvore esteja balanceada e completa.
Vê-se então que a eficiência, para o pior caso, da localização em árvores de busca binária é
maior do que em listas (em que não haja nenhum tipo de ordenamento). É correto então dizer
que, entre uma e outra estrutura, sempre devemos preferir a primeira? Justifique.
25) Implemente uma pilha genérica seguindo a mesma ideia vista para lista genérica.
26) Implemente uma fila genérica seguindo a mesma ideia vista para lista genérica.
27) Dada a estrutura de dados abaixo, vista em sala, para implementar uma árvore de busca binária
genérica em C++ (suponha que os métodos estejam devidamente implementados de acordo com o
que já vimos), mostre tudo que for necessário para implementar uma árvore de busca binária de
caracteres, a partir da árvore genérica abaixo. Mostre um pequeno programa que utilize sua árvore.
No seu programa, crie uma árvore, insira elementos, remova elementos, localize, imprima.
class NodoArvBin {
friend class ArvBin;
private:
ArvBin subArvEsq;
ArvBin subArvDir;
public:
NodoArvBin();
virtual ~NodoArvBin();
virtual void imprime();
virtual int compara(PNodoArv pArv);
};
class ArvBin {
private:
PNodoArv pRaiz;
PNodoArv tiraMenor();
public:
ArvBin();
~ArvBin();
int vazia();
void insere(PNodoArv pn);
void remove(PNodoArv pn);
PNodoArv localiza(PNodoArv pn);
void imprime();
void apagaArvore();
};