Você está na página 1de 57
Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS INTRODUGAO Meee ee ee Estruturas de Dados Z EMENTA: Métodos de ordena¢dobésicos, busca binéria e sequencial, pilhas, flas, alocago dinémica de memériae listas igadas. OBJETIVOS :Estudode métedos classicos de ordenagaoe busca, intoduzindo a nogao de compiexidade, Estudo © manipulagao de tipes diversos de estruturas de dados e suas aplicacdes, METODOLOGIADE ENSINO: Nas aulas tedricas os conceites sero expostes por meio de utlizaco de lousa, datashow, sendo disponibilizado paraos alunos 0 material de apoio utlizado. Seréo propostas atividades individuais ou em grupo para melhor fixago dos conceitos. As aulas praticas serdo no laboratsriode informatica utlizando como ferramenta de apoio a linguagem de programa¢a0C. Todasas aulas praticas serdo duas das quatro aulas no periodo. SISTEMADE AVALIAGAO: O critério de avaliagdo devera ser composto por 03 notas oficiais (AV1, AV2.@AV3), sendoa AV1 uma avaliacéo individual elaborada e aplicada pelo professor da disciplina e as avalia¢Ses AV2 € AV3, sero provas integradas elaboradas por um grupo de professores determinado pela coordenacaodo curso. Para a composicao da média seréo consideradases duas maioresnotes entre AV1, AV2e Av3, somadase divididas por 2, considerando-se aprovadoo aluno que obtiver média final maior ou igual a 6,0 (seis) SMe ee Bibliograt Bibliografiabasica: ‘SCHILDT, Hebert. C - Completoe total, Ed. Makron Books, 1995. Wirth Nikiaus — Algoritmos e estrutura dedados, Ed. Rio de janeiro LTC, 2001 PEREIRA Siivio do Lago; Estruturas de Dados Fundamentais - Conceitos ¢ Aplicagées. 4° Ed. Séo Paulo, Erica, 2000, 264p. Bibliografia complementar: VILLAS, Marcos Viana. Estruturas de Dados: Conceitos ¢ Técnicas de Implementac&o. Ed, Campus, 1993. ZIVIANI,Nivio. Projeto de algoritmos com implementagao em Pascal e C. Ed. Thomson, 2000. ASCENCIO, AnaFemanda Gomes. Légica de programagao comPascal. Ed. Makron Books, 1999. MIZRAHI, Victorine Viviane. Treinamento em Linguagem C —Médulo |. Séo Paulo: Ed. Makron Books, 1990, MIZRAHI, Victorine Viviane. Treinamento em Linguagem C —Médulo I! S40 Paulo: Ed. Makron Books, 1990, ee ee ee Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS Revisao de Vetores Deed Listas Lineares + Uma das formas mais comumente usadas para se manter dados agrupados éa lista. Existem varios exemplosde lstas lineares, tais como: + Fila de clientes em um banco: existe 0 primeiro da fila, 0 Ultimo da fila e os clientes fazem com que exista uma “ordem” de atendimento; + Fichario: existe um nimero finito de fichas que esté agrupado segundo uma "ordem’ preestabelecida, de tal forma que conseguimosidentificara terceira ficha, a décima fiche, ete + Uma lista linear é um conjunto de informacdes de qualquer tipo, organzadas sequencialmente. + Aorganizacdo sequencialestabelece uma relacao de ordem, decorrendo dai a possibilidade de identificar qualquer elemento da lista: 0 primeiroou 0 uitimo ou qual elemento precede ou sucede qualquer outro. + Uma lista linear é uma colegdo L: [a0, a1, ..., an-1], onde n >=0, cuja propriedadeestrutural baseia-se apenas na posi¢do relativa dos elementos, que estilo disposteslinearmente. + Uma lista linear suporta diversas operagdes, tais como: insercio, remociio, acesso, contagem, concatena¢ao (juntar duas listas), etc. H,< KH) < Hy < HY K< Hy < Kj < Conjunto Lista Linear RR ee ee ee \Vetores 6 + Denominacao: variéveis compostas homogéneas unidimensionais. + Vetores so matrizes que possuem somente uma dimenséo. + Conjunto de variaveis, cada uma comum valor associado, como se fossem variaveis simples, mas todas compartilham o mesmo nome (identificador). + Podem armazenar mais de um valor na variavel ao mesmo tempo. + Avariavel é dividida em varias células, denominadas posicSes, cada uma identificada por indices numéricos do tipo inteiro posttivo. + Referimo-nosa cada posizéo do vetorusando seu nome seguide de seu indice, delimitado pelos caracteres ‘pet. + Todosos valores do conjunto de variaveis devem ser do mesmo tipo. + Para utiizarmos um vetor, devemos fazer a deciaracdo estabelecendoo tipo de seus elementose oseu niamero maximo de elementos. + Todasas posicdes pertencema mesma veridvel. Cada posigdotemacessoindividual e independents |Vetores 0 1 2 3 4 5 6 7 Heme sek we CUIDADO: variago do indice do vetor deve ficar dentro dos limites da dimensdo que o indice representa, + Atribuigdes a vetores nome_yet [0]=1 nome_yet [1]=5 nome_yet [2]=nome_vet [0] + nome_vet [ 1] nome_yet [3]=nome_vet [2]-4 + Entrada de dados scenf (“%d”, 8nome_vet[ 5 ]) Saida de dados printf ( “%d", nome_vet[ 3] ); o 1 2 3 4 5 6 7 nome_vet 1 5 6 2 7 Mee ee ee |Vetores 8 + Declaragéo de vetores [ < qtd_elementos> ] + Exemplos int idade_chefe[ 5]; float salario_emp [ 250]; + Forma mais usual de entrada de dados em vetores i i ! for(iz0ji< i++) | Cieo7> : 1 scanf (“Yea vet [1]) 1 1 ' \ vet [i] Exemplo de utilizacgao de vetor Programa que lée calcula amédia de 5 notas de um aluno 1, #include #include < stdlibh > #defne TAMS 4. int main (){ 5. floatnota [TAM] , soma, media 6. inti; 7. soma=0; 8. printf ("Digite os valores das cinconotas: \n" ) 9. for(i =0;i< TAM;i ++) ee 10. scanf ("%f", ¬a[ i]) ; nota [7.0 [50 | 8.0 | 30 | 20 | 11. for(i=0;i< TAM;i ++) soma | 32 media | 6,4 12, soma= soma +nota[i] 13. media= soma/ 5 14. printf ("\inMedia das notas:%.2fin\n" , media ); 18. system ("pause"); 16. return 0; PTC ee CT eee ee Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS REVISAO DE FUNGOES E PARAMETROS Funcao sem Parametros FUNGAO SEM RETORNO DE VALOR 1. #include 2. #include 3 char nome|30}; 4 void elogio() { 5 printf ( "Ola %s", nome ) 6 printf ( “inBonito nomel\n\n") ; 7} 8 intmain(){ 9 printf (“Qual o seu nome?" ); 10 gets(nome) " elogio() 2 system ("pause") ; 13, retum 0 “4 } Funcao com Parametros 1. #include 2. #include 3. flostprod(flost x, float y){ 4, retum x * y } 6. intmain ( ){ 7 floata, b, ¢; 8 a=2 9 b= 110: 10. c=prod( a b) " printf ( "‘ofinin".c ) 12. system ("pause") 13. retum 0 14.4 RR ee ee ee Deed 11 FUNCAO COM RETORNO DE VALOR 1 #include 2. #include 3 floata.b.<: 4 float prod(){ 5 retun a * b; €@ 9 7 int main () 8 an; 8 b= 110; a c= prod() 1" printf ("%6fnin",c) 12. system ("pause"); 13. return 0 “3 12 Parametros por Valor e por Referéncia PARAMETRO POR VALOR # include 2. #include 12, void porvalor (int a) { PARAMETRO POR REFERENCIA 1. #include 2. include 3. intx: 3. intx; 4. void porvalor (int a) ; 4. void por_ref( int "a ) 5. intmain( ){ 5. intmain(){ 6 x= 10; 6. x= 10: 7 porvalor (x ) i. por_ref(&x) 8. printf ("x = Sedinin", x) 8 printf ("x = %dinin’, x ) 9. system ("pause") 9 system( "pause") 10. retum 0 10. retum 0; + 3 1. 4 42. void por_ref (int ‘a){ 13 8 13, ‘a= 14, printf (“%d %d\n", x, "a ) ; 14. printf (“%d %d\n", x, *a ); 15. } 15. 3 Me eee Ee ee Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS ORDENAGAO DE VETORES Ordenacio de Vetores. 15 + Assimque voeé cria uma colegio importante de dados, provavelmente pensacomo classifica-la + Eprecisoorganizar os nomesem ordem alfabética, os alunos peles notas. os clientes pelo CEP, as vendas de casas pelopreco, as cidade na ordem crescente de populacao, as estrelaspela magnitude, etc. + Classificar dados também pode ser uma etapa preliminar para procuré-los, que & muito mais répida do que uma procura linear. + Trata-se de um dos procedimentos mais frequantes em processamento dedados. + Existem varios métodos de ordenaco, cada um com suas caracteristicasppréprias, podendo se adapter melhor a uma determinada quantidade ou tipo de dados, como por exemplo: por trocas, por insereo; por seleco; pordistribuigéo Vania Cristinade Souza Pereira~2015_1— Estruturas de Dados - CC/SI— www.profvaniacristina.com Ordenacao por Trocas (BUBLE SORT) 16 + Também conhecido como"método da bolha” ( “bubble sort") é um dos métodos maissimples de ordenacao. 1. Void bsort ( int vet [], int atd ) { inti, j; int k; for (i= ti vet[i+11){ + Consiste em percorrero vetor, comparando-se cada elemento do vetor como elemento imediatamente seguinte ( V[ indice ] comV [indice +1 ] ) + Oniimero maximo de execucdesdo trecho do algoritmo pare que o vetor fique ordenados N-1 vezes, onde N é ontimero de elementos do vetor. | Observacaes: + [determina o nimero de etapas para a ki 1 ordenago + J determina o numero de comparacGesem cada I 1 etapa e os indices a serem pesquisadosparaa ! comparagao Se Seeaee See Estrutur SET 2 3 4 menores para a esquerda 5. 6 es 8. 9. k=vet [i]; vet [j] = vetlj +1]; vet[j+1]=k; ee Exemplo de Ordenacao por Trocas ©anaa 10. " 12 13. 14. DBNOHRYON HS #include #include #define MAX 5 void bsort ( char v[], int qtd ) ; int main() { inti; char v [MAX ]={'v','f,'s! bsort ( v, MAX ) ; for (1 =0;1< MAX; i++ ) printf ("v [%d]=%ec\n "i, v[i]); printf ("\n") system (" pause return 0; Oe oe eee ee Exemplo de Ordenacao por Trocas Complete o programa a seguir para que o mesmo ordene, em ordem alfabética crescent, o vetor Nomes que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro. Utilize ométodo de ordenacao por trocas. #include #include #include void bsort ( char v [6 ][ 10], int tam) { inti, j chark [10]; for (i= 1; i < tam; t+ ){ for (j = 0;j vlie41) 2 k=vfil: 22. vUjl=vlit 1): 23, vij+t]=k; 24. } 25. } 2. at. 9 17. int main (){ 18. 19. 20. 21 22. 23. 24. 25. 26. 27. 28. char nomes [6 ][ 10]; inti; for (i= 0;1 <6; i++) { } bsort ( nomes, 6) printf ( "\r\n" ) ; for (i= 0; <6; i++) printf ( "s\n", nomes [i] ) getch (); return 0 18 Exemplo de Ordenacao por Trocas 419 Simular a ordenacaoem ordem crescente do vetor Nomes que contém os seguintes dados: Maria, ‘Sandra, André, Mario, Dirce, Sandro. Utilizeo métodode Se Trocas. aria | Sandra | Andcé | nario | Dirce | sancro void bsort (rt vet], int) { | inet for (1; ) vet Li + 14 k=vet [i] vot [i] =vot i+ 4] | | | vet [i+ 1] =k | Quantas trocas foram efetuadas pera a ordenaro deste vetor ? Resposta ‘www.profvaniacristina.com Biienacso por Selecdo (SELECTION SORT) 20 Este método consiste em selecionaro menorvalor do vetor e mové-lo para o primeiro indice, a seguir, seleciona-se o préximo menor valor, desconsiderando 0 é colocado na primeira posi¢do. Void ssort (int v[J, int atd ) { int i, min, j, k =0:i<(qtd—1) i+ + Odinamica do método de ordenaco por selecoé fOr OLS Ca AD REDE ‘sempre achar o menor valor do vetor @ inserilo no comeco, até completartodas as possibilidades de 1 2. 3. 4 min =i; trocae ter 0 vetor ordenado. 5. for(j=(i+1);i 2. #include 3, #define MAX 5 4. void ssort( char v[], int gtd ); 1. printe("in") ; 12. system ("pause"); 13. retum 0 14.) de ordenacao por Selegéo. #include #include #include 4. void ssort (char v[6][ 10], int tam) ; int main () { char nomes [6 ][ 10]; 5. 6. 7. inti; 8. for(i=O;1<6;i#+){ 9. 1 ie ¥ 12. ssort(nomes, 6) ; 5. int main (){ 6. inti; 7. charvet[ MAX ]={" 8. ssort( vet, MAX ) ; 9 for (i= 0; i< MAX; i++) 10. printf ( " vet[ %d] = %e \n", i, vet [i] }; Mee eee ee Exemplo de Ordenacao por Selecao ‘Complete o programa a seguir para que o mesmo ordene, em ordem alfabética crescente, o vetor \Nomes que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro. Uulize 0 Método 13, 14, 15. 16. 17. 18.} 21 15. Void ssort ( char v[], int qtd ){ 16. inti, min, j; 17. chark; 18. for (i= 0; i<(qtd—1):i++) { 19. min =i; 20. for =(i+1);j=0 && v[j]>k){ 7. vOittl=veils 8. i-- 9. } 10. vfj+t]=k 1.0} 12. } Deed Ue Exemplo de Ordenacao por Insercao 25 1. #include 2. #include 18. void isort (char v[], int qtd ) { 16. inti, 17. chark ; 3, #define MAX 5 4. void isort( char v [], intqtd ); 18. for(i=t;i= 0 && v[j]>k){ 8. isort ( v, MAX ) ; 22. vti+4]=vCil 9 for (i = 0; |< MAX; i++ ) 23 i-- 10 printf ("v [ %d] = %c ni, v[i]); 24, } W printf ("\n"); 25. viit1]=k; 12 system (" pause" ) 26. } 13, return 0 ; 27. } 14. } Exemplo de Ordenacao por Insercao 26 ‘Complete o programa a seguir para que o mesmo ordene, em ordem alfabética crescente, o vetor \Nomes que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro. Utilize ométodo de ordenacao por Insercao. 1. #include #include 13. printf ( "\n\n") ; #include 14, for(i=0;1<6; i++) 15. printf ( “%s\n", nomes [i] ) ; 4. void isort ( char v[6][ 10], int tam ) 16. getch(): 17. return 0; 5. int main (){ 18.} 6. char nomes [6 ][ 10]; 7. inti; 19. void isort ( char v [6 ][ 10], int tam ) { 8. for (i= 0;1<6; i++) { 20. 9. 21.) 10 1 } 12. isort (nomes, 6); Exemplo de Ordenacao por Insercao 27 Simular a ordenacaoem ordem crescente do vetor Nomes que contém os seguintes dados: Maria, ‘Sandra, André, Mario, Dirce, Sandro. Utilize o métodode ordenacéo por insercao. asennad — TT een van eat er vena wine waria | Sarda | André | Mario | Dire | Sandro | | | for (= 4; i< at i++) ( k=vEi while G>= O88 Wj1>k)f viet }=vtil i-- | ) a ee ee | vie tisk Ree ee Te ee Exercicios Complementares de Ordenacao 28 4. Facaumprograma quecontenha um vetorde 10 ntimeros reais efaca a ordena¢aodos valores utilizando 0 método deTROCAS. 2. Facaumprograma quecontenha um vetorde 10 ntimeros reais e faca a ordenagaodos valores utilizando 0 método deSELECAO. 3. Fagaumprograma quecontenha um vetorde 10 nimeros reais efaca a ordenagaodos valores utilizando 0 método deINSERCAO. 4, Simulara ordenagao por TROCAS em ordem decrescente do veror X que contém os seguintes dados: 52, 47, 90, 47, 95. Informe quantas trocas foram efetuadas paraa ordenacéo deste vetore quantas comparacées entres os valores do vetor foram efetuadas paraa sua ordenagao? Respostas: Trocas= Comparacée: 5. Simular a ordenagaopor SELEGAO em ordem decrescente do vetor X que contém os seguintes dados: 78, 40, 49, 81, 68. Informe quantas trocas foram efetuadas paraa ordenacao deste vetore quantas comparagées entres os valores do vetor foram efetuadas paraa sua ordenagao? Respostas: Trocas: Comparagée: 6. Simulara ordenagao por INSERGAO em ordem decrescente do vetorX que contémos seguintes dados: 54, 72, 79, 46, 85. Informe quantas comparagées entres os valores do vetor foram efetuadas paraa sua ordenacéo? Respostas: Trocas= Ue Exercicios Complementares de Ordenacao 29 7. Dadaa funcio main() nos préximos dois slides, codifique astuncées ord_nome, ord_notae ord_faltas de tal modo que os vetores sejam ordenados simultaneamente conformeas op¢desdo menu. As funcées devem ser codificadas da seguinte forma: fungo ord_nome—utilizer 0 método de trocas; fun¢0 ord_nota— utiizar 0 método de selecgo; e funco ord_faltas—utlizar o métado de inser¢o Exemplo: | Pisoresincias eC Oo Wm @ io ec vomes [Ana] Gil | Wve | Lie | Teo | ful Oo om a om mw ots 6 95 | 85 | 35 | 75 | 45 | oO om 2 mm fo [7 711%] 3] 1 4 gow oO nones Tivo | Teo | Lia | Gil | Ana somes [Gil | Lia | Ana | Teo | Ivo | Oo mM a om m 4 oO om om oe §=135 1 45 [75] 85 | 95 oo = [as | 75 1 96 [45 [35 | o m 2 9 w @ 9 W 2 Sas 15 [11 3 1 7 - [41 3 7 "15 | Se _ Vania Cristinade Souza Pereira~2015_1— Estruturas de Dados -CC/SI— www.profvaniacristina.com Exercicios Complementares de Ordenacao 30 #include < stdio.h > #include < stdlibh > #include < conioh > #include < stingh > #defne QTDS void ord_nome ( char vet_nome[ QTD] [ 30] float vet_nota[ QTD], int vet_faltas[ QTD]) ; Void ord_nota ( char vet_nome[ QTD] [ 30], float vet_nota [ QTD), int vet_fatas [ QTD} ); void ord_faltas ( char vet_nome[ QTD] [ 30], float vet_nota[ QTD], int vet_faltas[ QTD]) PNOHERON| 9. int main (){ 10. charnomes[ QTD] [30] ={"Lia", "Ana", "Ivo", "Teo", "Gil”} ; W float nota [ QTD] ={ 7.5, 9.5, 3.5, 4.5, 8.5}; 12. _intfaltes [ QTD] = (3,7, 15, 11, 1}, i, ope; 13. dof 14. system( "cls") 18, printf ( "Escolhauma op¢doinin" ) 16. printf (1. Ordena Nome\n") 17 printf ( "2, Ordena Notaln" ) 18. printf ("3. Ordena Faltas\n" ) 18, printf (4. Sairinin" ) 20. scanf ("%ed", Bope Deed Exercicios Complementares de Ordenacao 31 24 if (ope == 4) retum 0 22 switeh ( ope) { 23 case1 24, ‘ord_nome(nomes, nota, fatas); break ; 25 case2 26 ord_nota(nomes, nota, faltas); break 27 case3 28 ord_faltas(nomes, nota, fatas); break ; 29 } 30. system ("cls") 31 printf ("Dados ordenadesin”) 32 for(/=0;1< QTD; i++) { 33, printf ("%s",nomes [i] ) 34. printf (""-%.2F"\nota[i}) 36. printf ("- %din" faltas [i ]); 36 } 37 getch() 38. while (ope !=4) 39, getch() 40, retum 0 41.) eM ee ee ee Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS PESQUISA EM VETORES Pesquisa em Vetores 33 + Aprocurade informagao é uma atividade quotidiana: procuramos nimeros emlistas telefénicas, palavras em dicionarios, ete. + Estudaremos dois métodes para pesquisar um dado em um vetor: + Apesquisa sequencial + Apesquisabinara. ROT ee Pesquisa Sequencial VETOR DESORDENADO 34 + Uma forma simples de procurar consiste em: 1. int pesqseq ( int v[], int busea ) { + Comecarno inicio do vetor; comparar 2 inti sucessivamente 0 dadoprocurado como dado do vetor; repetiro se processoaté encontrar o dado 3. for (i= 0; 1< MAX; i++ ) ou atingir 0 fim do vator. 4. t(vti 5. busea ) retum i + Se ovaior procurado for igual ao valor armazenado no vetor, a fun¢&o retoma o indice return -1 ; corresponde, caso contrério, continua a busca 6.) * Aoatingir ofim do vetor sem encontrar o valor procurado, a fung&oretorna-1 VETOR ORDENADO 1. int pesqseg ( int v[ J, int busca ) { + Comopercorremos sequenciaimente o vetor, @ esie 2 inti algoritmo chamamos pesquisa sequencial ’ 3. for (i=0;i< MAX; i++ ){ + Abusca sera mais rapida se o vetor estiver com 4. if (v[i] == busca ) ‘seus elementos ordenados. 5, return i; + Otempo de busca pode ser reduzido 6. else significantemente devido a relagdo entre os ¥ if(v[i]> busca} elementos da lista 8 return -1; 9. t 10. retum -1; | eee: 11.) Exemplo de Pesquisa Sequen Vetor Ordenado 35 1. # include 16. tp = pesqseg ( vet, pes ); 2. #include 17. if(p>=0) 3. #inolude 18. printf ("6c esta no indice %d.", pes, rp); 4. #define t 10 19. else 5. void bsort ( char vet [ ], intt ); 20. printf("%c nao esta no vetor.\nin", pes) ; 6. int pesqseq ( char vf], char busca ); 21. printf ( “Pesquisar outro valor? [S/N] * ); 22. flush ( stdin ) ; 7. int main (){ 23. ope =getch (); 8. inti mp; 24. ope = toupper ( ope ) ; 9. char pes, ope 25. } while ( ope == 'S'); 10. char vet [t] = {'o','c’ 26. getch(); 41. bsort ( vet,t); 27. return 0; 12. do{ 28} 13. system ("cls " ) 14. printf ( "Dado a ser pesquisado: 15. seanf("%e", &pes ) Exemplo de Pesquisa Sequen Vetor Ordenado 36 29. void bsort ( char v [], int qtd ) { 42. int pesqseq (char v[], char busca ) { 30. inti,j; 43. inti; 31. chark; 44. for(i=0;i< MAX; it+){ 32. for (i= 1;ivbi+11)¢ 47. else 35, k=v(ili 48. if (v[i] > busea ) 36. vtjl=vlir 1): 49. return -1 ; 37. vEjt+ 1] =k; 50. } 38 } 51. return -1; 39, } 52.} 40. } 41.) ‘Simular a busca SEQUENCIAL do vetor ordenado v para o numero 17. i voy | v1} | viz | visi] vr41| Busca=17 5 13 | a7 | 19 | 21 int pesqseq( int v[]. int busca ) { Return inti; for (1=0;1= MAX i++) Simular a busca SEQUENCIAL do vetor ORDENADO v que contémos seguintes dados: Maria, ‘Sandra, André, Mario, Dirce, Sandro, para onomeAnaré. Valor devolvido pela funcaopesqseq. ‘Simular a busca SEQUENGIAL do vetor ORDENADO v que contém os seguintes dados: Maria, ‘Sandra, Anaré, Mario, Dirce, Sandro, para onomeMarcos. Valor devotvido pelafuncao pesqseq. ‘Simular a busca SEQUENCIAL do vetor ORDENADO v que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro, para onomeAna. Valor devolvido pelatungaopesqseq ‘Simular a busca SEQUENCIAL do vetor ORDENADO v que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro, para onome Sandra. Valor devotvido pela funcao pesqseq. ‘Simular a busca SEQUENCIAL do vetor ORDENADO v que contém os seguintes dados: Maria, Sandra, André, Mario, Dirce, Sandro, para o nome Tania. Valor devolvido pela fungao pesqseq. Cee Ow eer ee ed Pesquisa Binaria 39 + Emuito mais eficionte que a pesquisasequencial, mas 86 ¢ aplicével a vetor ordenados! jot pasqbine(inkvE4 int busca) + Devera ser comperado o dado que se encontra a fntificloginmeiory meio do vetor como dadoprocurado, podendo inicio = 0; aconteceruma detrés coisas: fim = MAX 4. 8: 3 + igual ao dadoprocurado => esta encontrado 4. + émaiordo que 0 dado procurado = continuar 5. while ( inicio 6. 7 8. = fim ) { a procurar (do mesmo modo) no sub-vetora esquerda da posi¢o inspecionada + émenordo que dado procurado= continuar a procurar (do mesmo modo) no sub-vetora direita da posicéo inspecionada meio = ( inicio + fim ) / 2 if (v[ meio ] == busca ) return meio; 9. if (busca < v[ meio |) + Em outras palavras: Considerames prmeiro o 40. elemento do meio da tabela. f= tnt =A + Seo dado deste elemento é maior do que o dado 11. else a nico=meo +1: + Se ovetora ser inspecionadose reduzir aum 13.) vetor yea conchae que 0 dado procurado nao 14. return -1 + Em cada passoa procura binégria reduz o nimaro 15.} de elementosa considerarpara metade, eee Exemplo de Pesquisa Binaria 1. # include 2. # include 40 16. rp = pesqbin ( vet, pes ): 17. if (rp 0) 18. __printf("9%6c estano indice %d.",pes, rp); 3. #inolude 4. #define t 10 5. void bsort ( char vet [ J, intt ); 6. int pesqseq ( char vi], char busca ); 19. else 20. —_printf("%c nao esta no vetor.\n\n",pes); 21. printf ( "Pesquisar outro valor? [S/N] " 22. fflush (stdin ); 23. ope = getch (); 7. intmain (){ 8. inti rp; 9. char pes, ope; 24. ope = toupper (ope ) ; 'S'); 10. char vet [t]={'o',c'/x,'s''n'r''p\'e''m',j' } 11. bsort ( vet,t); 12. do{ 13. system (“cls " ); 14. printf ( "Dado a serpesquisado: ") 15. seanf ("%e", &pes) ; eee ee ee Exemplo de Pesquisa Binaria 41 1. 5. 21. void bsort ( char v[], int gtd ) { 34. int pesqbin (char v[ J, char busca) { 22. inti; 36. int inicio, fim, meio ; 23. chark 36. inicio= 0 24 for (i=1;i VEi+11) ¢ 39. meio = (inicio + fim )/2 27. k=vlils 40. if (v[meio 28. viil=vli+4): 41 return meio 29. viit41=k: 42 if (busca 43 2. # include 3. #define M7 4. int main (){ 5. int i, v1 [M]=( 13, 5, 7,21, 77, 43, 11; 6. 7. 8 float v2 [MI= {21.7, 13.1, 5.9, 33.7, 7.5, 3.13, 1.21}; float v3[M]; indices correspondentes do for (i=0;i 2.#include 3.#include 4.#include 5.#define MAX 5 6.typedef struct 7. charnome [10]; 8. float nota ; 9. int faltas ; 10} reg ; 11.void ord_nota ( reg v [ MAX ], int gtd ); 12.void ord_faltas (reg v [ MAX ], int gtd ) ; 13. void ord_nome ( reg v [ MAX ], int qtd ) ; 44. } eee ee ee Exemplo de ordenacao de tabelas 28. dot 29. system ("cls"); 30. printf ( "Escolha uma opcao\n\n" ) ; 3 printf ( “1. Ordena Notain" ) ; 32 printf ( “2. Ordena Faltas\n" ) ; 33, printf ( “3. Ordena Nome\n" ) ; 34. printf ( "4. Sair\n\n" ) ; 35. scant ("%d", Bope ) ; 36, if ( ope == 4) return 0 ; 37, switch ( ope ) { 38 case 1 : ord_nota ( vetor, MAX ) ; 39. break ; 40 case 2 : ord_faltas ( vetor, MAX ) 4 break ; 42 case 3: ord_nome ( vetor, MAX ) 43. break ; 45 14.int main () { 15. reg vetor[ MAX ]; 16. inti, ope ; 17. for (i= 0; 1 v[j+ 1 ].nota ){ 63. k=viil 79. void ord_nome (reg v [MAX ], int gtd ) { 64. vUl=vlitt); 80. . 65. VU+11=k; 81. registrok ; 66. } 82. for(i=1;i< gtd ; i++) 67.) 83. for § = 0;j 0) { 68. void ord_faltas ( reg v [ MAX ], int qtd ) { 85. k=vEjls 68. intij; 86. vEjl=vlietd; 70. registro k ; 87. vEit tek 71. for(i=4;i v[j+1 Lfaltas) { Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS COMPLEXIDADE DE ALGORITMOS Nocg6es de Complexidade de Algoritmos 49 + Algoritmo + Conjunto de passos logicamente ordenados para a soluraode um problema. + Para garantir que 0 resultado desejado serdalcancado’ + Existe algum algoritmo que resolve o problema? + Como encontrar um algortmo eficiente para solucioné-lo? + Uma vez encontrado, como comparéo. outros algoritmos que também resolvem o probleme? + Comodeterminar se o algoritmo esta correto? + Comodeterminarse o algoritmo é eficiente? + Resolveras quest6es acima implica em otimizar 0 programa o que ¢ frequentemente desprezado ou feito inadequadamente, porém: + Quando otimizar? + Comoreconhecerqual parte do cédigo toma mais tempo? + Eo que fazer para diminuir 0 tempo tomado por essas partes do cédigo? RR ee ee NocGes de Complexidade de Algoritmos 50 + Aanalse de um aigoritmopara um dado problematrata de: + Provar que o algoritmo esta correto; + Estimaro tempo que a execugao do algoritmo consome + Dados dois algoritmos para um mesmo problema,a andlise permite decidir qual dos dois é mais eficiente. * Para avaliar e comparar odesempento de dois algoritmos podemos utilizar 0 método ampirico: executamos ambos (muitas vezes) para ver qual é mais répido. Seo algoritmo for lento, o métedo empirice pode consumir demasiado tempo, nfo podemos esperar 2 horas até que o algoritmo produza a resposta, portanto, este métodondo é recomendado. + Ciitérios para medigao de programas: + Numero de instugoes + Numero de transferéncias da meméria secundéria para a principal + O.esparoemmeméria— complexidade espacial (mede a memérianecessaria para executar um algoritmo ‘emum problema detamanho n.) + Otempo de execueao— complexidade temporal (mede o tempo necessario para executarum algoritmo em um problema de tamanho n.) + Mediro tempo absoluto no é interessante per depender da maquina, tais como eficiéncia do computador (hardware) e carga do sistema operational, entre outros. O tempo, refere-se a contagem do nlimero de operacdes elementares doalgoritmo. + Acomplexidade mais estudada em algoritmos¢ a complexidade de tempo. SMe ee ee Nocg6es de Complexidade de Algoritmos 51 + Amagsa de dados pode ser considerada em trés escalas de complexidade: + Melhor caso- &0 menor tempode execucéo em uma entrada de tamanho N, é pouco usado, porter aplicago em poucos casos. + Pior caso - é 0 método mais facil de obter. Baseia-se no maior tempo de execugao sobre todas as entradas de tamanho N + Caso médio- dos trés, é 0 mais dificil de determinar. Deve-se obtera média dos tempos deexecurao de todas as entradas de tamanho N, ou baseado em probabilidade de determinada condi¢ao ocorrer. + Exemplo: + Dado vetor de caracteres abaixo, deseja-sebuscartrés caracteres diferentes: "A", "D" e"K". + Sendo um algoritmo de busca sequencial, que compara um caractere apés 0 outro, do primeiro ac Ultimo, este aigortmo terd 0 seu pior caso para encontrar a letra "D", melhor caso para a letra casomeécio para a letra "A" 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Kle{[t{clulol|Pela|mici{[tialz|[clvip PE ee See Classes de Complexidade de Algoritmos 52 Algortmos foram classificados em "Classes de Problemas”, que, de acordo como tamanho de “n”, afeta o algoritmo de forma mais significatva, Complexidade Constante (1) - As instrugdes do algoritmo sao executadas um numero fixo de vezes. ‘Complexidade Logaritmica © (log n) - Tipico em algoritmos que transformam um problemaem outros menores. Para dobrar o valor de log n temosde consideraro quadrado den, ComplexidadeLinear O(n) -Um pequeno trabalho é realizado sobre cada elemento de entrada. Cada vez que n dobrade tamanho, 0 tempo de execucaotambémdobra, ‘Complexidade Linear Logaritmica © (nlogn ) - Algoritmosbaseados no paradigma divisdo © conquista, onde o problema é dividido em problemas mencresindependentes e depois reunindo as solucées. Complexidade Quadratica 0 (n2 ) - Ositens de dados s4o processados aos pares, geralmente um loop dentro de outro. Sempre que n dobra,o tempo de execucao é muttiplicado por 4 Complexidade Ciibica © (n3)-Ositens de dados sao processadosdetrés emtrés. Geralmente um loop dentro de outros dois. Sempre que n dobra, o tempo de execucdo fica muttplicado por 8. Complexidade Exponencial © (2n) - Tempode execucdo exponencial. Seu crescimentoé muito rapido. Complexidade Fatoria! Classes de Complexidade de Algoritmos 53 COMPLEXIDADE CONSTANTE -0(1) Independedo tamanho N de entradas E oinico em que as instrucdes dos algoritmossao executadasnum tamanho fixo de vezes Exemplo int vazia ( int x ){ retum x Soret Classes de Complexidade de Algoritmos 54 COMPLEXIDADE LOGARITMICA— 0 ( logn ) Ocorretipicamente emalgoritmos que dividem o problemaem problemas menores. Exemplo: Busca Binéria em um vetor. int pesqbin(int v{ ], int busca) { Int inicio, fim, meio ; inicio= 0 fim =MAX— 1; while ( inicio <= fim ) { meio= ( inicio + fim )/2; if(v [meio] == busca) return meio if( busca vetl) + 11)¢ k=vetlj] vet[j]=vetLi+1] vet[j+1]=k Classes de Complexidade de Algoritmos 58 COMPLEXIDADE CUBICA—O (n°) Ositens de dados so processados detrés em trés. Geralmente um loop dentro de outros dois. Exemplo: void matriz (int p[ 10] [ 10}, inta{ 10] [10], int b[10][ 10] ) int ij, k; for(i=0;i<=t;it+) for(j=0;j <= t:j++){ PLiJ[i]=0 for(k =0;k <= 1; k++) PLU I=P Cit) +a tik) * bE kIT]; printf ("%ed", pLi][i]) Deed Classes de Complexidade de Algoritmos 59 COMPLEXIDADE EXPONENCIAL—0 ( 2") ‘Tempo de execuco exponencial tom pouca aplicacao pratica pois tem um crescimento muito répido; 6 tipico em algortmos com solugdes de forga brut. COMPLEXIDADE FATORIAL-O(n!) ‘Temum comportamento muito piordo que a Complexidade Exponencial. Defintivamente, ndo sdo iteis do ponto de vista pratico. nl _O(2") O(n!) 1 2 1 2 4 2 3] a 6 4 16 24 5 32 120 é| 64 720 7 128 5.040 8 256 40.320 9 512 362.880 ro 1.024 3.628.800 SERIE Ue 110.000 :000.c00.000.000.000 o(n1) 60 100.000.000.000, 000.000 1.000.000.000.000.000 410.000.000.000.000 0(2) 100.000.000.000 1.000.000.000 10.090.000 O(n) 100.000 O(n) O(nlogn ) 1.090 O(n) 10 O(logn) (1) |Analise da Complexidade das Ordenacoes 61 + Em alguns algoritmos de ordena¢io o fator relavante que determina seu tempo de execugio é o nlimero de comparagGes realizadas. + Para efeite de ilustragéo sera considerado umvetor de dimensdo cinco + Osalgoritmosapresentados serdo 0 de ordenago por trocas, por selec. insercdo, + Sera consideradosempreo pior caso, ou seja, 0 vetor ordenado em ordem decrescente, que devera ser cordenadoem ordemcrescente PE Complexidade da Ordenacao por TROCAS 62 Linha 3: primeira instrupdo “for’, sera executada 4 vezes, ou 1.void bsort ( int vet [], intn ){ seja, n-1 vezes. 2. inti,jk; Linha 4: segunda instrue&o “for’, sera executada de acordo 3. for(i=O;i vet +11) Linha 5: seré executada 6 k=vetli): 4vezes quando i= 0, 7 vet [i] =vetli +4]: 3vezes quando i= 8 vet [j+1]=k; ANsees ES 2 ; ‘1 vez quando i = Ou seja, sera executada 10 vezes (4+3+2+ 1) 10} 1. 4 Cer ReBrECERENO RoR dS 12} comparacées correspondea ((n-1)+(n-2)+...+2+1). Representacaomatematica: ye (n -1)(n-1+1) (n-1)n re 2 2 7 SMe ee Complexidade da Ordenacao por SELECAO 63 ) _ Linha 3: primeira instrucdo “for’, serd executada 4 vezes, ou 4. void ssort(int v [], intn ) { seja,n-1 vezes. 2. int i, j, min, k; B for(IeGeT<(n- 1); He) Linha 5: segunda instrugdo “for’, sera executada de acordo 4. min como valor armazenado na variavel i. 5. for(j=(i+ 1) ;i=0 8& v[j]>k){ Quando j= 0 sero executadas 1 vez. 7 li): Quando j= 1, serdo executadas 2 vezes, 5 Quando j = 2, serdo executadas 3 vezes. Quando j = 3, serdo executadas 4 vezes, Ou seja, serdo executades 10vezes (1+2+35+4). © 10. vfi+1]=k 11. 3 Linha 10: esta fora do comando de repetic¢go mais intemo, 12) portanto fara apenas n-1 atribuigdes. Representacaomatematica: t n(n+1) (n? +n) T=) —_—— = =a Ciéncia da Computacao — Sistemas de Informagao ESTRUTURAS DE DADOS PILHAS Mee ee ee Pilhas 66 + Uma pilha 6 uma lista linear em que apenas as operaces de acesso, insercao e remocaosao possiveis. + Todasestas opera¢des devem serrealizadas num mesmo extremo denominade topo. + Devido das caracteristicas das opera¢ées da piha, o tilimo elementoa serinserido seré o primeiroa ser refirado + Estruturas desse tipo séo conhecidas como "LIFO' (last in, first out) + Exemplo: + Emuma rua sem saida, tao estreita que apenas um carro passa por vez, 0 primeiro carro a sair seréo ultimo a ter entrado, Observe ainda que n&o podemos retirar qualquer carroe néo podemos inserir um carro de tal forma que ele néo seja o Ultimo. SMe ee Funcées para manipulacao de Pilhas 67 FUNCOES BASICAS ‘Seja P uma variavel do tipo pilha e X um elemento qualquer push( p, x) - Fungo que insere X no topo de P. (Empilha) Pop ( p )- Fun¢ao que remove o elemento do topo da pilha P devolvende o valor do topo para a rotina que achamou. (Desempiha) top ( p) - Fungo que retorna uma cépiado elemento dotope de P, devoivendoo valor do topo da pilha P para a rotina que a chamou. (Copia) FUNCOES AUXILIARES init ( p )— Fungo que esvazia a Pilha P. (Inicia / E'svazia) isfull ( p) — Fungo que retoma um valor Iégico informando se a pilha esta cheia. Verdadeirose estiver cheia ou Falso caso contrério, (Pilha cheia) isempty ( p) - Fungo que retoa um valor légico informando se a pilha esta vazia. Verdadeiro se estiver vazia ou Falso caso contrario, (Piha vazia) RR ee ee Exemplo de uso de Pilhas 1. #include 68 x printf ( "\ninin" ) system ("pause"); return 0; Dadoum nimerointeiro, positivoem 2. include base decimal, converté-lopara binario. 3. #include"piihas.h” 4. int mein () { 5. intr; 6, tpPithap ; 1. printf ("Digite um inteiro positvo:") 19 |2 8 seanf( "6d", 8n) . 2 5 9. init(&p); a o3 12 10 dof 4 Fe 4 r=n%2; ; = 12. push (p, 13 (decimal) = 1104 (binario) 183 nans2 14. }uhile(n != 0) 18. printf("\Em Binario =>“ 16. while (IsEmpty ( &p )==0){ 47 r=pop( &p): 18 printf ("%ed!, Se To Pilhas no Controle de Variaveis e Sub-rotinas 69 1 #include 2 void ACintn ) { 3 int A1,A2; 4 5 } 6 void B( int V1)( 7 floatB1, B2; 8 9 ACS); 10 "> Pitha4 Pitha 2 412 int main( ){ 13 int PI, P2 14 A(7) 15 16 © -B(P1) 7 1% } Mee ee Te ee Arquivos Cabecalhoem C 70 + Até.0 momento, em nossos programas, na maioria das vezes, utiizamos biblictecas padrao por meio da diretiva #include , como por exemplo, os aquivos stdio.h, stdlib.h, string.h, etc. + Bibliotecaé um conjunto de fungSes que podem ser utlizadas em outros programas sem necessidadese serem reescritas. E possivelcriarbibliotecas com fun¢des de grande utilidade ¢ reutiiza-las sempre que for convenierte, + Toda biblioteca é composta por duas partes. + Aprimeira parte 6 oarquivo cabegalho que possul a extensao .h (h de header — cabegalho em inglés). Este arquivo deve conter os protétipos das fun¢3es e, casonecessirio, as declaracSesde constantes, tipos, varidveis que os programas que fardo uso da biblioteca precisam saber. + Asegunda parte € 0 arquivo de cédigo que possuia extenséo..c, Este arquivo deve ter o mesmo identificador do arquivo cabegaho e nels devem estar implementadas as fun¢Ses declaradas como protétipo no arquivo .h SMe ee Arquivos Cabecalho em C 71 + Adiretiva #include indica 20 compilador quais s80 as biblictecas que devem ser incluidas no momentoda compilagao ¢ linkedi¢o. Sua sintaxe pode ser de duas formas #include ou #include “nome_do_arquivo.h" + Quando utlizamos a sintaxe #include a procura peloarquivo segue pelos diretérios pré-especificados do compilador * Quando utilizamos a sintaxe #include "nome_do_arquivo. programa fonte se encontra ou no caminho indicado. "a procura peloarquivo é feita onde o Me eee ee Implementacao do arquivo pilhas.h 72 1. # define MAX 50 2. typedef char tpElem; typedef struct { int topo; tpElem valor[MAX] onan wo } tpPiha; 7. I] protatipos das fungdes 8. void init ( tpPilha *p ) ; Hiniciar a pilha 9. intisFull (tpPilha *p ) ; // verificar se a pilha esta cheia 10. _intisEmpty ( tpPilha *p ) ; // verificar se a pilha esta vazia 41. void push ( tpPiha *p, tpElem x) ; 1/ colocar um dado no topo da pilha 12. tpElem pop (tpPilha *p ) ; 1/ retirar um dado do topo da pilha 13. tpElem top ( tpPiha *p ); // copiar um dado do topo da piha Deed

Você também pode gostar

  • Modelagem Uni9e10
    Modelagem Uni9e10
    Documento18 páginas
    Modelagem Uni9e10
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni8
    Modelagem Uni8
    Documento6 páginas
    Modelagem Uni8
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni7
    Modelagem Uni7
    Documento21 páginas
    Modelagem Uni7
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni5
    Modelagem Uni5
    Documento26 páginas
    Modelagem Uni5
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni4
    Modelagem Uni4
    Documento29 páginas
    Modelagem Uni4
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni6
    Modelagem Uni6
    Documento10 páginas
    Modelagem Uni6
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni5
    Modelagem Uni5
    Documento26 páginas
    Modelagem Uni5
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni1
    Modelagem Uni1
    Documento22 páginas
    Modelagem Uni1
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni3
    Modelagem Uni3
    Documento28 páginas
    Modelagem Uni3
    JefersonNeryMota
    Ainda não há avaliações
  • Modelagem Uni2
    Modelagem Uni2
    Documento18 páginas
    Modelagem Uni2
    JefersonNeryMota
    Ainda não há avaliações
  • Banco de Dados Uni
    Banco de Dados Uni
    Documento135 páginas
    Banco de Dados Uni
    JefersonNeryMota
    Ainda não há avaliações
  • Regras Conversao Uni
    Regras Conversao Uni
    Documento1 página
    Regras Conversao Uni
    JefersonNeryMota
    Ainda não há avaliações
  • Slides ModBD PDF
    Slides ModBD PDF
    Documento144 páginas
    Slides ModBD PDF
    JefersonNeryMota
    Ainda não há avaliações