Das 5102 Fundamentos da Estrutura da Informação

Documentos relacionados
INF 1620 P2-01/11/03 Questão 1 Nome:

INF 1620 P2-23/10/04 Questão 1 Nome:

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

INF 1620 P4-01/07/08 Questão 1 Nome:

INF 1620 P3-21/06/08 Questão 1 Nome:

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010

UNIVERSIDADE DA BEIRA INTERIOR

Árvores Binárias de Busca (ABB) 18/11

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

INF 1620 P4 11/12/06 Questão 1 Nome:

2. Considerando as seguintes declarações de uma lista encadeada

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Listas Lineares. continuando...

INF 1620 P3-25/11/05 Questão 1 Nome:

INF 1620 P3-27/11/04 Questão 1 Nome:

INF 1620 P4-27/06/02 Questão 1 Nome:

INF 1620 P4 30/06/07 Questão 1 Nome:

UNIVERSIDADE DA BEIRA INTERIOR

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

INF 1620 P3-29/06/04 Questão 1 Nome:

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Lista Encadeada (Linked List)

ESTRUTURAS DE DADOS (LEI, LM, LEE) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2018/2019

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

As duas soluções a seguir são exemplos da variedade de soluções admissíveis.

Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP

Árvores & Árvores Binárias

INF 1620 P4-06/12/02 Questão 1 Nome:

INF 1007 Programação II

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

INF P4-12/12/09 Questão 1 Nome:

Estruturas de Dados Aula 11: TAD Pilha

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Universidade Federal de Mato Grosso Estrutura de Dados II

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Árvores & Árvores Binárias

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

INF 1620 P3-06/12/03 Questão 1 Nome:

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

INF 1620 P4-13/12/01 Questão 1 Nome:

DAINF - Departamento de Informática

Fontes Bibliográficas. Listas Circulares. Função Imprime

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Árvores Binárias de Busca (ABB) 18/11

INF 1007 Programação II

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

J. L. Rangel 1. provar que uma árvore binária de altura h tem, no mínimo, h+1 nós, e, no máximo, 2 h+1 1.

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

(a) Indique, em português, o que realiza a seguinte função. [4 pontos]

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Aula T13 BCC202 Árvores. Túlio Toffolo

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010

AED1 - Árvores. Hebert Coelho. Instituto de Informática Universidade Federal de Goiás. HC AED1-Árvores 1/49

Carlos Eduardo Batista. Centro de Informática - UFPB

Revisão: Tipo Abstrato de Dados Recursividade

LISTAS LINEARES. Estrutura de Dados

Linguagem C: Listas Encadeadas

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

UNIVERSIDADE DA BEIRA INTERIOR

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Métodos Computacionais. Árvores

UNIVERSIDADE DA BEIRA INTERIOR

Estrutura de Dados II. Prof. Sérgio Portari

Estruturas de Dados Filas

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

struct Nodo { int struct Nodo typedef struct Nodo *PNodo; PNodo ConstruirPilha () { int PNodo Criar printf scanf while Push printf scanf return

Programação de Computadores II. Cap. 17 Busca

ÁRVORES E ÁRVORES BINÁRIAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 08: Árvores

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

INF 1007 Simulado P2 Nome: Instruções

Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

INF 1620 P4-09/07/03 Questão 1 Nome:

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Organizam dados de forma hierárquica. Acontecem com frequência na natureza. Fáceis de representar e manipular com computadores

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Capítulo 8: Abstrações de dados

Transcrição:

Das 5102 Fundamentos da Estrutura da Informação Gabarito da Segunda Prova 1. Tipos Abstratos de Dados TADs é uma forma programar. Eles permitem a estrutura de programas em módulos correlacionando estruturas de dados com conjuntos de funções. Em C, TADs são estruturadas em dois arquivos. No arquivo <TAD>.h que compõe o cabeçalho da TAD deve conter a definição das estruturas de dados e as definições ou protótipos das funções relacionadas que serão implementadas no arquivo <TAD>.c. 2. Toda função de uma TAD (exceto possivelmente função de criação da estrutura) deve receber uma referência para a estrutura de dados definida na TAD. Isso permite que sejam criadas e manipuladas diferentes versões da estrutura de dados em um mesmo programa. Ex: Pilha *p1, *p2; criapilha(p1); criapilha(p2); push(p1,10); push(p2, pop(p1)); 3. Passos: a) Encontrar a posição para inserção b) Checar se a posição para inserção é válida c) Inserir o novo elemento via o correto ajuste de ponteiros int inserirnaposicao(celula *le, int dado, int pos){ celula *ne, *temp; temp = le; if(pos == 1){ ne = malloc(sizeof(celula)); ne->prox = NULL; ne->dado = dado; le = ne; else{ int cont = 1; while(cont < pos) && (temp->prox!= NULL){ cont++; if((cont == pos-1) && (temp->prox == NULL)){ ne = malloc(sizeof(celula)); ne->prox = NULL; ne->dado = dado; temp->prox = ne; else{ ne = malloc(sizeof(celula)); ne->dado = dado; ne->prox = temp->prox; temp->prox = NE; return 0;

4. Pesquisa de informações em uma lista: a) int buscaelementoa(celula *le, int elem){ int cont = 1; celula *temp; temp = le; if(temp == NULL){ //lista vazia printf( a lista se encontra vazia! ); return 0; while(temp->dado!= elem){ if(temp->prox == NULL) // final da lista{ return 0; // função falhou cont++; return cont; b) celula *buscaelementob(celula *le, int pos){ int cont = 1; celula *temp; temp = le; if(temp == NULL){ //lista vazia printf( a lista se encontra vazia! ); return NULL; while(count < pos){ if(temp->prox == NULL){ // final da lista return NULL; // função falhou cont++; return temp; 5. Uma Heap pode ser implementada usando arrays como estrutura de dados base se a árvore binária que a modela for completa ou quase completa. Isto se deve ao fato das árvores binárias completas e quase completas poderem ser numeradas seqüencialmente de cima para baixo e da esquerda para a direita. Ainda, podemos facilmente identificar os graus de relacionamento na árvore via duas regras bem simples: a) Filho esquerdo = 2*pai b) Filho direito = 2*pai +1 6. Considere as duas propriedades a seguir: a) Em uma árvore completa todos os nós folha estarão localizados no último nível da árvore; b) Em uma árvore quase completa, todos os nós folha estarão no último ou no penúltimo nível da árvore. Os nós folha do último nível em uma árvore quase completa devem estar todos localizados à esquerda. int ehcompleta(celula *ab){ int altura = retornaaltura(ab); //retorna a altura de ab int resultado = checanivelfolha(ab, altura); if(resultado == 1){

printf( a árvore especificada é completa! ); else if(resultado == 2) { printf( a árvore especificada é quase completa! ); return 2; else{ printf( a árvore especificada é genérica ); return 0; int checanivelfolha(celula *ab, int alt) { int ra, rb; ra = rb = 0; if(ab->esq!= NULL){ ra = checanivelfolha(ab->esq, alt); if(ab->dir!= NULL){ rb = checanivelfolha(ab->dir, alt); if(ab->nivel == alt){ else if((ab->nivel == alt -1)&& (ra ==0) && (rb==0)){ return 2; if (ra == 1) && (ra == 1) else if ((ra == 1) (ra==2)) &&(rb == 2) return 2; else return 0; 7. Não. A função merge proposta para árvores binárias não funcionaria no caso de Heaps porque ela não garante que as propriedades da forma e da heap serão satisfeitas. Considerando que a TAD heap é dada, uma forma simples de, dadas as heaps Ha e Hb, construir uma nova heap Hc contendo todos os elementos de Ha e Hb e ainda mantendo as propriedades da heap, pode ser dada como: Heap *mergeheaps(heap *Ha, Heap *Hb){ Heap *tempa, *tempb; tempa = copyheap(ha); tempb = copyheap(hb); while(!isempy(tempb)) { Insere(TempA, remove(tempb)); return tempa; 8. struct heap{ int chave[20]; int dado[20];

int topo; typedef struct heap Heap; void insere(heap *h, int c, int d){ int temp, p, index = h->topo; h->chave[topo] = c; h->dado[topo] = d; h->topo = h->topo + 1; p = (int)(index/2); while((h->chave[index] > h->chave[p])&&(p!=0)){ temp = h->chave[index]; h->chave[index] = h->chave[topo]; h->chave[topo] = temp; index = p; p = (int)(index/2); int remove(heap *h){ int temp, index, fe, fd, indicedetroca; int tempdata = h->dado[0]; h->chave[0] = h->chave[h->topo -1]; h->topo = h->topo - 1; index = 1; fe = index * 2; fd = index * 2 + 1; while((h->chave[index] < h->chave[fe]) ( h->chave[index] < h->chave[fd])){ indicedetroca = maxkey(h, fe, fd); temp = h->chave[indicedetroca]; h->chave[indicedetroca] = h->chave[index]; h->chave[index] = temp; index = indicedetroca; fe = index * 2; fd = index * 2 + 1; 9. Para a solução desta questão, consideraremos uma fila de prioridade não ordenada struct cel{ int dado; struct cel *prox; struct cel *ant; int prioridade; ; typedef struct cel celula; struct fp{ struct cel *head; struct cel *tail; int size; ; typedef struct fp FilaPr; void inserecomp(filapr *f, int dado, int prior){

celula *c; c = malloc(sizeof(celula)); c->ant = null; c->prioridade = prior; c->dado = dado; c->prox = f->tail; f->tail = c; celula *removep(filapr *f){ int maxp; celula *maxcel, *temp; temp = f->tail; maxp = temp->prioridade; maxcel = temp; while(temp->prox!= NULL){ if(maxp < temp->prioridade){ maxp = temp->prioridade; maxcel = temp; (maxcel->ant)->prox = (maxcel->prox); (maxcel->prox)->ant = (maxcel->ant); return maxcel; //Observe que a função acima nao considera o caso do elemento ser único na lista, ou os casos em que o elemento a ser removido são o primeiro ou o último da lista. A preocupação principal com relação a questão está na identificação do elemento e no ajuste dos ponteiros. 10.Nota: como definido durante a prova, consideraremos apenas operações simples sem parênteses e sem prioridades entre as operações float resolveequacao(char *str){ char *elem; Pilha *PNums, *POps; int d1, d2, d3; PNums = criapilha(); POps = criapilha(); //parsing da string, conside funções que tomam conta desta tarefa while(elementosnastring(str)){ elem = proxelemento(str); if (ehnumero(elem)){ Celula *c = malloc(sizeof(celula)); c->num = atoi(elem); push(c, PNums); else{ Celula *c = malloc(sizeof(celula)); c->op = elem; push(c, POps);

while(numelementos(pops) > 0){ d1 = pop(pnums)->num; d2 = pop(pnums)->num; elem = pop(pops)->op; swhich (elem){ case + : d3 = d1 + d2; case - : d3 = d1 - d2; case * : d3 = d1 * d2; case / : d3 = d1 / d2; Celula *c2 = malloc(sizeof(celula)); c2->num = d3; push(c2, PNums); return pop(pnums)->num;