UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação. Introdução. Material disponível para download em:
|
|
- Giuliana Valverde Rodrigues
- 7 Há anos
- Visualizações:
Transcrição
1 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 1 Introdução Material disponível para download em: Estruturas de Dados EMENTA: Recursividade, Quick sort; Divisão e Conquista, Guloso, Backtracking; Complexidade; Alocação dinâmica de memória: Listas encadeadas; Árvores.. 2 OBJETIVOS: Aprofundar os conhecimentos em estruturas de dados no sentido de uma sólida formação que os capacitem a construir aplicativos de propósito geral. Levá-los a conhecer os fundamentos teóricos da estrutura de dados e como estes fundamentos implicam na definição de um sistema. METODOLOGIA DE ENSINO: Nas aulas teóricas os conceitos serão expostos por meio de utilização de lousa, retroprojetor, datashow, sendo disponibilizado para os alunos o material de apoio utilizado. Serão propostas atividades individuais ou em grupo para melhor fixação dos conceitos. As aulas práticas serão no laboratório de informática utilizando como ferramenta de apoio a linguagem de programação C. Todas as aulas práticas serão duas das quatro aulas no período. SISTEMA DE AVALIAÇÃO: O critério de avaliação deverá ser composto por 3 notas oficiais (AV1, AV2 e AV3), oriundas de instrumentos diversificados de avaliação. Para a composição da média serão consideradas as duas maiores notas obtidas entre a AV1, AV2 e AV3, sendo que as duas maiores notas serão somadas e divididas por 2, considerando-se aprovado o aluno que obtiver média final maior ou igual a 6, (seis).
2 Bibliografia BIBLIOGRAFIA BÁSICA: PEREIRA, Silvio do Lago; Estruturas de Dados Fundamentais Conceitos e Aplicações. 4ª ed. São Paulo, Érica, 2, 264 p. ASCENCIO, Ana Fernanda Gomes. Lógica de programação com Pascal. Ed. Makron Books, 1999, 355 p. VILLAS, Marcos Viana. Estruturas de Dados: Conceitos e Técnicas de Implementação. Ed. Campus, Schildt, Herbert. C Completo e Total. São Paulo : Pearson : Makron Books, 26, c1997 Aho, Alfred V. The design and analysis of computer algorithms Massachussets, EUA : Addison- Wesley, c BIBLIOGRAFIA COMPLEMENTAR: Pereira, Vania C.S. Algorítmos e lógica de programação: 1 exercícios resolvidos em pseudocódigo e linguagem C Isbn: São Paulo, 211 ZIVIANI, Nivio. Projeto de algoritmos com implementação em Pascal e C. Ed. Thomson, 2. BUCKNALL, Julian. Algoritmos e Estruturas de dados com Delphi. Ed. Berkeley, 22 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 4 Revisão de Pilhas Material disponível para download em:
3 Pilhas Uma pilha é uma lista linear em que apenas as operações de acesso, inserção e remoção são possíveis. 5 Todas estas operações deve ser realizadas num mesmo extremo denominado topo. Devido às características das operações da pilha, o último elemento a ser inserido será o primeiro a ser retirado. Estruturas desse tipo são conhecidas como "LIFO" (last in, first out). Exemplo: Em uma rua sem saída, tão estreita que apenas um carro passa por vez, o primeiro carro a sair será o último a ter entrado. Observe ainda que não podemos retirar qualquer carro e não podemos inserir um carro de tal forma que ele não seja o último. Operações com Pilhas Operações básicas 6 Seja P uma variável do tipo pilha e X um elemento qualquer push(p, x) - Procedimento que insere X no topo de P. (Empilha) pop(p) - Função que remove o elemento do topo da pilha P devolvendo o valor do topo para a rotina que a chamou. (Desempilha) top(p) - Função que retorna uma cópia do elemento do topo de P, devolvendo o valor do topo da pilha P para a rotina que a chamou. (Copia) Operações auxiliares init(p) Procedimento que esvazia a Pilha P. (Inicia / Esvazia) isfull(p) Função que retorna um valor lógico informando se a pilha está cheia. Verdadeiro se estiver cheia ou Falso caso contrário. (Pilha cheia) isempty(p) Função que retorna um valor lógico informando se a pilha está vazia. Verdadeiro se estiver vazia ou Falso caso contrário. (Pilha vazia)
4 Exemplo de uso de pilhas Dado um número inteiro, positivo em base decimal, convertê-lo para binário. # include <stdio.h> # include <stdlib.h> # include "pilhas.h" (decimal) = 111 (binário) int main() { int n, r; tppilha p; printf("digite um inteiro positivo: "); scanf("%d", &n); init ( &p ); do { r = n % 2; push ( &p, r ); n = n/2; while (n!= ); printf("\n\ncorrespondente ao Binario => "); while ( isempty ( &p ) == ) { r = pop ( &p ); printf("%d", r); printf("\n\n\n"); system("pause"); return ; Pilhas no Controle de Variáveis e Sub-Rotinas 1 # include <stdio.h> 8 2 void A( ) { 3 int A1, A2; void B ( ) { 7 float B1, B2; A ( ); Pilha 1 Pilha 2 12 int main( ) { 13 int P1, P2; 14 A ( ); B( );
5 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 9 Revisão de Ponteiros Material disponível para download em: Alocação de Memória Da área de memória que é reservada ao programa, uma parte é usada para armazenar as instruções a serem executadas e a outra é destina ao armazenamento de dados. 1 Quem determina quanto de memória será usado para as instruções é o compilador. Alocar área para armazenamento de dados, entretanto, é responsabilidade do programador. Quando a quantidade de memória utilizada pelos dados é previamente conhecida e definida no próprio código-fonte do programa, trata-se de alocação estática. Quando o programa é capaz de criar novas variáveis durante sua execução, dizemos que a alocação é dinâmica.
6 Ponteiros 11 PONTEIRO é... uma variável especial que contém o endereço de memória de outra variável. variável que contém endereços de posições de memória alocadas na memória. VARIÁVEL PONTEIRO VARIÁVEL DINÂMICA endereço de memória de outra variável conteúdo do tipo que se deseja acessar ptr <sem nome> (endereço 1FFA) 1FFA 5 Ponteiros Comandos básicos < tipo de dado > *< identificador > ; Declara uma variável do tipo ponteiro. Pode haver um ponteiro (ou apontador) para qualquer tipo de variável. 12 (void*) malloc(tamanho em bytes); Aloca dinamicamente, durante a execução do programa, células de memória. Esta função devolve um ponteiro void que deve ser ser convertido para o tipo desejado. O tamanho em bytes pode ser determinado utilizando a função sizeof() que retorna o tamanh em bytes que um tipo de dados ocupa. Exemplo: int *ptr; ptr = ( int * ) malloc ( sizeof ( int ) ) ; free (ponteiro) Libera as células de memória alocadas dinamicamente. Exemplo free ( ptr ); Para manipulação de valores utilizando ponteiros temos dois operadores: O operador * devolve o valor contido no endereço apontado pela variável ponteiro; O operador & devolve o endereço de memória alocado de uma variável. Profa. Vânia Cristina de Souza Pereira 212 Material de Apoio Notas de Aula Estruturas de Dados TADS
7 Exemplo 13 # include < stdio.h > # include < stdlib.h > int main ( ) { int *x, *y; int a, b; a = 27; b = 43; x = &a; y = &b; printf ( "*x = %d x = %d \n", *x, x ) ; printf ( "*y = %d y = %d \n\n", *y, y ) ; *x = *y ; printf ( "*x = %d x = %d \n", *x, x ) ; printf ( "*y = %d y = %d \n\n", *y, y ) ; *x = 27; y = x ; printf ( "*x = %d x = %d \n", *x, x ) ; printf ( "*y = %d y = %d \n\n", *y, y ) ; system ( "pause" ) ; return ; Declaração das variáveis ponteiro Recebe o endereço de memória da variável a. Ex.: 4A9B Recebe o endereço de memória da variável b. Ex.: 4AAB atribui a informação que está no endereço 4AAB para o endereço 4A9B a variável y está apontada para o endereço de x 4A9B UNIVERSIDADE NOVE DE JULHO - UNINOVE 14 Pesquisa e Ordenação Revisão de Arquivos Material disponível para download em:
8 Arquivos Um arquivo é semelhante a um vetor, exceto por alguns motivos: o vetor fica armazenado na memória RAM; o arquivo fica armazenado em disco; o vetor deve ter um tamanho fixo, definido em sua declaração; o tamanho do arquivo pode variar durante a execução do programa. Os vetores são manipulados através de um índice de controle, enquanto os arquivos são manipulados por um ponteiro de registro. 15 As estruturas de dados tipo arquivo são apropriadas para organizar: grande quantidade de dados informações processadas por diversas aplicações informações que requisitam armazenamento permanente Vantagens e desvantagens no uso de arquivos Vantagem: Os dados não são perdidos entre uma execução e outra do programa. Desvantagem: O acesso a disco é muito mais lento do que o acesso à memória. Arquivos Tipos de arquivo 16 Tipo Texto Estão capacitados a armazenar palavras, frases e também dados numéricos. Os números, entretanto, serão armazenados como um caractere do tipo alfanumérico. Ao serem lidos de um arquivo e passados para a memória, os dados numéricos são convertidos para o seu formato original. Tipo Binário usa o sistema binário para armazenar tanto as informações numéricas, quanto as informações literais, através do código ASCII, compostos por uma sequencia de bytes. Arquivos textos são legíveis devido a forma que os dados foram gravados, mas consumem mais espaço para armazenamento e para acessar uma informação é necessário percorrer sequencialmente o arquivo tornando a busca lenta. Arquivos binários não são legíveis uma vez que os dados são gravados do mesmo modo que estão na memória e consomem menos espaço de memória para o armazenamento. O acesso a uma informação em um arquivo binário é pode ser direto tornando a busca mais rápida.
9 Tabela com modos de abertura de arquivos 17 Modo "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+" "r+b" "w+b" Significado Abre um arquivo texto para leitura. O arquivo deve existir antes de ser aberto. Abrir um arquivo texto para gravação. Se o arquivo não existir, ele será criado. Se já existir, o conteúdo anterior será destruído. Abrir um arquivo texto para gravação. Os dados serão adicionados no fim do arquivo ("append"), se ele já existir, ou um novo arquivo será criado, no caso de arquivo não existente anteriormente. Abre um arquivo binário para leitura. Igual ao modo "r" anterior, só que o arquivo é binário. Cria um arquivo binário para escrita, como no modo "w" anterior, só que o arquivo é binário. Acrescenta dados binários no fim do arquivo, como no modo "a" anterior, só que o arquivo é binário. Abre um arquivo texto para leitura e gravação. O arquivo deve existir e pode ser modificado. Cria um arquivo texto para leitura e gravação. Se o arquivo existir, o conteúdo anterior será destruído. Se não existir, será criado. Abre um arquivo texto para gravação e leitura. Os dados serão adicionados no fim do arquivo se ele já existir, ou um novo arquivo será criado, no caso de arquivo não existente anteriormente. Abre um arquivo binário para leitura e escrita. O mesmo que "r+" acima, só que o arquivo é binário. Cria um arquivo binário para leitura e escrita. O mesmo que "w+" acima, só que o arquivo é binário. Acrescenta dados ou cria uma arquivo binário para leitura e escrita. O mesmo que "a+" acima, só que o arquivo é binário "a+b" Exemplo de manipulação de Arquivo Binário # include < stdio.h > # include < stdlib.h > # include < string.h > typedef struct { char nome [ 51 ] ; char ra [ 11 ] ; float nota ; int falta ; tplista ; 18 int main ( ) { tplista regchamada; FILE *arqchamada; arqchamada = fopen("alunos.dat", "a+b"); if (arqchamada == NULL) arqchamada = fopen("alunos.dat", "w+b"); if (arqchamada == NULL) { printf ( "\no arquivo não pode ser criado!\n\n" ) ; system ( "pause" ) ; exit ( 1 ) ; FILE fopen tipo de dado para uma variável ponteiro para um arquivo função para abrir um arquivo deve receber os parâmetros nome do arquivo e o modo de abertura
10 do { Exemplo system ( "cls" de ) ; manipulação de Arquivo Binário printf ( "Para encerrar digite '.' no campo Nome\n\n" ) ; printf ( "Nome... : " ) ; fflush ( stdin ) ; gets ( regchamada.nome ) ; if ( strcmp ( regchamada.nome, "." )!= ) { printf ( "Ra... : " ) ; fflush ( stdin ) ; gets ( regchamada.ra ) ; printf ( "Nota... : " ) ; scanf ( "%f", ®chamada.nota ) ; printf ( "Faltas.. : " ) ; scanf ( "%d", ®chamada.falta ) ; if ( fwrite ( ®chamada, sizeof ( tplista ), 1, arqchamada ) == NULL ) break; while ( strcmp ( regchamada.nome, "." )!= ) ; 19 fwrite - Função que grava os dados em um arquivo do tipo binário. - Deve receber quatro parâmetros: - variável que contém os dados a serem gravados; - número de bytes dos dados a serem gravados; - número de vezes que a gravação será executada; e - nome do arquivo onde os dados serão gravados. Exemplo de manipulação de Arquivo Binário system ( "cls" ) ; rewind ( arqchamada ) ; while ( 1 ) { fread ( ®chamada, sizeof ( tplista ), 1, arqchamada ) ; if ( feof ( arqchamada ) ) break ; printf ( "Ra...: %s\n", regchamada.ra ) ; printf ( "Nome..: %s\n", regchamada.nome ) ; printf ( "Nota..: %.1f\n", regchamada.nota ) ; printf ( "Faltas: %d\n\n", regchamada.falta ) ; fclose ( arqchamada ) ; system ( "pause" ) ; return ; 2 rewind fread feof fclose recoloca o leitor de posição no início do arquivo. lê os dados de um arquivo do tipo binário. Deve receber 4 parâmetros: - variável que receberá os dados lidos; - número de bytes dos dados que serão lidos; - número de vezes que a leitura será executada; e - nome do arquivo onde os dados estão gravados. informa se o final do arquivo foi atingido ou não, retornando ou 1 para F ou V fecha um arquivo aberto com a função fopen
11 Exemplo de manipulação de Arquivo Texto 21 #include < stdio.h > #include < conio.h > #include < stdlib.h > #include < string.h > int main ( ) { FILE *arq ; char nome [ 3 ] ; int idade, cont = ; float altura ; arq = fopen ( "dados.txt", "w" ) ; if ( arq == NULL ) { printf ( "\nerro na criação do arquivo dados.txt" ) ; getch ( ) ; exit ( 1 ) ; Exemplo de manipulação de Arquivo Texto 22 for ( ; ; ) { system ( "cls" ) ; printf ( "Nome (. para finalizar): " ) ; fflush ( stdin ) ; gets ( nome ) ; if ( strcmp ( nome, "." ) == ) break ; printf ( "Idade: " ) ; scanf ( "%i", &idade ) ; printf ( "Altura: ) ; scanf ( "%f", &altura ) ; fprintf ( arq, "%s %i %.2f \n", nome, idade, altura ) ; fclose ( arq ) ;
12 Exemplo de manipulação de Arquivo Texto printf ( "\nabertura e leitura do arquivo gravado\n" ) ; arq = fopen ( "dados.txt", "r" ) ; if ( arq == NULL ) { printf ( "\nerro na abertura do arquivo dados.dat" ) ; getch ( ) ; exit ( 1 ) ; while (!feof ( arq ) ) { fscanf ( arq, "%s %i %f \n", nome, &idade, &altura ) ; printf ( "\n Nome = %s Idade = %i Altura = %.2f", nome, idade, altura ) ; ++cont ; fclose ( arq ) ; printf ( "\n\narquivo com %d registros. Fechando o arquivo.\n", cont ) ; getch ( ) ; return ; 23 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 24 Recursão Material disponível para download em:
13 Recursão Trata-se de uma subrotina que chama a si mesma, porém, como todo algoritmo deve ser finito, isto é, deve terminar após ter executado uma quantidade finita de passos. 25 Uma imagem recursiva Exemplos: Ler um livro: (a) Ler uma página (b) Ler uma página e Ler o resto do livro. Examinar lista: (a) Examinar um elemento (b) Examinar um elemento e Examinar lista restante. Uma Imagem Recursiva Recursão Para garantir que uma chamada recursiva não criará um looping que será executado infinitamente, é necessário que ela esteja condicionada a uma expressão lógica que, em algum instante, torna-se-á falsa e permitirá que a recursão termine. 26 # include <stdio.h> # include <stdlib.h> int main ( ) { int num, fat; fat = 1; printf ( "Digite um numero => " ) ; scanf ( "%d", &num ) ; while ( num > ) { fat = fat * num; num - - ; printf ( "\n\nfatorial = %d.\n\n", fat ); system ( "pause" ) ; return ; # include <stdio.h> # include <stdlib.h> int fat ( int n ) { if ( n == ) return 1; else return ( n * fat ( n-1 ) ) ; int main ( ) { int num; printf ( "Digite um numero => " ) ; scanf ( "%d", &num ) ; printf ( "\n\nfatorial = %d.\n\n", fat ( num ) ); system ( "pause ) ; return ;
14 Recursão 27 Invocações geradas e valores retornados para o cálculo de fat ( 5 ). Fatorial é o produto dos números naturais desde 1 até o inteiro N. Por definição! = 1. Exemplo : 5! = 5 * 4 * 3 * 2 * 1 5! = 12. 5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 *! int fat ( int n ) { if ( n == ) return 1; else return ( n * fat ( n-1 ) ) ; Fat (5) 5 * fat (4) 5 * Fat (4) 4 * fat (3) 4 * 6 24 Fat (3) 3 * fat (2) 3 * 2 6 Fat (2) 2 * fat (1) 2 * 1 2 Fat (1) 1 * fat () 1 * 1 1 Fat () 1 Quando aplicar recursão? É preciso analisar o problema e verificar se realmente vale a pena encontrar uma solução recursiva. 28 A decisão de usá-la ou não deverá ser tomada após a comparação das possíveis soluções recursiva e iterativa. Se bem utilizada, pode tornar o algoritmo claro, simples e conciso. Embora a recursão seja uma ferramenta bastante interessante para resolução de problemas, nem sempre ela poderá ser empregada, pois a solução mais eficiente é através do modo iterativo.
15 Exemplo de uso de recursão - MDC MDC Máximo Divisor Comum O primeiro tem que ser maior que o segundo; Dividir o primeiro pelo segundo; O segundo passa a ser o primeiro e o segundo será o resto da divisão; Quando o segundo for igual a zero o primeiro será o MDC. 29 # include <stdio.h> # include <stdlib.h> int mdc ( int p, int s ); int main ( ) { int x, y ; printf ( "Digite o 1o. numero => " ) ; scanf ( "%d", &x ) ; printf ( "\ndigite o 2o. numero => ) ; scanf ( "%d", &y ) ; printf ( "\n\nmdc = %d\n\n", mdc ( x, y ) ) ; system ( "pause" ) ; return ; int mdc ( int p, int s ) { if ( s > p ) return ( mdc ( s, p ) ); else if ( s == ) return ( p ); else return ( mdc ( s, p % s ) ); Exercícios: Recursão ) Escrever uma função recursiva chamada Potencia que receberá os parâmetros X e Y (argumentos inteiros e positivos), retornando o resultado, usando a seguinte definição: Potencia retorna X, se Y=1 ou Potencia retorna X * Potencia(X,Y-1). 2) Qual será o valor impresso após a execução do programa abaixo? # include <stdio.h> # include <stdlib.h> int f_rec ( int x, int y ) { if (x == ) return ( y ); else return ( f_rec ( x-1, y+1 ) ); int main( ) { int x, y, k; x = 7; y = 1; k = f_rec ( x, y ); printf("resultado => %d\n\n", k); system("pause"); return ; 3) Escreva uma função void recursiva que receba um número inteiro positivo n, e exiba na tela os números Profa. Vânia inteiros Cristina entre de Souza n e Pereira, inclusive. 212 Material Exemplo de Apoio n = 5 Notas será de Aula exibido Pesquisa 5 e Ordenação CC
16 Exercícios: Recursão - 2 4) Considerando a função a seguir, a chamada p(5) causa: 31 void p ( int n ) { if ( n!= ) { p ( n 2 ) ; printf("%d", n ) ; a) Apenas a exibição dos números 1, 3 e 5 nessa ordem b) A exibição dos números 1, 3 e 5 nessa ordem, seguido de erro de estouro de pilha c) Apenas a exibição dos números 5, 3 e 1 nessa ordem d) A exibição dos números 5, 3 e 1 nessa ordem, seguido de erro de estouro de pilha e) Apenas erro de estouro de pilha 5) Faça uma função recursiva para achar um elemento num vetor. A função deve retornar o índice do elemento no vetor ou -1 caso ele não exista. Exercícios: Recursão - 3 6) Qual será o valor impresso após a execução do programa ao lado? 32 # include <stdio.h> # include <stdlib.h> int x =, a; int rec ( int n, int i ); int main( ) { a = rec (5,2); printf("resultado = %d\n\n",a); system("pause"); return ; int rec ( int n, int i ) { if ( i > 9 ) return ( x ); else { x = n + i ; return ( rec ( n, i + 1 ) );
17 Exercícios: Recursão ) O que será impresso após a execução do programa abaixo, sabendo que x = arara? # include <stdio.h> # include <stdlib.h> # include <string.h> int pal(char a[6], int ini, int fim); int main( ) { char x[6]; int i, f, result; gets(x); i = ; f = strlen(x)-1; result = pal(x, i, f); if (result) printf("verdadeiro\n\n"); else printf("falso\n\n"); system("pause"); return ; int pal(char a[6], int ini, int fim) { if (a[ini] == a[fim]) if (ini == fim) return 1; else else return pal(a, ++ini, --fim); return ; UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 34 Quick Sort Material disponível para download em:
18 Quick Sort É um método dos mais utilizados para ordenação de valores e de forma geral um dos mais eficientes. 35 Trata de um método de ordenação baseado no conceito da Divisão e Conquista e também em trocas (como na ordenação bubble sort ). Para a ordenação dos dados primeiramente o vetor deve ser dividido em tres partes onde: Uma parte deve conter apenas um elemento identificado como pivô. Uma parte deve conter todos os elementos com valores menores ou iguais ao pivo. Todos estes valores devem estar antes do índice que contém o valor do pivô. Uma parte deve conter todos os elementos com valores maiores ao pivô. Todos estes valores devem estar depois do índice que contém o valor do pivô. Atendidos os requisitos acima aplica-se recursivamente a técnica em cada um dos subvetores, enquanto a quantidade de elementos for maior ou igual a dois. Quick Sort Escolha do pivô pode feita aleatóriamente ou o elemento do meio do vetor. 36 A partir da escolha do pivô inicia-se as comparações entre os valores da seguinte forma: Comparar v[], v[1],... até encontrar um elemento v[a] > pivô; Comparar, a partir do final do vetor, os elementos v[n-1],v[n-2],... Até encontrar v[b]<=pivô. Uma vez encontrados os valores trocar v[a] com v[b] Retomar a busca, para cima a partir de v[a+1], e para baixo, a partir de v[b-1]; Terminar o processo de busca, quando os valores de a e b se inverterem, sendo que o valor do pivô estará em sua posição correta em relação aos valores da vetor conforme as regras descritas no slide anterior.
19 Quick Sort 37 void quick(int v[max], int inicio, int fim) { int baixo, alto, meio, pivo, k; baixo = inicio; alto = fim; meio = (int) ((baixo + alto) / 2); pivo = v[meio]; while (baixo <= alto) { while (v[baixo] < pivo) baixo++; while (v[alto] > pivo) alto--; if (baixo < alto) { k = v[baixo]; v[baixo++] = v[alto]; v[alto--] = k; else if ( baixo == alto ) { baixo++; alto--; if(alto > inicio) quick(v, inicio, alto); if(baixo < fim) quick(v, baixo, fim); Quick Sort 38 baixo alto meio v[] v[1] v[2] v[3] v[4] v[5] v[6] v[7] v[8] v[9] > 31 e 11 < 31, então trocar 41 e > 31 e 13 < 31, então trocar 93 e > 31 e 31 = 31, então trocar 95 e = 21 e 13 < 21, então trocar 21 e > 45 e 41 < 45, então trocar 95 e = 95 e 85 < 95, então trocar 95 e = 93 e 85 < 93, então trocar 93 e
20 # include <stdio.h> void quick ( int v [ MAX ], int inicio, int fim ) { # include <stdlib.h> int baixo, alto, meio, pivo, k; # define MAX 8 baixo = inicio; alto = fim; void quick ( int v [ MAX ], int inicio, int fim ); meio = ( int ) ( ( baixo + alto ) / 2 ); pivo = v [ meio ]; int main ( ) { while ( baixo <= alto ) { int vetor [ MAX ] = { 12, 1, 56, 16, 8, 19, 23, 49 ; while ( v [ baixo ] < pivo ) int i; baixo ++; printf ( "Vetor Desordenado:\n" ); while ( v [ alto ] > pivo ) for ( i = ; i < MAX; i++ ) alto --; printf ( "%d ", vetor [ i ] ); if ( baixo <= alto ) { printf ( "\n\n" ); k = v [ baixo ]; quick ( vetor,, MAX 1 ); v [ baixo ++ ] = v [ alto ]; printf ( "\n\nvetor Ordenado:\n" ); v [ alto -- ] = k; for ( i = ; i < MAX; i++ ) printf ( "%d ", vetor [ i ] ); else printf ( "\n\n" ); if ( baixo == alto ) { system ( "pause" ); baixo ++; return ; alto --; if ( alto > inicio ) quick ( v, inicio, alto ); if ( baixo < fim ) quick ( v, baixo, fim ); Exemplo 1 39 # include <stdio.h> void quick ( char v [ MAX ] [ 15 ], int inicio, int fim ){ # include <stdlib.h> int baixo, alto, meio; # include <string.h> char k [ 15 ], pivo [ 15 ]; # define MAX 8 baixo = inicio; void quick ( char v[max][15], int inicio, int fim ); alto = fim; meio = ( int ) ( ( baixo + alto ) / 2 ); int main( ){ strcpy ( pivo, v [ meio ] ); char vetor[ MAX ] [ 15 ] = {"Lucas", "Mariano", while ( baixo <= alto ) { "Alberto", "Douglas", "Leonardo", "Mateus", "Flavio", while ( strcmp ( v [ baixo ], pivo ) < ) "Luiz"; baixo ++; int i; while ( strcmp ( v [ alto ], pivo ) > ) printf ( "Vetor Desordenado:\n" ); alto --; for ( i = ; i < MAX; i++ ) if ( baixo <= alto ) { printf ( "%s\n", vetor [ i ] ); strcpy ( k, v [ baixo ] ); printf ( "\n\n" ); strcpy ( v [ baixo ++ ], v [ alto ] ); system ( "pause" ); strcpy ( v [ alto -- ], k ); quick ( vetor,, MAX-1 ); system ( "cls" ); else printf ( "Vetor Ordenado:\n" ); if ( baixo == alto ) { for ( i = ; i < MAX; i++ ) baixo ++; printf ( "%s\n", vetor[i] ); alto --; printf ( "\n\n" ); system ( "pause" ); return ; if ( alto > inicio ) quick ( v, inicio, alto ); if ( baixo < fim ) quick ( v, baixo, fim ); Exemplo 2 4
21 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 41 Listas encadeadas Material disponível para download em: Alocação de Memória Antes de abordarmos listas encadeadas vamos relembrar os conceitos de alocação de memória e ponteiros. 42 Da área de memória que é reservada ao programa, uma parte é usada para armazenar as instruções a serem executadas e a outra é destina ao armazenamento de dados. Quem determina quanto de memória será usado para as instruções é o compilador. Alocar área para armazenamento de dados, entretanto, é responsabilidade do programador. Quando a quantidade de memória utilizada pelos dados é previamente conhecida e definida no próprio código-fonte do programa, trata-se de alocação estática. Quando o programa é capaz de criar novas variáveis durante sua execução, dizemos que a alocação é dinâmica.
22 Ponteiros 43 PONTEIRO é... uma variável especial que contém o endereço de memória de outra variável. variável que contém endereços de posições de memória alocadas na memória. VARIÁVEL PONTEIRO VARIÁVEL DINÂMICA endereço de memória de outra variável conteúdo do tipo que se deseja acessar ptr <sem nome> (endereço 1FFA) 1FFA 5 Ponteiros Comandos básicos < tipo de dado > *< identificador > ; Declara uma variável do tipo ponteiro. Pode haver um ponteiro (ou apontador) para qualquer tipo de variável. 44 (void*) malloc(tamanho em bytes); Aloca dinamicamente, durante a execução do programa, células de memória. Esta função devolve um ponteiro void que deve ser ser convertido para o tipo desejado. O tamanho em bytes pode ser determinado utilizando a função sizeof() que retorna o tamanh em bytes que um tipo de dados ocupa. Exemplo: int *ptr; ptr = ( int * ) malloc ( sizeof ( int ) ) ; free (ponteiro) Libera as células de memória alocadas dinamicamente. Exemplo free ( ptr ); Para manipulação de valores utilizando ponteiros temos dois operadores: O operador * devolve o valor contido no endereço apontado pela variável ponteiro; O operador & devolve o endereço de memória alocado de uma variável.
23 Exemplo 45 # include <stdio.h> # include <stdlib.h> # include <string.h> int main ( ) { int *x, *y; x = ( int * ) malloc ( sizeof ( int ) ) ; y = ( int * ) malloc ( sizeof ( int ) ) ; *x = 27 ; *y = 43 ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; *x = *y ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; *x = 27 ; y = x ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; free ( x ) ; system ( "pause" ) ; return ; # include <stdio.h> # include <stdlib.h> int main ( ) { int * x, * y ; int a, b ; a = 27 ; b = 43 ; x = &a ; y = &b ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; *x = *y ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; *x = 27 ; y = x ; printf ( "Valor: %d - %d \n\n", *x, *y ) ; system ( "pause") ; return ; Exemplo 46 # include <stdio.h> # include <stdlib.h> # include <string.h> int main ( ) { char *x, *y; x = ( char * ) malloc ( 12 * sizeof ( char ) ) ; y = ( char * ) malloc ( 12 * sizeof ( char ) ) ; strcpy ( x, "Estruturas" ) ; strcpy ( y, "de Dados" ) ; printf ( "%s %s\n\n", x, y ) ; strcpy ( y, x ) ; printf ( "%s %s\n\n", x, y ) ; strcpy ( y, "de Dados" ) ; printf ( "%s %s\n\n", x, y ); x = y ; printf ( "%s %s\n\n", x, y ) ; free( x ) ; system ( "pause" ) ; return ;
24 Exercícios: Ponteiros - 1 Codifique um programa que contenha uma variável ponteiro que aponte para um vetor de 5 elementos do tipo inteiro, insira dados neste vetor e mostre os mesmos. 47 Codifique um programa que contenha um vetor de 5 elementos do tipo ponteiro para um char, insira dados neste vetor e mostre os mesmos. Exercícios: Ponteiros - 2 O que será impresso após a execução do programa abaixo? # include <stdio.h> # include <stdlib.h> # include <string.h> int main ( ) { int *p1, *p2, p3 ; char *x1, *x2, x3 [ 7 ] ; p1 = ( int * ) malloc ( sizeof ( int ) ) ; p2 = ( int * ) malloc ( sizeof ( int ) ) ; x1 = ( char * ) malloc ( 7 * sizeof ( char ) ) ; x2 = ( char * ) malloc ( 7 * sizeof ( char ) ) ; *p1 = 7 ; strcpy ( x1,"teste" ) ; *p2 = 15 ; strcpy ( x2, "aula" ) ; p3 = 11 ; strcpy ( x3, "prova" ) ; p1 = p2 ; p2 = &p3 ; strcpy ( x2, x3 ) ; strcpy ( x1, x3 ) ; printf ( "%d \n", *p1 ) ; printf ( "%d \n", *p2 ) ; printf ( "%d \n", p3 ) ; printf ( "%s \n", x1 ) ; printf ( "%s \n", x2 ) ; printf ( "%s \n", x3 ) ; system ( "pause" ) ; return ; 48
25 Listas Encadeadas Por meio de ponteiros podemos alocar espaço para uma informação na memória e liberar este mesmo espaço quando não for mais necessário. 49 Quando precisamos guardar várias informações na memória, independente da quantidade, podemos utilizar uma estrutura conhecida como Lista Encadeada. Uma lista encadeada é uma sequência de informação armazenadas em algum lugar da memória, sendo que as mesmas estão ligadas entre si por um endereço (pointer). Um lista encadeada é criada a partir da estrutura de um registro (estrutura STRUCT). Estrutura de uma lista encadeada A estrutura mais básica deste registro conterá dois tipos de campos: O primeiro tipo serão os campos utilizados para armazenar as informações propriamente ditas e O segundo tipo será um campo do tipo ponteiro que irá armazenar o endereço da próxima informação existente na memória. Início 5 nome idade sexo proximo nome idade sexo proximo nome idade sexo proximo Para declarar a estrutura de uma lista encadeada devemos criar um tipo struct como por exemplo: struct reg { char nome[51]; int idade; char sexo; struct reg *proximo; tplista;
26 Exemplo de Lista Encadeada Declarações iniciais #include <stdio.h> #include <stdlib.h> 51 typedef char tpelem ; typedef struct registro { tpelem dado ; struct registro *prox ; tplista ; void insere ( tplista *noatual, tpelem x ) ; void mostra ( tplista *noatual ) ; tplista* procura(tplista *noatual, tpelem x) ; int retira ( tplista *noatual, tpelem x ) ; void esvazia( tplista *noatual ) ; tplista *lista = NULL ; Exemplo de Lista Encadeada função main( ) 52 int main( ) { fflush( stdin ) ; tpelem valor ; printf( "Dado a ser retirado: " ) ; scanf( "%c", &valor ) ; insere( lista, 'b' ) ; insere( lista, 'd' ) ; if ( retira ( lista, valor ) == ) insere( lista, 'c' ) ; printf( " Nao encontrado...\n\n\n" ) ; insere( lista, 'a' ) ; else printf( " Valor retirado...\n\n\n" ) ; mostra( lista ) ; mostra( lista ) ; printf( "\n\ndado a ser procurado: " ) ; scanf( "%c", &valor ) ; esvazia( lista ) ; if ( procura ( lista, valor ) == NULL ) printf( " Nao achou...\n\n" ) ; else printf( " Achou...\n\n" ) ; printf( "\n\n\n" ) ; system( "pause" ) ; return ;
27 Exemplo de Lista Encadeada função insere( ) void insere ( tplista *noatual, tpelem x ){ tplista *novono ; if ( noatual == NULL ) { lista=( tplista * ) malloc( sizeof( tplista )); lista->dado = x ; lista->prox = NULL ; else { while( noatual->prox!= NULL ) noatual = noatual->prox ; novono=(tplista *) malloc(sizeof(tplista)); novono->dado = x ; novono->prox = NULL ; noatual->prox = novono ; 53 Exemplo de Lista Encadeada função mostra( ) void mostra ( tplista *noatual ) { printf( "Valores atuais na lista => " ) ; while( noatual!= NULL ) { printf( "%c ",noatual->dado ) ; noatual = noatual->prox ; 54
28 Exemplo de Lista Encadeada função procura( ) tplista* procura(tplista *noatual, tpelem x) { while ( noatual!= NULL ) { if ( x == noatual->dado ) return noatual ; else noatual = noatual->prox ; return NULL ; 55 Exemplo de Lista Encadeada função retira( ) 56 int retira ( tplista *noatual, tpelem x ) { while ( noatual->prox!= NULL ){ tplista *libera ; if ( x == noatual->prox->dado ) { if ( noatual == NULL ) libera = noatual->prox ; return ; noatual->prox = libera->prox ; else free( libera ) ; if ( x == noatual->dado ) { return 1 ; libera = noatual ; lista = noatual->prox ; else free( libera ) ; noatual = noatual->prox ; return 1 ; else { return ;
29 Exemplo de Lista Encadeada função esvazia( ) void esvazia( tplista *noatual ) { while ( noatual!= NULL ) { lista = noatual->prox ; free( noatual ) ; noatual = lista ; 57 Lista duplamente encadeada A lista duplamente encadeada, é baseada em um registro (struct) contendo dois campos do tipo ponteiro e os campos que armazenarão os dados. 58 Cada nó da lista deve estar ligado a seu antecessor e a seu sucessor, ou seja, cada nó tem um ponteiro para o nó anterior e um ponteiro para o próximo nó. Assim é possível percorrer a lista do início ao fim e vice-versa. inicio anterior nome idade sexo proximo anterior nome idade sexo proximo anterior nome idade sexo proximo
30 Lista Duplamente Encadeada Declarações iniciais typedef char tpelem ; typedef struct registro { tpelem dado ; struct registro *ant ; struct registro *prox ; tplista ; 59 void insere ( tplista *noatual, tpelem x ) ; void mostra ( tplista *noatual ) ; tplista* procura(tplista *noatual, tpelem x) ; int retira ( tplista *noatual, tpelem x ) ; void esvazia( tplista *noatual ) ; tplista *lista = NULL ; Lista Duplamente Encadeada função main() int main( ) { tpelem valor, resposta ; insere( lista, 'a' ) ; insere( lista, 'b' ) ; insere( lista, 'c' ) ; insere( lista, 'd' ) ; insere( lista, 'e' ) ; insere( lista, 'f' ) ; insere( lista, 'g' ) ; insere( lista, 'h' ) ; mostra( lista ) ; printf( "\n\ndado a ser procurado: " ) ; fflush(stdin); scanf( "%c", &valor ) ; if ( procura ( lista, valor ) == NULL ) printf( "* * * Nao achou * * *\n\n" ) ; else printf( "* * * Achou * * *\n\n" ) ; fflush( stdin ) ; printf( "Dado a ser retirado: " ) ; scanf( "%c", &valor ) ; if ( retira ( lista, valor ) == ) printf( "* * * Nao encontrado * * *\n\n\n" ) ; else printf( "* * * Valor retirado * * *\n\n\n" ) ; mostra( lista ) ; esvazia( lista ) ; system( "pause" ) ; return ; 6
31 Lista Duplamente Encadeada função insere() void insere ( tplista *noatual, tpelem x ){ tplista *novono ; novono=(tplista *) malloc(sizeof(tplista)); novono->dado = x ; if ( noatual == NULL ) { lista = novono; lista->ant = NULL ; lista->prox = NULL; else { while( noatual->prox!= NULL ) noatual = noatual->prox ; novono->ant = noatual; novono->prox = NULL ; noatual->prox = novono ; 61 Lista Duplamente Encadeada função procura() tplista* procura(tplista *noatual, tpelem x){ while ( noatual!= NULL ) { if ( x == noatual->dado ) return noatual ; else noatual = noatual->prox ; return NULL ; 62
32 Lista Duplamente Encadeada função mostra() void mostra ( tplista *noatual ){ tplista *noant; printf( "Sequencia normal ====> " ) ; while( noatual!= NULL ){ printf( " %c ",noatual->dado ) ; noant = noatual->ant; noatual = noatual->prox ; printf( "\nsequencia invertida => " ) ; while (noant!= NULL) { printf( " %c ",noant->prox->dado ) ; noant = noant->ant; printf( " %c ",lista->dado ) ; 63 Lista Duplamente Encadeada função retira() int retira ( tplista *noatual, tpelem x ){ tplista *libera ; if ( noatual == NULL ) return ; else if ( x == noatual->dado ){ libera = noatual ; lista = noatual->prox ; lista -> ant = NULL; free( libera ) ; return 1 ; else{ while ( noatual->prox!= NULL ){ if ( x == noatual->prox->dado ) { libera = noatual->prox ; noatual->prox = libera->prox ; if (libera->prox!= NULL) libera->prox->ant = libera->ant; free( libera ) ; return 1 ; else noatual = noatual->prox ; return ; 64
33 Lista Duplamente Encadeada função esvazia() void esvazia( tplista *noatual ){ while ( noatual!= NULL ){ lista = noatual->prox ; free( noatual ) ; noatual = lista ; 65 UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação 66 Árvores Material disponível para download em:
34 Introdução Listas encadeadas, Filas e Pilhas, têm como base as listas lineares, podendo ser estáticas ou dinâmicas. Mesmo tendo uma série de aplicações na manipulação de dados alguns problemas são observados: A lista sequencial é eficiente para pesquisa de dados, mas não apresenta bom desempenho para inserir e remover dados; 67 A lista encadeada é eficiente para inserir e remover dinamicamente de dados, mas não apresenta bom desempenho para pesquisar dados. A estrutura de dados Árvore é uma lista não linear com desempenho mais eficiente para as operações de inserção, busca e remoção de dados, pois representam um conceito de hierarquias. Exemplo de uma árvore de estados brasileiros 68 Paraíba Pará Bahia Alagoas Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre Sergipe
35 Raiz e Subárvores 69 Uma árvore é composta por um conjunto de nós. Uma árvore contém um nó inicial identificado por raiz, podendo ter ou não outros nós, chamados de subárvores. Usualmente uma árvore é representada graficamente com a raiz para cima. Raiz Paraíba Pará Bahia Alagoas Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Subárvores Acre Sergipe Subárvores 7 Uma árvore é um conjunto finito de um ou mais nós de tal modo que os conjuntos de nós desdobrados a partir da raiz são chamados de subárvores. Seguindo o conceito acima, uma subárvore também é uma árvore e assim sucessivamente. Subárvore Paraíba Subárvore Pará Bahia Alagoas Raiz Amapá Goiás Paraná Maranhão Ceará Subárvore Amazonas Piauí Roraima Rondônia Acre Sergipe
36 Nós Pai, Filhos, Irmãos e Folhas 71 A raiz de uma árvore é chamada de pai dos nós de suas subárvores. As raízes das subárvores de um nó pai são chamados de filhos deste nó. Os filhos de um mesmo nó pai são denominados irmãos. Duas regras a respeito de pais: A raiz não tem pai. Todos os outros nós têm somente um pai. PAI Paraíba Um nó que não tem filho é chamado de folha. IRMÃOS Pará Bahia Alagoas FILHOS Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre Sergipe Nós Pai, Filhos, Irmãos e Folhas 72 Nó Pai Paraíba Nós Filhos Pará, Bahia, Alagoas Paraíba Pará Amapá, Goiás Bahia - Pará Bahia Alagoas Alagoas Paraná, Maranhão, Ceará Amapá Amazonas, Piauí, Roraima, Rondônia Amapá Goiás Paraná Maranhão Ceará Goiás - Paraná - Amazonas Piauí Roraima Rondônia Acre Sergipe Maranhão Acre, Sergipe Ceará - Amazonas - Piauí - Roraima - Rondônia - Acre - Irmãos Pará, Bahia, Alagoas Amapá, Goiás Paraná, Maranhão, Ceará Amazonas, Piauí, Roraima, Rondônia Acre, Sergipe Sergipe - Folhas Bahia Goiás, Paraná, Ceará Amazonas, Piauí, Roraima, Rondônia, Acre, Sergipe
37 Grau de um nó e Grau de uma árvore Grau de um nó corresponde ao número de subárvores do próprio nó, ou seja a quantidade de filhos que este nó tem. Um nó folha tem grau, visto que mão tem filhos. 73 O grau da árvore é definido pelo nó, de maior grau, que ela possui. GRAU DA ÁRVORE: 4 Paraíba Pará Pará grau 2 Bahia Alagoas Amapá Amapá grau 4 Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre grau Acre Sergipe Nível de um nó 74 Nível ou profundidade de um nó é definido a partir da raiz da árvore que é identificado por zero. Os níveis seguintes são definidos com base na soma de uma unidade ao nível do seu nó pai. Nível Paraíba Nível 1 Pará Bahia Alagoas Nível 2 Amapá Goiás Paraná Maranhão Ceará Nível 3 Amazonas Piauí Roraima Rondônia Acre Sergipe
38 Altura de um nó e Altura uma árvore A altura de um determinado nó em uma árvore é a distância entre o nó e o seu descendente mais afastado, ou seja, o caminho desde o nó até o descendente mais distante. Um nó folha, consequentemente tem altura A altura ou profundidade de uma árvore é definida com base no nível máximo entre todos os nós da árvore, ou seja, é a altura da raiz 75 ALTURA DA ÁRVORE: 3 Paraíba Pará Bahia Alagoas Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre Sergipe Nó Altura Paraíba 3 Pará, Alagoas 2 Amapá, Maranhão 1 Bahia, Goiás, Paraná, Ceará, Amazonas, Piauí, Roraima, Rondônia, Acre, Sergipe Floresta Quando eliminamos um nó raiz de uma árvores, as suas subárvores formam duas árvores disjuntas, ou sejam árvores separadas. 76 A este conjunto de árvores disjuntas damos o nome de floresta. Por exemplo, se eliminarmos o nó raiz da árvore de bandeiras dos estados brasileiros, teremos uma Floresta formada por três árvores disjuntas. Pará Bahia Alagoas Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre Sergipe
39 Formas de representação: Hierárquica 77 Paraíba Pará Bahia Alagoas Amapá Goiás Paraná Maranhão Ceará Amazonas Piauí Roraima Rondônia Acre Sergipe Formas de representação: Diagrama de Inclusão 78 Também conhecido como Diagrama de Venn ou Conjuntos aninhados Paraíba Pará Bahia Alagoas Goiás Paraná Ceará Amapá Maranhão Amazonas Piauí Acre Roraima Rondônia Sergipe
40 Formas de representação: Parenteses aninhados 79 ( Paraíba ( Pará ( Amapá ) ( Goiás ( Piauí ) ) ) ( Bahia ) ( Alagoas ( Ceará ( Acre ) ( Sergipe ) ) ) ) Paraíba Pará Bahia Alagoas Amapá Goiás Ceará Piauí Acre Sergipe Árvores: Exercícios Observe a árvore abaixo, representada na forma hierárquica, e responda: a) qual a altura da árvore? b) quantos nós folhas a árvore possui? c) em qual nível está o nó que contem a letra Q? d) qual o grau do nó que contém a letra E? e) os nós que contém as letras H, L, R, Q, S e G são todos irmãos? Justifique sua resposta. A 8 B U D E Y M H L R Q S G J P I F T C
41 Árvores: Exercícios Observe a árvore abaixo, representada na forma de parênteses aninhados, monte a árvore na forma de representação hierárquica e responda: a) quais os nós folha? b) o grau da árvore? c) quais os filhos do nó que contém a letra C? 81 ( A (B) ( C (D (G) (H)) (E) (F (I)) ) ) Árvores: Exercícios Observe a árvore abaixo, representada na forma hierárquica, e monte o diagrama de inclusão 82 F B G I J A D I H C E G I
42 Árvore Binária 83 O que caracteriza uma árvore como ÁRVORE BINÁRIA são as suas conexões com os outros nós. Para cada nó, uma árvore binária é permitido no máximo duas subárvores. Alguns nós possuem apenas uma subárvores. Em uma árvore binária é necessário sempre distinguir a subárvore esquerda e direita. As definições quanto a raiz, pai, filho, irmãos, folhas, grau, nível e altura, são as mesmas já vistas. Paraíba Pará Alagoas Amapá Goiás Ceará Piauí Acre Sergipe Árvore Binária Cheia 84 Consideramos uma árvore binária cheia se todos os nós tiverem duas subárvores, exceto os nós folhas, que estarão na mesma altura. Paraíba Pará Alagoas Amapá Goiás Paraná Ceará Amazonas Roraima Rondônia Piauí Acre Sergipe Maranhão Bahia
43 Árvores de Busca Binária Árvore binária, é denominada ÁRVORE DE BUSCA BINÁRIA se: Todos os elementos armazenados na subárvore esquerda são menores que do que o elemento armazenado na raiz; Todos os elementos armazenados na subárvore direita são iguais ou maiores que do que o elemento armazenado na raiz. As subárvores esquerda e direita também são árvores de busca binária. 85 Maranhão Amazonas Paraná Alagoas Ceará Pará Roraima Acre Amapá Bahia Goiás Paraíba Rondônia Sergipe Piauí Árvore de Busca Binária - Exercício Assinale quais são as árvores de busca binária a) F b) I 86 B G B O A C H I A D M R S J E C c) F d) 5 B J 2 6 A D H C E G I
44 Árvore de Busca Binária - Exercício 87 Analise os dados representados pelo diagrama de inclusão, construa a representação na forma hierárquica e para casa árvore responda: a) Qual a altura da árvore?; b) Quantos nós tem cada nível?; c) Qual a raiz da árvore? ; d) É uma árvore binária?; e) Se for uma árvore binária: É uma árvore cheia?; É uma árvore de busca binária? Obs. Considere a disposição de cada nó na representação gráfica como sendo filho esquerdo ou direito. A D a) B C F E B D b) A C G E F c) Profa. Vânia Cristina de Souza Pereira Material de Apoio ao Aluno - Notas de Aula Pesquisa e Ordenação Atravessamento em Árvores de Busca Binária Uma vez criada uma árvore, como fazer para percorrer todos os seus nós? Que critérios usar? Ir inicialmente para a esquerda ou direita? De cima para baixo? 88 Maranhão Amazonas Paraná Alagoas Ceará Pará Roraima Acre Amapá Goiás Piauí Rondônia
45 Atravessamento em Árvores Binárias Significa percorrer de forma sistemática, por cada um de seus nodos, realizando um certo processamento. 89 Tipos básicos de atravessamento: em-ordem pré-ordem pós-ordem Os tipos de atravessamento são facilmente compreendidos se fizermos uma analogia entre eles e as notações segundo uma expressão aritmética pode ser escrita: infixa, prefixa e pósfixa. Operações Básicas - Atravessamento Considerando a expressão infixa A + B, podemos usar a seguinte representação na forma de árvore binária: + 9 A B O atravessamento em-ordem da árvore será o acesso aos dados da seguinte maneira: Vai para o nó esquerdo, mostra o valor do nó, vai para o nó direito (ERD). Exemplo: A + B O atravessamento pré-ordem da árvore será o acesso aos dados da seguinte maneira: Mostra o valor do nó, vai para o nó esquerdo, vai para o nó direito (RED). Exemplo: + A B O atravessamento pós-ordem da árvore será o acesso aos dados da seguinte maneira: Vai para o nó esquerdo, vai para o nó direito, mostra o valor do nó (EDR). Exemplo: A B +
46 Atravessamento Préordem Maranhão 8 Amazonas Paraná Alagoas Ceará Pará Roraima Acre Amapá Goiás Piauí 12 Rondônia Maranhão, Amazonas, Alagoas, Acre, Amapá, Ceará, Goiás, Paraná, Pará, Roraima, Piauí, Rondônia Atravessamento Emordem Maranhão 9 Amazonas Paraná Alagoas Ceará Pará Roraima Acre Amapá Goiás Piauí 11 Rondônia Acre, Alagoas, Amapá, Amazonas, Ceará, Goiás, Maranhão, Pará, Paraná, Piauí, Rondônia, Roraima
47 Atravessamento Pósordem Maranhão 11 Amazonas Paraná Alagoas Ceará Pará Roraima Acre Amapá Goiás Piauí 8 Rondônia Acre, Amapá, Alagoas, Goiás. Ceará, Amazonas, Pará, Rondônia, Piauí, Roraima, Paraná, Maranhão Atravessamentos - Exercícios 94 Monte as ABB e faça os atravessamentos préordem, emordem e pósordem. a) 12, 4, 8, 26, 2, 5, 2, 22, 1, 13 b) F, H, I, B, C, A, G, B, E c) Ivani, Paulo, Marli, Carla, Ester, Alice, Sofia, Denis d) Percorrendo-se uma ABB foram produzidas as seguintes sequências emordem ( A B C D E F G H I J L ) e pósordem ( A B D E C G H L J I F ). A partir destas informações monte a ABB. e) Ache as expressões geradas a partir da árvore abaixo desenhada após atravessarmos através dos tipos préordem, emordem e pósordem. + * * c + d * a b f + g h
48 Operações Básicas 95 Estrutura básica de Árvore de Busca Binária typedef char tpelem; typedef struct registro { struct registro* esq; tpelem dado; struct registro*dir; tparvore; tparvore *raiz = NULL; Operações Básicas - Inserção É uma operação bastante simples. Basta verificar se a árvore não está vazia. 96 Se estiver, a inserção será na própria raiz Se a árvore não estiver vazia, deve-se verificar se o novo elemento é menor do que a raiz Sendo verdadeiro, a inserção será na sub-árvore esquerda Sendo falso, a inserção será na sub-árvore direita.
49 Operações Básicas - Inserção Inserção de dados em uma Árvore de Busca Binária 97 void insere ( tparvore **t, tpelem x ) { if ( *t == NULL ) { *t = ( tparvore * ) malloc ( sizeof ( tparvore ) ); ( *t ) -> esq = NULL; ( *t ) -> dir = NULL; ( *t ) -> dado = x; else if ( x < ( *t ) -> dado ) insere( & ( ( *t ) -> esq ), x ); else insere( & ( ( *t ) -> dir ), x ); Operações Básicas - Busca Considerando uma árvore de busca binária T e um elemento x a ser procurado entre seus nós, existem 4 possibilidades: 98 Se T é uma árvore vazia, não há o que procurar; Se a raiz de T armazena o elemento x, a solução é imediata; Se x é menor que o valor da raiz T, a busca prossegue na subárvore esquerda de T; Se x é maior que o valor da raiz T, a busca prossegue na subárvore direita de T.
50 Operações Básicas - Busca Inserção de dados em uma Árvore de Busca Binária 99 tparvore* busca ( tparvore *t, tpelem x ) { if ( t == NULL ) return NULL; else if ( t -> dado == x ) return t; else if ( x < t -> dado ) return busca ( t -> esq, x ); else return busca ( t -> dir, x ); Operações Básicas - Atravessamento Atravessamentos em uma Árvore de Busca Binária 1 void emordem ( tparvore *t ) { if (t!= NULL) { emordem ( t -> esq ); printf (" %c ", t -> dado ); emordem ( t -> dir ); void preordem ( tparvore *t ) { if ( t!= NULL ) { printf (" %c ", t -> dado ); preordem ( t -> esq ); preordem ( t -> dir ); void posordem ( tparvore *t ) { if ( t!= NULL ) { posordem ( t -> esq ); posordem ( t -> dir ); printf (" %c ", t -> dado );
51 Operações Básicas - Remoção Podemos considerar que a remoção de um nó de uma árvore é a rotina mais trabalhosa para ser desenvolvida e compreendida. Ainda assim, após analisarmos todos os possíveis casos, a remoção parecerá bastante simples. Por uma questão de simplificação, vamos admitir que inicialmente o elemento a ser removido encontra-se na raiz da árvore de busca binária T, então, as seguintes hipóteses devem ser avaliadas: 11 A raiz não possui filhos: A solução é imediata. Podemos removê-la e anular T; Se a raiz possui um único filho: Podemos remover o nó raiz e o nó filho toma seu lugar; Se a raiz possuir dois filhos, não é possível quem ambos assumam o lugar do pai. Neste ponto surgem algumas perguntas: Qual das duas subárvores deve assumir o lugar do nó pai removido? O que deve ser feito com a subárvore que não foi a escolhida? Seu nó ficaria órfão? Operações básicas - Remoção A resposta para as questões anteriores é: 12 Devemos buscar o nó que armazena o menor elemento na subárvore direita de T, este nó deve ser removido e o elemento armazenado por ele entrará na raiz da árvore T. Para entender a solução adotada precisamos lembrar da definição de árvore de busca binária. Não podemos ter elementos maiores nem iguais à raiz numa subárvore esquerda; Não podemos ter elementos menores que a raiz numa subárvore direita. Então, se tomarmos o menor elemento da subárvore direita e o posicionarmos na raiz, então continua valendo a definição. Sabemos que o maior elemento numa árvore binária ordenada encontra-se no nó que ocupa a posição mais à direita possível. Este nó certamente não terá um filho direito, pois se o tivesse não seria o maior da árvore; Pode, entretanto, ter um filho esquerdo (menor).
UNIVERSIDADE NOVE DE JULHO - UNINOVE. Pesquisa e Ordenação. Introdução. Material disponível para download em:
UNIVERSIAE NOVE E JULHO - UNINOVE 1 Pesquisa e Ordenação Introdução Material disponível para download em: www.profvaniacristina.com Pesquisa e Ordenação 2 EMENTA: Recursividade, Quick sort; ivisão e Conquista,
Leia maisCAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:
CAP. IX - MANIPULAÇÃO DE ARQUIVOS 9.1 Generalidades sobre arquivos 9.2 Abertura e fechamento de arquivos 9.3 Arquivos textos e arquivos binários 9.4 Leitura e escrita em arquivos binários 9.5 Procura direta
Leia maisINF 1620 P2-23/10/04 Questão 1 Nome:
INF 1620 P2-23/10/04 Questão 1 Considere um tipo abstrato de dados para representar uma disciplina da PUC-Rio, com as seguintes informações: Nome da disciplina: com até 50 caracteres Código da disciplina:
Leia maisAlgoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.
Algoritmos e Estrutura de Dados II Árvore Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estruturas de dados lineares (pilha, fila) são estruturas que guardam coleções de elementos que são acessados
Leia maisDepartamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010
Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010 Aluno: Instruções: 1) Escreva seu nome completo, matrícula e turma em todas as folhas desta prova; 2) A prova deve ser completamente
Leia maisArquivos em C. Material da Prof. Ana Eliza
em C Material da Prof. Ana Eliza Definição Um arquivo é uma estrutura de dados linear ( lista ) que é mantida fora da memória principal, em um dispositivo de armazenamento (memória secundária). Um arquivo
Leia maisINF 1620 P4 11/12/06 Questão 1 Nome:
INF 1620 P4 11/12/06 Questão 1 Considere que o cálculo da multa para o pagamento de um determinado imposto varia de acordo com a tabela a seguir: Valor do Imposto Original Multa por mês de atraso até R$
Leia maisÁrvores & Árvores Binárias
Árvores & Árvores Binárias Problema Implementações do TAD Lista Linear Lista encadeada eficiente para inserção e remoção dinâmica de elementos, mas ineficiente para busca Lista seqüencial (ordenada) Eficiente
Leia maisINF 1620 P4 30/06/07 Questão 1 Nome:
INF 1620 P4 30/06/07 Questão 1 O maior divisor comum (MDC) de dois números inteiros é o maior número inteiro que faz uma divisão exata (com resto zero) desses dois números. Por exemplo, o MDC de 32 e 40
Leia maisINF 1620 P2-01/11/03 Questão 1 Nome:
INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,
Leia maisComputação 2. Aula 8. Profª. Fabiany Arquivos
Computação 2 Aula 8 Arquivos Profª. Fabiany fabianyl@utfpr.edu.br E/S com Arquivos A linguagem C não possui nenhum comando de E/S. Todas as operações de E/S ocorrem mediante chamadas a funções de biblioteca
Leia maisINF 1620 P3-25/11/05 Questão 1 Nome:
INF 1620 P3-25/11/05 Questão 1 Dizemos que uma matriz quadrada é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos de sua diagonal principal
Leia maisINF 1620 P4-09/07/03 Questão 1 Nome:
INF 1620 P4-09/07/03 Questão 1 Um ponto geométrico no espaço 2D é representado pelas coordenadas reais x e y. Considere uma aplicação que precisa manipular pontos, através da implementação de duas funções.
Leia maisFontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:
Fontes Bibliográficas Estruturas de Dados Aula 15: Árvores Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos (Nivio Ziviani): Capítulo 5; Estruturas
Leia maisComputação 2. Aula 9. Diego Addan Arquivos
Computação 2 Aula 9 Arquivos Diego Addan diegoaddan@gmail.com E/S com Arquivos A linguagem C não possui nenhum comando de E/S. Todas as operações de E/S ocorrem mediante chamadas a funções de biblioteca
Leia maisINF 1620 P3-29/06/04 Questão 1 Nome:
INF 1620 P3-29/06/04 Questão 1 Considere um arquivo texto que descreve um conjunto de retângulos e círculos. Cada linha do arquivo contém a descrição de uma figura. O primeiro caractere da linha indica
Leia maisREVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
Leia maisEstruturas de Dados Aula 11: TAD Pilha
Estruturas de Dados Aula 11: TAD Pilha Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 3; Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 10; Estruturas
Leia maisSCC Algoritmos e Estruturas de Dados I
SCC 202 - Algoritmos e Estruturas de Dados I TAD Pilha Lembrem...TADs são tipos definidos em termos de seu comportamento e não de sua representação (que pode variar na busca de eficiência) 12/8/2010 Pilha
Leia mais13a. Aula Manipulação de arquivos
13a. Aula Manipulação de arquivos 2013.2 O sistema de entrada e saída do ANSI C é composto por uma série de funções (fopen, fprintf, fgets, fclose) cujos protótipos estão reunidos em stdio.h Todas estas
Leia maisÁrvores & Árvores Binárias
SCE 182 SCC122 Algoritmos Estruturas e Estruturas de Dados de Dados I Árvores & Árvores Binárias Prof. Material Original: Walter Aoiama Nagai; Maria das Graças Volpe Nunes; Definições Árvore T é um conjunto
Leia maisAula 14 Oficina de Programação Tópicos Especiais em C: Arquivos. Profa. Elaine Faria UFU
Aula 14 Oficina de Programação Tópicos Especiais em C: Arquivos Profa. Elaine Faria UFU - 2017 Uso da Memória Secundária Em muitos casos necessitamos da memória secundária (auxiliar), para armazenar informações
Leia maisAluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0
P4 Programação II 2012.2 Departamento de Informática/PUC- Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente
Leia maisPilhas e Filas. Nádia Félix e Hebert Coelho
Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados Série de Livros Didáticos - Informática - UFRGS Pilhas e filas Listas lineares
Leia maisINF 1620 P3-21/06/08 Questão 1 Nome:
INF 1620 P3-21/06/08 Questão 1 Dada uma lista encadeada de números inteiros cujo tipo que representa um nó da lista é dado por: struct lista { int info; struct lista *prox; typedef struct lista Lista;
Leia maisAlgoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Leia maisPilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira
Pilha SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Pilha O que é? Para que serve? 2 Problema: chamada de sub-rotinas Rotina A 1 print A 2 call C 3 call B 4 call D 5 return Rotina B 1 call
Leia maisDepartamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010
Departamento de Informática - PUC-Rio INF 1007 Programação 2 P4 07/12/2010 Aluno: Matrícula: Turma: Instruções: 1) Escreva seu nome completo, matrícula e turma; 2) A prova deve ser completamente resolvida
Leia maisALGORITMOS E ESTRUTURAS DE DADOS CES-11
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos
Leia maisESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres
ESTRUTURA DE DADOS Árvores, árvores binárias e percursos Cristina Boeres 2 Árvores! utilizada em muitas aplicações! modela uma hierarquia entre elementos árvore genealógica diagrama hierárquico de uma
Leia maisP3 Programação II Departamento de Informática/PUC-Rio 27 de junho de 2013
P3 Programação II 2013.1 Departamento de Informática/PUC-Rio 27 de junho de 2013 Aluno: Matrícula: Turma: Declaro ter lido as instruções abaixo e estar ciente das normas da aplicação da Prova. Assinatura:
Leia maisDAS5102 Fundamentos da Estrutura da Informação
Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa
Leia maisÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ÁRVORES BINÁRIAS DE BUSCA Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REFERÊNCIA Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Cap. 4 INSTITUTO DE COMPUTAÇÃO
Leia maisDepartamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos
Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I Aula 13 Arquivos Responsável Seiji Isotani, Rafaela V. Rocha sisotani@icmc.usp.br rafaela.vilela@gmail.com
Leia maisDepartamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010
Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010 Aluno: Matrícula: Turma: Instruções: 1) Escreva seu nome completo, matrícula e turma em todas as folhas desta prova; 2) A prova
Leia maisSSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido
SSC 301 - INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS Profa. Dra. Milena Guessi Margarido (milena@icmc.usp.br) Número Bairro CEP Cidade Logradouro Endereço País REGISTRO Estrutura
Leia maisEstruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C
Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos
Leia maisUNIVERSIDADE DA BEIRA INTERIOR
UNIVERSIDADE DA BEIRA INTERIOR Programação II 2º Semestre Exame Época Norma (15 val) Resolução 22/06/2018 1 [1,00 val + 1,00 val] - Memória Dinâmica Considere as seguintes declarações de variáveis: int
Leia maisVariáveis, Tipos de Dados e Operadores
! Variáveis, Tipos de Dados e Operadores Engenharias Informática Aplicada 2.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) VARIÁVEL VARIÁVEL É um local lógico, ligado a um endereço físico da memória
Leia maisEstruturas de Dados II
Estruturas de Dados II Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2086 Aula 2: Árvores http://www.do.ufgd.edu.br/rodrigosacchi Árvores Definição: Árvores Uma árvore T é um conjunto
Leia maisINF 1620 P4-01/07/08 Questão 1 Nome:
INF 1620 P4-01/07/08 Questão 1 Escreva uma função em C que receba duas strings, cujos caracteres estão ordenados em ordem crescente, e retorne uma nova string alocada dinamicamente, que contém todos os
Leia maisEstrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Árvores (parte 2) Estruturas de Dados 2 Organização dos dados: Linear: Listas, pilhas, filas. Relação sequencial.
Leia mais1. Listas sequenciais versus listas ligadas. Lista sequencial
Alocação Dinâmica Listas Ligadas 1. Listas sequenciais versus listas ligadas Lista sequencial Uma lista sequencial é um conjunto de elementos contíguos na memória. Um vetor é o melhor exemplo de lista
Leia maisProgramação II. Arquivos - Conceito. Arquivos
Programação II Arquivos Jocélio Passos joceliodpassos@bol.com.br C Comp Total, Cap 9 Espaço para armazenar dados em memória auxiliar (não volátil) Arquivos em C podem ser também terminais ou impressoras
Leia mais13. ALOCAÇÃO DINÂMICA DE MEMÓRIA
787878787878787878787878787878787878787878787878787878 13. ALOCAÇÃO DINÂMICA DE MEMÓRIA Sempre é necessário declarar o número de elementos do array. Mas e se ele for desconhecido? E se ele variar? Pode
Leia maisINF 1620 P4-06/12/02 Questão 1 Nome:
INF 1620 P4-06/12/02 Questão 1 (a) Escreva uma função em C que receba como parâmetro um número inteiro não negativo e retorne, como resultado da função, o valor do seu fatorial. O cabeçalho desta função
Leia maisMódulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisÁrvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira
Árvores SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Listas e árvores Listas lineares Um nó após o outro, adjacentes Nó sucessor e antecessor Diversas aplicações necessitam de estruturas
Leia maisLINGUAGEM C: ARQUIVOS
LINGUAGEM C: ARQUIVOS Prof. André Backes Arquivos 2 Por que usar arquivos? Permitem armazenar grande quantidade de informação; Persistência dos dados (disco); Acesso aos dados poder ser não seqüencial;
Leia maisComputação Eletrônica. Aula 12 Arquivos Texto e Binário. Prof: Luciano Barbosa. CIn.ufpe.br
Computação Eletrônica Aula 12 Arquivos Texto e Binário Prof: Luciano Barbosa Relembrando a Arquitetura Básica de um Computador Até agora, toda a informação armazenada por nossos programas estava na memória
Leia maisFundamentos de Programação 1
Fundamentos de Programação 1 Linguagem C Arquivos Seqüências ou de Texto. Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO 1 Arquivo de Escrita 1 fopen ( nome.txt", "w" ); fputc ( caracter, arquivo); 2 #include
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Arquivos Funções para abrir e fechar arquivos Arquivos em modo texto Arquivos em modo binário ATENÇÃO
Leia maisUniversidade Estadual Paulista Júlio de Mesquita Filho UNESP
Introdução à Computação II AULA 16 BCC Noturno - EMA896115B Prof. Rafael Oliveira olivrap@gmail.com Universidade Estadual Paulista Júlio de Mesquita Filho UNESP Rio Claro 2014 (Sem 2) Estruturas de Dados
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
Leia maisCapítulo 6: Arquivos
Capítulo 6: Arquivos Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Funções de entrada e saída em arquivos Nos capítulos anteriores, desenvolvemos programas que capturam seus dados de
Leia maisEstruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 11 Pilhas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisProgramação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Leia maisINF 1620 P2-14/10/05 Questão 1 Nome:
INF 1620 P2-14/10/05 Questão 1 Considere um cadastro de produtos de um estoque, com as seguintes informações para cada produto: Código de identificação do produto: representado por um valor inteiro Nome
Leia maisINF 1620 P3-27/11/04 Questão 1 Nome:
INF 1620 P3-27/11/04 Questão 1 Considere um arquivo texto com as notas dos alunos de uma disciplina. Os dados de cada aluno são armazenados em duas linhas do arquivo: uma com o seu nome (cadeia com até
Leia maisRevisão: Tipo Abstrato de Dados Recursividade
Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estudo das estruturas de dados envolve dois objetivos complementares:
Leia maisPermite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.
222222222222222222222222222 8 - FUNÇÕES 81 - Características básicas É um trecho independente de código, com objetivos bem definidos Programas em C, geralmente consistem em várias pequenas funções, ao
Leia maisProgramação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Vetores vs Estruturas Dinâmicas Vetores (arrays): Ocupa um espaço contíguo de memória Permite acesso randômico
Leia maisÁRVORES E ÁRVORE BINÁRIA DE BUSCA
ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática
Leia maisAlocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)
Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática
Leia maisProf. Jesus José de Oliveira Neto
Prof. Jesus José de Oliveira Neto São estruturas de dados adequadas para a representação de hierarquias. Uma árvore é composta por um conjunto de nós. Existe um nó r, denominado raiz, que contém zero ou
Leia maisEstruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisÁRVORES. Prof. Yan ndre Maldonado - 1. Prof. Yandre Maldonado e Gomes da Costa
ÁRVORES Prof. Yan ndre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Árvores Prof. Yan ndre Maldonado - 2 Árvores são estruturas de dados que caracterizam uma relação entre os dados que a compõem;
Leia maisDisciplina de Introdução à Ciência da Computação ICC 1 - Teoria
USP - ICMC - SSC SSC 0501-1o. Semestre 2015 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria Prof. Fernando Santos Osório Email: fosorio [at] icmc. usp. br, gmail. com Página Pessoal: http://www.icmc.usp.br/~fosorio/
Leia maisProgramação para Computação 13ª Aula
Programação para Computação 13ª Aula Arquivos em C O sistema de E/S da linguagem C utiliza o conceito de streams e arquivos, como um nível de abstração entre o programador e o dispositivo utilizado. Uma
Leia maisINF 1010 Estruturas de Dados Avançadas. Árvores binárias
INF 1010 Estruturas de Dados Avançadas Árvores binárias 1 Árvore estrutura hierárquica: A B E F C D G A B C E F D G A B C D E F G (A (B (E, F)), C, (D (G))) 05/09/16 2 Árvore - definições árvore: nó raiz
Leia maisAula: ARQUIVOS. Introdução à Ciência da Computação I Simone Senger Souza. ICMC/USP São Carlos
Aula: ARQUIVOS Introdução à Ciência da Computação I Simone Senger Souza ICMC/USP São Carlos Introdução As estruturas vistas anteriormente armazenam as informações na memória principal do computador. Nem
Leia maisAlocação Dinâmica em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara
Leia maisAlocação Dinâmica de Memória - Exercício
Alocação Dinâmica de Memória - Exercício Construa um programa que leia da entrada padrão o número de linhas e de colunas de uma matriz de floats, aloque espaço dinamicamente para esta e a inicialize, com
Leia maisÁrvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich
Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic
Leia maisAtividade de laboratório listas encadeadas simples
Atividade de laboratório listas encadeadas simples 1. Estrutura básica Uma lista encadeada simples é uma estrutura de dados composta de uma seqüência de estruturas elementares chamadas nós. Cada nó contém
Leia maisAlgoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1
Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1 - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) PIP/CA - Programa Interdisciplinar de Pós-Graduação
Leia maisSCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)
SCC 202 Algoritmos e Estruturas de Dados I Pilhas (Stacks) (implementação dinâmica) Operações alocação encadeada dinâmica typedef struct elem{ tipo_info info; struct elem *lig; tipo_elem; typedef struct{
Leia maisExiste uma quantidade de informação que pode ser armazenada para resolver o problema.
Arquivos Introdução As estruturas vistas anteriormente armazenam as informações na memória principal do computador. Nem sempre é conveniente. Problemas: A informação é perdida; As estruturas de dados são
Leia maisEstruturas de Dados Filas
Estruturas de Dados Filas Roteiro Introdução Definição de Fila (Queue) Aplicações Operações sobre Fila Implementação de Fila Com vetores Com listas encadeadas Exercícios Introdução Estamos acostumados
Leia maisPONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco
PONTEIROS E LISTAS Kalinka Regina Lucas Jaquie Castelo Branco kalinka@icmc.usp.br ALOCAÇÃO DINÂMICA DE MEMÓRIA Pode-se assumir que as variáveis declaradas na cláusula variável do pseudo-código do algoritmo
Leia maisEstrutura de Dados: Aula 3 - Linguagem C
Estrutura de Dados: Aula 3 - Linguagem C Uso de Memória Alocação de memória Estática Ocorre em tempo de compilação no momento em que se define uma variável ou estrutura é necessário que se definam seu
Leia maisArquivos. Programação de Computadores I. Natália Batista.
Arquivos Programação de Computadores I Natália Batista nataliabatista@decom.cefetmg.br 1. Arquivos Estruturas de dados armazenadas fora da memória principal do computador, por exemplo em discos. Usados
Leia maisÁrvores. Prof. César Melo DCC/ICE/UFAM
Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não adequadas para representar hierarquias. Exemplo:
Leia maisSUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca
ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização
Leia maisIntrodução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
Leia mais1/24 FICHEIROS DE TEXTO
1/24 FICHEIROS DE TEXTO Hardware de entrada/saída 2/24 Hardware de entrada/saída Grande variedade de dispositivos de E/S (Input/Output) - de memória: disco interno e externo, DVD, pen, CD,... - de transmissão:
Leia maisProfessora Jeane Melo
Professora Jeane Melo Roteiro Lista Encadeada Alocação: Estática x Dinâmica O que são Ponteiros? Ponteiros Variáveis que Armazenam Endereços de Memória Mas, toda variável não é armazenada na memória? Ponteiros
Leia maisIntrodução a Programação. Arquivos
Introdução a Programação Arquivos Tópicos da Aula Hoje aprenderemos a persistir dados Conceito de arquivos Importância de persistência Modos de acesso de arquivos em C Operações em arquivos Funções de
Leia maisLista Encadeada (Linked List)
Lista Encadeada (Linked List) As listas ou listas encadeadas são a estrutura de dados mais simples concebível excetuando-se naturalmente os arrays. Listas encadeadas nada mais são que uma seqüência de
Leia maisEstrutura de Dados Listas
Universidade Federal da Paraíba Centro de Informática Departamento de Informática Estrutura de Dados Listas 1 Tiago Maritan tiago@ci.ufpb.br Conteúdos Abordados O Conceito de Listas Listas com Representação
Leia maisCES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra
CES- Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra Árvores CES- Operações sobre uma árvore Estruturas para armazenar árvores Contígua Contígua melhorada Encadeada
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisÁRVORES E ÁRVORES BINÁRIAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ÁRVORES E ÁRVORES BINÁRIAS Vanessa Braganholo Estruturas de Dados e Seus Algoritmos ÁRVORES Árvores Árvores Binárias INSTITUTO DE COMPUTAÇÃO - UFF 2 ÁRVORES Fonte de consulta: Szwarcfiter, J.; Markezon,
Leia mais1 Exercícios com ponteiros
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros
Leia maisLinguagem C: Introdução
Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais
Leia maisComputadores Digitais 2. Prof. Rodrigo de Souza Couto
Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Tópicos Listas Encadeadas Introdução às listas encadeadas Manipulação de elementos Implementações recursivas Listas
Leia maisEstrutura de Dados. Aula 07 Alocação Dinâmica
Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).
Leia maisProgramação Computacional Aula 17: Manipulação de arquivos
Programação Computacional Aula 17: Manipulação de arquivos Profa. Madeleine Medrano madeleine@icte.uftm.edu.br Arquivos de registros Os dados manipulados pelos nossos programas (dados de entrada, dados
Leia maisEstrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Listas e Filas Estruturas de Dados 2 Estrututuras de dados lineares Pilhas (stack) Estrutura de dados onde a inserção
Leia mais