#include <stdlib.h> #include <stdio.h> int troca (int p[], int i){ int aux; aux = p[i+1]; p[i+1] = p[i]; p[i] = aux; int bubble(int p[],int tamanho){

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

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

DAINF - Departamento de Informática

Árvore Binária de Busca. Prof. César Melo

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

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

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

ÁRVORE BINÁRIA DE BUSCA

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Capacitação em Linguagem C Parte 2

Programação Estruturada

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Ponteiros e Tabelas. K&R: Capítulo 5

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

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Exercícios em C 1 Saulo O. D. Luiz

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

Árvores Binárias Balanceadas Estrutura de Dados I

Universidade Federal de Goiás Instituto de Informática Introdução à Computação Professor: Julliano Rosa Nascimento

GGI026 - Árvore rubro-negra - Remoção

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Listas ligadas/listas encadeadas

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Carlos Eduardo Batista. Centro de Informática - UFPB

Universidade Federal de Mato Grosso Estrutura de Dados II

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

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Aula 18 Algoritmos básicos de busca e classificação

Árvores. Prof. César Melo ICOMP/UFAM

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

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

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

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Algoritmos e Estruturas de Dados II Árvores - AVL. Prof. César Melo DCC/ICE/UFAM

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO INTRODUÇÃO Estrutura de Seleção. Prof. Luiz Fernando Laguardia Campos FMS

EAD Árvore - representação usando listas ligadas

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

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

Módulo 9. Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

EPs 1 e 2. EP2: veja. EP1: veja

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Aula 17: Ponteiros e Alocação Dinâmica em C

Instituto Superior Técnico Algoritmos e Estruturas de Dados

/* definição de um novo tipo, o da tabela do jogo */ typedef int sudoku[max_lin][max_col]; sudoku_v1.c 1

Árvores. Prof. César Melo DCC/ICE/UFAM

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

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

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

Árvores. Prof. César Melo DCC/ICE/UFAM

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

GGI026 - Árvore rubro-negra

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

Estruturas de dados elementares

Prof. Jesus José de Oliveira Neto

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

/* percorreu todo o vetor e não encontrou elemento */ return -1;

Computação 2. Aula 7. Profª. Fabiany Ponteiros

AED 2002/2003 p.1/19. Tipos Abstractos. Necessidade de tipos de dados abstractos Objectos Pilhas FIFOs e filas

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

Pesquisa. Pesquisa. Pesquisa. O problema de procurar(pesquisar) alguma informação numa tabela ou num catálogo é muito comum Exemplo:

Algoritmos e Estrutura de Dados

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Árvore Binária Exemplo de Implementação

Estrutura de Dados II. Prof. Sérgio Portari

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

Ponteiros. Baseado nos slides do Prof. Mauro.

INF 1007 Programação II

Métodos Computacionais. Árvores

GABARITO EXERCÍCIOS ÁRVORES arv.h struct noarv { int info; struct noarv * esq; struct noarv * dir; }; typedef struct noarv NoArv;

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

AULA 12 ESTRUTURA DE DADOS

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Aula 18: Funções em C

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

Algoritmos e Programação

Árvores Binárias de Busca

Básico: estrutura de programa, sintaxe Interface com linha de comando

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

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Árvores binárias de busca

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

Árvores Binárias de Pesquisa (ABP) INF01203 Estruturas de Dados. Operações. Árvores Binárias de Pesquisa (ABP) Caminhamento Central à Esquerda

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Introdução aos Algoritmos e Estruturas de Dados. 2 o Teste - A

Aula 08. Estruturas de dados Árvore e Grafo

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

Universidade Federal de Mato Grosso

UNIVERSIDADE DA BEIRA INTERIOR

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

Transcrição:

#include <stdlib.h> #include <stdio.h> int troca (int p[], int i) int aux; aux = p[i+1]; p[i+1] = p[i]; p[i] = aux; int bubble(int p[],int tamanho) int i,pi,pf,aux; if (tamanho > 0) for (i=0;i<tamanho;i++) pi=p[i]; pf=p[i+1]; if (pf<pi) troca(p,i); return bubble(p,tamanho-1); int main () int i,tm=5,v[6]=21,22,02,01,40,45; int *p; p=v; bubble(p,tm); for(i=0;i<6;i++) printf("%d\n",v[i]);

system("pause"); return 0; HASH #include <stdio.h> #include <stdlib.h> int main() int vet[10], l, i, c; int hash1[10][10],hash2[10][10],hash3[10][10], aux; for(i=0;i<=10;i++) vet[i]= 7*(1+i) ; for(l=0;l<10;l++) hash1[i][l] = 0; hash2[i][l] = 0; hash3[i][l] = 0; aux = vet[i] %7; c=0; while(hash1[aux][c]!=0) c++; hash1[aux][c] = vet[i];

aux = vet[i] % 14; c=0; while(hash2[aux][c]!=0) c++; hash2[aux][c] = vet[i]; aux = vet[i] % 5; c=0; while(hash3[aux][c]!=0) c++; hash3[aux][c] = vet[i]; for(l=0;l<10;l++) printf("%3d",hash1[i][l]); printf("\n"); printf("\n\n\n"); for(l=0;l<10;l++) printf("%3d",hash2[i][l]); printf("\n"); printf("\n\n\n"); for(l=0;l<10;l++) printf("%3d",hash3[i][l]); printf("\n");

printf("\n\n\n"); return 0; Arvore int ok; // se t aponta para null, a inserção é na raiz... if (*t == NULL) *t = (tnoarv *) malloc(sizeof(tnoarv)); if (*t == NULL) return; (*t)->esq = NULL; (*t)->dir = NULL; (*t)->info = dado; // Se o dado a ser inserido for menor que o nó atual, recursividade à esquerda if (dado < (*t)->info) inserir(&((*t)->esq), dado); else // Se o dado a ser inserido for menor que o nó atual, recursividade à direita if (dado > (*t)->info) inserir(&((*t)->dir), dado);

Função remover da árvore binária: void remover(tarv *raiz, int valor) tarv aux; if(!arvore_vazia(*raiz)) // se o valor que será removido for menor que o nó atual, if(valor < (*raiz)->info) remover(&((*raiz)->esq), valor); // faz recursividade á esquerda else // se o valor que será removido for maior que o nó atual, if(valor > (*raiz)->info) remover(&((*raiz)->dir), valor); // faz recursividade á direita. else // encontrou // quando o nó a ser removido for encontrado, if(!arvore_vazia((*raiz)->esq) &&!arvore_vazia((*raiz)->dir) ) // verificamos se os nós filhos da esquerda e direita não são null. // se não forem null, buscamos o menor nó a partir do nó da direita. aux = minimo((*raiz)->dir); (*raiz)->info = (aux->info); remover(&(*raiz)->dir, (*raiz)->info); else // caso os nó da direita e da esqueda, ou somente o da direita for null, // precisamos apenas remover aux = *raiz; // o nó atual e fazer ajustar os ponteiros if(arvore_vazia((*raiz)->esq)) // se o nó da esquerda for vazio // o nó pai do atual, apontará para o filho da direita do nó atual. *raiz = (*raiz)->dir;

else // se o nó da esquerda não for vazio. // o nó pai do atual, apontará para o filho da esquerda do nó atual. *raiz = (*raiz)->esq; free(aux); void remover(tarv *raiz, int valor) tarv aux; if(!arvore_vazia(*raiz)) // se o valor que será removido for menor que o nó atual, if(valor < (*raiz)->info) remover(&((*raiz)->esq), valor); // faz recursividade á esquerda else // se o valor que será removido for maior que o nó atual, if(valor > (*raiz)->info) remover(&((*raiz)->dir), valor); // faz recursividade á direita. else // encontrou // quando o nó a ser removido for encontrado, if(!arvore_vazia((*raiz)->esq) &&!arvore_vazia((*raiz)->dir) ) // verificamos se os nós filhos da esquerda e direita não são null. // se não forem null, buscamos o menor nó a partir do nó da direita. aux = minimo((*raiz)->dir); (*raiz)->info = (aux->info); remover(&(*raiz)->dir, (*raiz)->info); else // caso os nó da direita e da esqueda, ou somente o da direita for null,

// precisamos apenas remover aux = *raiz; // o nó atual e fazer ajustar os ponteiros if(arvore_vazia((*raiz)->esq)) // se o nó da esquerda for vazio // o nó pai do atual, apontará para o filho da direita do nó atual. *raiz = (*raiz)->dir; else // se o nó da esquerda não for vazio. // o nó pai do atual, apontará para o filho da esquerda do nó atual. *raiz = (*raiz)->esq; free(aux);

Função minimo, retorna o nó com valor minímo: tarv minimo(tarv T)// procura o nó com valor mínimo if(arvore_vazia(t)) return NULL; else if( arvore_vazia(t->esq) ) return T; else return minimo(t->esq); tarv minimo(tarv T)// procura o nó com valor mínimo if(arvore_vazia(t)) return NULL; else if( arvore_vazia(t->esq) ) return T; else return minimo(t->esq);

Função maximo, retorna o nó com o valor máximo: tarv maximo(tarv T)// procura o nó com valor máximo if(!arvore_vazia(t) ) while(!arvore_vazia(t->dir) ) T = T->dir; return T; tarv maximo(tarv T)// procura o nó com valor máximo if(!arvore_vazia(t) ) while(!arvore_vazia(t->dir) ) T = T->dir; return T; Função para buscar elemento na árvore binária: //======================================================================= // A função pesquisa nos nós da árvore o valor passado como parâmetro, // caso o valor esteja na árvore, ela retorna este nó que está o valor. tarv busca_elemento(tarv t, int dado) tarv achou; if (arvore_vazia(t)) return NULL; if (t->info == dado) return t; achou = busca_elemento(t->esq, dado); if (arvore_vazia(achou)) achou = busca_elemento(t->dir, dado); return achou;

//======================================================================= // A função pesquisa nos nós da árvore o valor passado como parâmetro, // caso o valor esteja na árvore, ela retorna este nó que está o valor. tarv busca_elemento(tarv t, int dado) tarv achou; if (arvore_vazia(t)) return NULL; if (t->info == dado) return t; achou = busca_elemento(t->esq, dado); if (arvore_vazia(achou)) achou = busca_elemento(t->dir, dado); return achou; Merge #include<stdio.h> void intercalar (int v[],int aux[],int inicialv1, int inicialv2,int final2); void mergesort (int v[], int aux[],int PontoA, int dir); int main() int v[10]= 9,8,7,6,5,4,3,2,1,0,aux[10],i; mergesort(v,aux,0,9); for(i=0; i<10; i++) printf("%d\n",v[i]); return 0; void intercalar (int v[],int aux[],int inicialv1, int inicialv2,int final2) int inicial1=inicialv1,inicial2=inicialv2,fim1=inicial2-1,au=0,i; while(inicial1<=fim1 && inicial2<=final2) if (v[inicial1]<v[inicial2]) aux[au++] = v[inicial1++]; else

aux[au++] = v[inicial2++]; while(inicial1<=fim1) aux[au++] = v[inicial1++]; while(inicial2<=final2) aux[au++] = v[inicial2++]; for(i=0; i<au; i++) v[i+inicialv1]=aux[i]; void mergesort (int v[], int aux[],int PontoA, int dir) int PontoB,i; if(pontoa<dir) PontoB=(PontoA+dir)/2; mergesort(v,aux,pontoa,pontob); mergesort(v,aux,pontob+1,dir); intercalar(v,aux,pontoa,pontob+1,dir); Shell // Libs #include <stdio.h> #include <stdlib.h> #define MAX 10 void shell_sort(int *a, int Tamanho); int main(int argc, char** argv) int i, vet[max]= 9,8,7,6,5,4,3,2,1,0; shell_sort(vet, MAX); for(i = 0; i < MAX; i++) printf("%d\n", vet[i]); system("pause"); return 0; void shell_sort(int *a, int Tamanho) int i, j, valor; int Lacuna = 1;

do Lacuna = 3*Lacuna+1; while(lacuna < Tamanho); do Lacuna /= 3; for(i = Lacuna; i < Tamanho; i++) valor = a[i]; j = i - Lacuna; while (j >= 0 && valor < a[j]) a[j + Lacuna] = a[j]; j -= Lacuna; a[j + Lacuna] = valor; while(lacuna > 1); Grafo