Estrutura de Dados com Algoritmos e C

Tamanho: px
Começar a partir da página:

Download "Estrutura de Dados com Algoritmos e C"

Transcrição

1 Estrutura de Dados com Algoritmos e C

2 )WGVIZIVYQPMZVSRƒS YQEXEVIJEJ GMPRYRGEJSM8SQEXIQTS I\MKITIWUYMWEIHIHMGE ƒs SQSEWIHMXSVEWRƒSHIWINEQQEMW TYFPMGEVIWXIX XYPSREHEQEMWREXYVEPUYIXIRXEVGSQIVGMEPM^EPS REJSVQEHIEVUYMZSWIQIPLERXIEYQIFSSO1EWIWXEEXMZMHEHI XEQF QXSQEXIQTSII\MKIHIHMGE ƒs 4IRWERHSEWWMQVIWSPZMPMFIVEVIWXIPMZVSTEVEGSRWYPXET FPMGE WIZSG EGLEUYIIWXIPMZVSXIENYHSYIUYMWIVGSPEFSVEVGSQMKS TEWWIRYQEPSX VMGEIHITSWMXISZEPSVUYIEGLEVUYIHIZI 8IVQMRSYHITEKEVEGSRXEHIPY^XIPIJSRISY KYEIWSFVSY XVSGSZSG TSHIHITSWMXEVREQMRLEGSRXE)YEGVIHMXSUYIR W HSMWTSHIQSWWEMVKERLERHSZSG TSVUYIXIZIEGIWWSEYQ FSQQEXIVMEPUYIXIENYHSYIIYGSQSMRGIRXMZSEGSRXMRYEV IWGVIZIRHSPMZVSW EWSHIGIVXSXEPZI^SWTV \MQSWPMZVSWRIQ WINEQTYFPMGEHSWTSVYQEIHMXSVEIIWXINEQPMFIVEHSWHMVIXEQIRXI TEVEWYEGSRWYPXE 5YEPUYIVZEPSVHITSWMXEHSWIV HMVIGMSREHSTEVEEGSRXETSYTER E HSQIYPLSTEVEUYERHSIPIIWXMZIVREQEMSVMHEHIXIVVIGYVWSW TEVEGSQI EVYQRIK GMSTV TVMSRERGMEVWIYWIWXYHSWIXG (EHSWTEVEHIT WMXS 1EVGSW%YVIPMS4GLIO0EYVIERS &ERGS EM\E)GSR QMGE*IHIVEP %K RGME 3TIVE ƒs SRXE YVMXMFEHIQEV SHI

3 Estrutura de Dados com Algoritmos e C Marcos Laureano

4 Copyright 2008 por Brasport Livros e Multimídia Ltda. Todos os direitos reservados. Nenhuma parte deste livro poderá ser reproduzida, sob qualquer meio, especialmente em fotocópia (xerox), sem a permissão, por escrito, da Editora. Editor: Sergio Martins de Oliveira Diretora Editorial: Rosa Maria Oliveira de Queiroz Assistente de Produção: Marina dos Anjos Martins de Oliveira Revisão de Texto: Maria Helena A. M. Oliveira Editoração Eletrônica: Abreu s System LTDA. Capa: Use Design Técnica e muita atenção foram empregadas na produção deste livro. Porém, erros de digitação e/ou impressão podem ocorrer. Qualquer dúvida, inclusive de conceito, solicitamos enviar mensagem para para que nossa equipe, juntamente com o autor, possa esclarecer. A Brasport e o(s) autor(es) não assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens, originados do uso deste livro. Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) BRASPORT Livros e Multimídia Ltda. Rua Pardal Mallet, 23 Tijuca Rio de Janeiro-RJ Tels. Fax: (21) / / / s: site: Filial Av. Paulista, 807 conj São Paulo-SP Tel. Fax (11):

5 Aos meus genitores Luiz Otávio (in memoriam) e Natália.

6

7 Agradecimentos Agradeço à Brasport por mais esta oportunidade de publicar um livro sobre um tema em que vários autores já trabalharam (é claro que este livro tem um diferencial em relação aos demais). Aos meus colegas professores e alunos que ajudaram a evolução deste material nos últimos anos. E para uma linda flor, que, além de alegrar os meus dias, corrigiu os assassinatos à língua portuguesa.

8

9 Sobre o autor Marcos Laureano é tecnólogo em Processamento de Dados pela ESEEI, Pós-graduado em Administração pela FAE Business School e Mestre em Informática Aplicada pela Pontifícia Universidade Católica do Paraná. Doutorando em Informática Aplicada pela Pontifícia Universidade Católica do Paraná. Trabalha com programação em C no ambiente Unix (AIX/HP-UX) desde 1997 e Linux desde 2000, sendo especialista em segurança de sistemas operacionais. É professor de graduação e pós-graduação, tendo lecionado em várias instituições nos últimos anos. É autor de vários guias de utilização/configuração de aplicativos para os ambientes Unix e Linux. Possui artigos e livros publicados sobre programação, sistemas operacionais e segurança de sistemas. Dentre eles, Programando em C para Linux, Unix e Windows, também publicado pela Brasport. Atualmente leciona disciplinas relacionadas à segurança, programação, redes de computadores e sistemas operacionais em cursos de graduação e pós-graduação do Centro Universitário Franciscano (UNIFAE) e atua como consultor na área de projetos de desenvolvimento e segurança de sistemas. O autor pode ser contactado pelo ou através de sua página onde está disponível vasto material sobre programação, segurança de sistemas e sistemas operacionais.

10

11 Sobre o Livro O crescimento dos cursos tecnológicos específicos e com curta duração (2 a 3 anos) gerou uma demanda de livros que tratam diretamente o assunto de maneira clara e eficiente. Este livro é indicado aos cursos tecnológicos, para estudantes e profissionais que precisem dominar os conceitos e os algoritmos de forma rápida e precisa. O material foi preparado com a experiência do autor em lecionar a disciplina, somada à sua experiência profissional. Outros professores e coordenadores de cursos foram consultados; com isto, este material tem os assuntos pertinentes à área e pode ser adotado tranqüilamente em cursos de 40 ou 80 horas de Estrutura de Dados ou Programação de Computadores. Os algoritmos podem ser aplicados e convertidos para qualquer linguagem de programação, e os programas em C são simples e objetivos, facilitando o entendimento dos estudantes e profissionais que não dominam totalmente esta linguagem.

12

13 Sumário 1. Estrutura de Dados Dados Homogêneos Vetor Matriz Ponteiros Dados Heterogêneos Exercícios Uso de Memória Alocação de memória Estática x Dinâmica Alocação dinâmica de memória Funções para alocação de memória Função malloc Função calloc Função realloc Função free Utilizando as funções para alocação de memória Alocação de memória e estruturas em C Ponteiros para ponteiros mistério ou não Mais alocação de vetores e matrizes como ponteiros Controle de agenda com ponteiros de estruturas e vetores Pilha Representação das Operações com Pseudo-código Pilhas em C Exercícios...47

14 XIV Estrutura de Dados com Algoritmos e C 4. Fila Representação de Filas com Pseudo-códigos Filas em C Exercícios Recursividade Função para cálculo de Fatorial Número triangular Números de Fibonacci Algoritmo de Euclides Torres de Hanoi Curiosidades com Recursividade Cuidados com Recursividade Vantagens Exercícios Lista Vetores ou alocação dinâmica? Listas em C Exercícios Pesquisa Pesquisa Seqüencial Pesquisa Binária Exercícios Ordenação BubbleSort Ordenação por Seleção Ordenação por Inserção QuickSort MergeSort Exercícios Árvores Binárias Analogia entre árvores Árvore binária Relações...127

15 Sumário XV Árvore Binária Completa Árvores de Busca Binária Operações em Árvores Binárias Inserção Pesquisa Exclusão Maior elemento Menor elemento Percorrendo uma árvore Representações de árvores em C Implementação em C Exercício Referências Bibliográficas Índice Remissivo

16

17 Lista de Programas 1.1: Declaração de vetor em C : Exemplo de uso de vetores : Exemplo de uso de matrizes : Exemplo de uso de matrizes com várias dimensões : Exemplo de uso de ponteiros : Ponteiros como referência em funções : Aritmética com ponteiros : Vetor como ponteiro : Exemplo de estrutura : Exemplo de uso de estruturas com vetores : Declaração de vetor como ponteiro : Declaração de matriz como ponteiro : Exemplo de uso do malloc e realloc : Exemplo de uso do calloc : Exemplo de uso de estruturas com ponteiros : Ponteiro para ponteiro : Exemplo de uso de alocação de matrizes : Exemplo de uso de alocação de matrizes dentro de funções...32

18 XVIII Estrutura de Dados com Algoritmos e C 2.9: Exemplo completo de uso de vetor (ponteiros) de estruturas : Exemplo de manipulação de pilha : Exemplo de manipulação de pilha com estrutura : Exemplo de manipulação de fila em C : Reajuste da fila : Declaração de estrutura circular : Manipulação de fila circular em C : Fatorial (versão iterativa) : Fatorial (versão recursiva) : Descobrindo o número triangular (iterativo) : Descobrindo o número triangular (recursivo) : Cálculo do n-ésimo termo de Fibonacci (versão iterativa) : Cálculo do n-ésimo termo de Fibonacci (versão recursiva) : Cálculo do MDC iterativo : Cálculo do MDC recursivo : Cálculo do MDC recursivo : Torre de Hanoi recursivo : Natori - Imprimindo as fases da lua : Dhyanh - Saitou, aku, soku e zan : Exemplo de manipulação de lista simples em C : Exemplo de manipulação de lista encadeada em C : Funções para manipulação de listas : Função para pesquisa seqüencial : Função para pesquisa binária : Função BubbleSort : Função BubbleSort melhorado : Função Select...106

19 Lista de Programas XIX 8.4: Função Insert : Ordenação QuickSort : Ordenação MergeSort : Ordenação MergeSort : Representação com vetor de filhos : Representação dinâmica : Representação dinâmica de uma árvore binária : Implementação das operações...139

20 Lista de Tabelas 2.1: Operações com ponteiros : Operações com ponteiros de ponteiros : Cálculo de fatorial de : Entradas e freqüências para cálculo de comparações médias : BubbleSort - primeira varredura : BubbleSort - segunda varredura : Seleção - o que ocorre em cada passo : Inserção - o que ocorre em cada passo : Comparações para busca de um elemento...130

21 Lista de Algoritmos 1.1: Cálculo da posição de índices de um vetor na memória : Cálculo da posição de índices de uma matriz na memória : Verificação se a pilha está vazia (função EMPTY(S)) : Colocar um item na pilha (função PUSH(S,x)) : Retirada de um item da pilha (função POP(S)) : Pega o item do topo da pilha mas não desempilha (função STACKPOP(S)) : Tamanho da pilha (função SIZE(S)) : Inclusão de dados na fila (ENQUEUE(Q,x)) : Retirada de dados na fila (DEQUEUE(Q)) : Verificação se a fila está vazia (função EMPTY(Q)) : Tamanho da fila (função SIZE(Q)) : Próximo elemento da fila (função FRONT(Q)) : Algoritmo de Euclides : Passar n peças de uma torre (A) para outra (C) : Inserção numa lista duplamente encadeada : Remoção numa lista duplamente encadeada : Pesquisa seqüencial : Pesquisa seqüencial com ajuste de freqüência...97

22 XXII Estrutura de Dados com Algoritmos e C 7.3: Pesquisa binária : Ordenação Bubble : Ordenação por Seleção : Ordenação por Inserção : QuickSort : Particiona - Divisão do vetor : MergeSort : Intercala : MergeSort : Inserir elemento na árvore - iterativo : Inserir elemento na árvore - recursivo : Pesquisar elemento na árvore - iterativo : Pesquisar elemento na árvore - recursivo : Exclusão na árvore : Sucessor : Maior elemento da árvore : Menor elemento da árvore : Operação Percorre - Pré-ordem : Operação Percorre - Pós-ordem : Operação Percorre - Em-ordem...137

23 Lista de Figuras 1.1: Exemplo de Vetor : Representação de um vetor na memória : Matriz 2x2 - Cálculo de posição na memória : Cálculo de posição na memória : Exemplo de Matriz : Uma matriz de duas dimensões vista como dois vetores : Chamada de função com ponteiros : Vetor como Ponteiro em C : Registro de funcionário : Matriz como vetor de ponteiros : Exemplo de ponteiro na memória : Exemplo de ponteiro para ponteiro na memória : Exemplo de Pilha : Operações em uma pilha : Operações numa fila : Operações numa fila circular : Números triangulares : Descobrindo o quinto elemento triangular : Descobrindo o quinto elemento triangular de forma recursiva...65

24 XXIV Estrutura de Dados com Algoritmos e C 5.4: O que ocorre a cada chamada : Torre de Hanoi : Movimentos conforme algoritmo : Exemplo de lista simplesmente encadeada : Exemplo de lista duplamente encadeada : Inclusão de novo elemento : Exclusão de elemento : Problemática do crescimento do vetor : Crescimento de uma lista sem utilizar vetor : Processo de pesquisa seqüencial : Busca binária : Exemplo de Ordenação por Seleção com números inteiros : Exemplo de Ordenação por Inserção com números inteiros : Seqüência de ordenação por inserção : Algoritmo da ordenação por inserção : Ordenação QuickSort : Ordenação MergeSort : Ordenação MergeSort : Analogia entre árvores : Representação de uma árvore : Árvore Binária completa de nível : Árvore de busca binária - duas organizações diferentes : Exclusão de folha : Exclusão de um nó com um filho : Exclusão de um nó com dois filhos : Representação com vetores : Representação dinâmica...139

25 1. Estrutura de Dados Não existe vitória sem sacrifício! Filme Transformers Um computador é uma máquina que manipula informações. O estudo da ciência da computação inclui o exame da organização, manipulação e utilização destas informações num computador. Conseqüentemente, é muito importante entender os conceitos de organização e manipulação de informações. A automatização de tarefas é um aspecto marcante da sociedade moderna, e na ciência da computação houve um processo de desenvolvimento simultâneo e interativo de máquinas (hardware) e dos elementos que gerenciam a execução automática (software) de uma tarefa. Nesta grande evolução do mundo computacional, um fator de relevante importância é a forma de armazenar as informações, já que, informática é a ciência da informação. Então de nada adiantaria o grande desenvolvimento do hardware e do software se a forma de armazenamento e tratamento da informação não acompanhasse esse desenvolvimento. Por isso a importância das estruturas de dados, que nada mais são do que formas otimizadas de armazenamento e tratamento das informações eletronicamente. As estruturas de dados, na maioria dos casos, baseiam-se nos tipos de armazenamento vistos dia a dia, ou seja, nada mais são do que a transformação de uma forma de armazenamento já conhecida e utilizada no mundo real adaptada para o mundo computacional. Por isso, cada tipo de estrutura de dados possui vantagens e desvantagens e cada uma delas tem sua área de atuação (massa de dados) otimizada.

26 Estrutura de Dados com Algoritmos e C Os dados manipulados por um algoritmo podem possuir natureza distinta, isto é, podem ser números, letras, frases etc. Dependendo da natureza de um dado, algumas operações podem ou não fazer sentido quando aplicadas a eles. Por exemplo, não faz sentido falar em somar duas letras - algumas linguagens de programação permitem que ocorra a soma dos valores ASCII correspondentes de cada letra. Para poder distinguir dados de naturezas distintas e saber quais operações podem ser realizadas com eles, os algoritmos lidam com o conceito de tipo de dados. O tipo de um dado deine o conjunto de valores que uma variável pode assumir, bem como o conjunto de todas as operações que podem atuar sobre qualquer valor daquela variável. Por exemplo, uma variável do tipo inteiro pode assumir o conjunto de todos os números e de todas as operações que podem ser aplicadas a estes números. Os tipos de dados manipulados por um algoritmo podem ser classiicados em dois grupos: atômicos e complexos ou compostos. Os tipos atômicos são aqueles cujos elementos do conjunto de valores são indivisíveis, por exemplo: o tipo inteiro, real, caractere e lógico. Por outro lado, os tipos complexos são aqueles cujos elementos do conjunto de valores podem ser decompostos em partes mais simples. Se um tipo de dado pode ser decomposto, então o tipo de dado é dito estruturado, e a organização de cada componente e as relações entre eles constituem a disciplina de Estrutura de Dados. 1.1 Dados Homogêneos Uma estrutura de dados, que utiliza somente um tipo de dado, em sua deinição é conhecida como dados homogêneos. Variáveis compostas homogêneas correspondem a posições de memória, identiicadas por um mesmo nome, individualizado por índices e cujo conteúdo é composto do mesmo tipo. Sendo os vetores (também conhecidos como estruturas de dados unidimensionais) e as matrizes (estruturas de dados bidimensionais) os representantes dos dados homogêneos Vetor O vetor é uma estrutura de dados linear que necessita de somente um índice para que seus elementos sejam endereçados. É utilizado para armazenar uma lista de valores do mesmo tipo, ou seja, o tipo vetor permite armazenar mais de um valor em uma mesma variável. Um dado vetor é deinido como tendo um

27 Estrutura de Dados número ixo de células idênticas (seu conteúdo é dividido em posições). Cada célula armazena um e somente um dos valores de dados do vetor. Cada uma das células de um vetor possui seu próprio endereço, ou índice, através do qual pode ser referenciada. Nessa estrutura todos os elementos são do mesmo tipo, e cada um pode receber um valor diferente [, 1, 4]. Algumas características do tipo vetor([10]): Alocação estática (deve-se conhecer as dimensões da estrutura no momento da declaração) Estrutura homogênea Alocação seqüencial (bytes contíguos) Inserção/Exclusão Realocação dos elementos Posição de memória não liberada Figura 1.1: Exemplo de Vetor A partir do endereço do primeiro elemento é possível determinar a localização dos demais elementos do vetor. Isso é possível porque os elementos do vetor estão dispostos na memória um ao lado do outro e cada elemento tem o seu tamanho ixo (algoritmo 1.1 [10]). A partir do algoritmo 1.1 é possível deduzir a fórmula genérica para cálculo de posição na memória de um elemento qualquer. Sendo n o elemento, a fórmula se dá por Pos n = endereço Inicial + ( (n - 1) * tamanho do tipo do elemento).

28 4 Estrutura de Dados com Algoritmos e C Algoritmo 1.1: Cálculo da posição de índices de um vetor na memória A igura 1.1 mostra um vetor de notas de alunos, a referência NOTA[4] indica o valor 4.6 que se encontra na coluna indicada pelo índice 4. A deinição de um vetor em C se dá pela sintaxe: tipo_do_dado nome_do_vetor[ tamanho_do_vetor ] O programa 1.1 contém um exemplo de declaração de um vetor na linguagem C. A igura 1. apresenta a representação deste vetor na memória do computador (lembrando que um vetor é guardado na memória de forma seqüencial). 1 int i[]; i[0]=1; i[1]=; i[]=4; Programa 1.1: Declaração de vetor em C 6 char c[4]; c[0]= a ; c[1]= b ; c[]= c ; c[]= d ; Figura 1.2: Representação de um vetor na memória

29 Estrutura de Dados /* programa_vetor_01.c */ #include <stdio.h> Programa 1.2: Exemplo de uso de vetores #deine TAMANHO 10 int main (void) int iindice; int ivalora; int isoma; int avetor [TAMANHO]; loat fmedia; for (iindice = 0; iindice < TAMANHO; iindice++) printf("entre com o valor %d:", iindice + 1); scanf("%d", &ivalora); avetor[iindice] = ivalora; isoma = 0; for (iindice=0; iindice < TAMANHO; iindice++) isoma += avetor[iindice]; fmedia = (loat) isoma/tamanho; printf ("Media : %f\n", fmedia); return 0; Lembrete: Caso seja colocada num programa a instrução a[2]++ está sendo dito que a posição do vetor a será incrementada Matriz Uma matriz é um arranjo bidimensional ou multidimensional de alocação estática e seqüencial. A matriz é uma estrutura de dados que necessita de um índice para referenciar a linha e outro para referenciar a coluna para que seus elementos sejam endereçados. Da mesma forma que um vetor, uma matriz é deinida com um tamanho ixo, todos os elementos são do mesmo tipo, cada célula contém somente um valor e os tamanhos dos valores são os mesmos (em C, um char ocupa 1 byte e um int 4 bytes) [, 1, 4].

30 6 Estrutura de Dados com Algoritmos e C Os elementos ocupam posições contíguas na memória. A alocação dos elementos da matriz na memória pode ser feita colocando os elementos linha-porlinha ou coluna-por-coluna. Para uma matriz de 2x2 (igura 1.) o algoritmo para calcular as posições da memória é listado em 1. [10]. Figura 1.3: Matriz x - Cálculo de posição na memória No algoritmo 1., sendo C a quantidade de colunas por linhas, i o número da linha e j a posição do elemento dentro linha, é possível deinir a fórmula genérica para acesso na memória, onde Pos ij = endereço inicial + ((i-1) * C * tamanho do tipo do elemento) + ((j-1) * tamanho do tipo do elemento). A igura 1.4 demonstra a aplicação da fórmula. A matriz LETRAS (igura 1.) é composta de 18 elementos ( linhas e 6 colunas), a referência a MATRIZ[3][3] (onde o primeiro indica a linha e o segundo indica a coluna) retorna o elemento N ; no caso de MATRIZ[2][5] (segunda linha e terceira coluna) irá retornar o elemento E. Como é uma matriz de strings (linguagem C), a chamada a MATRIZ[3] irá reproduzir o valor DONALD. Algoritmo 1.2: Cálculo da posição de índices de uma matriz na memória

31 Estrutura de Dados Figura 1.4: Cálculo de posição na memória Uma matriz consiste de dois ou mais vetores deinidos por um conjunto de elementos. Cada dimensão de uma matriz é um vetor (igura 1.6). O primeiro conjunto (dimensão) é considerado o primeiro vetor, o segundo conjunto o segundo vetor e assim sucessivamente [4]. A deinição de uma matriz em C se dá pela sintaxe: tipo_do_dado nome_da_matriz[ quantidade_linhas ] [ quantidade_colunas ] O programa 1. apresenta um exemplo de declaração e utilização de matrizes bidimensionais na linguagem C. Figura 1.5: Exemplo de Matriz

32 8 Estrutura de Dados com Algoritmos e C Figura 1.6: Uma matriz de duas dimensões vista como dois vetores A linguagem C permite ainda trabalhar com matrizes de várias dimensões (matrizes n-dimensionais), embora o seu uso ique mais restrito em aplicações cientíicas face à sua pouca praticidade de uso. A deinição de uma matriz de várias dimensões em C se dá pela sintaxe: tipo_do_dado nome_da_matriz[tamanho_dimensão_1] [tamanho_ dimensão_2] [tamanho_dimensão_3]... [tamanho_dimensão_n]

33 Estrutura de Dados Programa 1.3: Exemplo de uso de matrizes /* programa_matriz_01.c */ #include <stdio.h> 4 #deine DIMENSAO int main (void) int ilinha, icoluna; int ideterminante; int ivalora; int amatriz [DIMENSAO][DIMENSAO /* Uma regra que se pode sempre levar em consideração: para cada dimensão de uma matriz, sempre haverá um laço (normalmente um for). Se houver duas dimensões, então haverá dois laços. */ for (ilinha=0; ilinha < DIMENSAO; ilinha++) for (icoluna=0; icoluna < DIMENSAO; icoluna++) printf ("Entre item %d %d:", ilinha + 1, icoluna + 1); scanf ("%d", &ivalora); matriz [ilinha][icoluna] = ivalora; ideterminante = amatriz[0][0] * amatriz [1][1] - amatriz[0][1] * amatriz [1][0]; printf ("Determinante : %d\n", ideterminante); return 0; O programa 1.4 é um exemplo de deinição e utilização de matrizes multidimensionais na linguagem C.

34 10 Estrutura de Dados com Algoritmos e C Programa 1.4: Exemplo de uso de matrizes com várias dimensões /* programa_matriz_02.c */ 4 #include <stdio.h> #deine DIM_1 #deine DIM_ #deine DIM_ #deine DIM_4 4 int main (void) int i,j,k,l; int amatriz [DIM_1][DIM_][DIM_][DIM_4]; 14 /* Código para zerar uma matriz de quatro dimensões */ for (i=0; i < DIM_1; i++) 1 4 for (j=0; j < DIM_; j++) for (k=0; k < DIM_; k++) for (l=0; l < DIM_4; l++) amatriz [i][j][k][l] = i+j+k+l; 4 44 /* Uma regra que se pode sempre levar em consideração: para cada dimensão de uma matriz, sempre haverá um laço (normalmente um for). Se houver quatro dimensoes então haverá quatro laços */ For (i=0; i < DIM_1; i++) for (j=0; j < DIM_; j++) for (k=0; k < DIM_; k++) for (l=0; l < DIM_4; l++) printf("\nvalor para matriz em [%d] [%d] [%d] [%d] = %d", i,j,k,l, amatriz[i][j][k][l]); return 0;

35 Estrutura de Dados Ponteiros A linguagem C implementa o conceito de ponteiro. O ponteiro é um tipo de dado como int, char ou loat. A diferença do ponteiro em relação aos outros tipos de dados é que uma variável que seja ponteiro guardará um endereço de memória [, ]. Por meio deste endereço pode-se acessar a informação, dizendo que a variável ponteiro aponta para uma posição de memória. O maior problema em relação ao ponteiro é entender quando se está trabalhando com o seu valor, ou seja, o endereço, e quando se está trabalhando com a informação apontada por ele. Operador & e * O primeiro operador de ponteiro é &. Ele é um operador unário que devolve o endereço na memória de seu operando. Por exemplo: m = &count; põe o endereço na memória da variável count em m. Esse endereço é a posição interna da variável na memória do computador e não tem nenhuma relação com o valor de count. O operador & tem como signiicado o endereço de. O segundo operador é *, que é o complemento de &. O * é um operador unário que devolve o valor da variável localizada no endereço que o segue. Por exemplo, se m contém o endereço da variável count: q = *m; coloca o valor de count em q. O operador * tem como signiicado no endereço de. Lembrete: Cuide-se para não confundir o operador de ponteiros (*) como multiplicação na utilização de ponteiros e vice-versa. A declaração de uma variável ponteiro é dada pela colocação de um asterisco (*) na frente de uma variável de qualquer tipo. Na linguagem C, é possível deinir ponteiros para os tipos básicos ou estruturas. A deinição de um ponteiro não reserva espaço de memória para o seu valor e sim para o seu conteúdo. Antes de utilizar um ponteiro, o mesmo deve ser inicializado, ou seja, deve ser colocado um endereço de memória válido para ser acessado posteriormente. Um ponteiro pode ser utilizado de duas maneiras distintas. Uma maneira é trabalhar com o endereço armazenado no ponteiro e outro modo é trabalhar com a área de memória apontada pelo ponteiro. Quando se quiser trabalhar com o endereço armazenado no ponteiro, utiliza-se o seu nome sem o asterisco na frente. Sendo assim qualquer operação realizada será feita no endereço do ponteiro. Como, na maioria dos casos, se deseja trabalhar com a memória apontada pelo ponteiro, alterando ou acessando este valor, deve-se colocar um asterisco

36 1 Estrutura de Dados com Algoritmos e C antes do nome do ponteiro. Sendo assim, qualquer operação realizada será feita no endereço de memória apontado pelo ponteiro. O programa 1. demostra a utilização de ponteiros para acesso à memória. 1 /* programa_matriz_02.c */ #include <stdio.h> Programa 1.5: Exemplo de uso de ponteiros 6 int main (void) int *pivalor; /* ponteiro para inteiro */ int ivariavel = 11 pivalor = &ivariavel; /* pegando o endereço de memória da variável */ printf ("Endereco: %d\n", pivalor); printf ("Valor : %d\n", *pivalor); *pivalor = ; printf ("Valor alterado: %d\n", ivariavel); printf ("Endereco : %d\n", pivalor); return 0; Passando variáveis para funções por referência O ponteiro é utilizado para passar variáveis por referência, ou seja, variáveis que podem ter seu conteúdo alterado por funções e mantêm este valor após o término da função. Na declaração de uma função, deve-se utilizar o asterisco antes do nome do parâmetro, indicando que está sendo mudado o valor naquele endereço passado como parâmetro. No programa 1.6 é visto um exemplo de uma variável sendo alterada por uma função (igura 1.).

37 Estrutura de Dados 1 Figura 1.7: Chamada de função com ponteiros Programa 1.6: Ponteiros como referência em funções /* programa_ponteiro_02.c */ #include <stdio.h> 4 void soma (int, int, int *); int main (void) int ivalora; int ivalorb; int iresultado; printf ("Entre com os valores:"); 14 scanf ("%d %d", &ivalora, &ivalorb); 1 4 printf("endereco de iresultado = %d\n", &iresultado); soma (ivalora, ivalorb, &iresultado);/* está sendo passado o endereço de memória da variável, qualquer alteração estará sendo realizada na memória */ printf ("Soma : %d\n", iresultado); return 0; 4 void soma (int pivalora, int pivalorb, int * piresultado) printf("endereco de piresultado = %d\n", piresultado); /* o valor está sendo colocado diretamente na memória */ *piresultado = pivalora + pivalorb; return;

38 14 Estrutura de Dados com Algoritmos e C Aritmética com ponteiros Com uma variável do tipo ponteiro, é possível realizar operações de soma e subtração. Será somada ou diminuída no ponteiro a quantidade de endereços de memória relativos ao tipo do ponteiro. Por exemplo, um ponteiro para int ocupa 4 bytes, uma operação de soma neste ponteiro irá acrescentar 4 posições (unidades) na memória. O programa 1. é visto como os endereços de memória são manipulados através de aritmética de ponteiros, e a diferença entre o tipo char - que ocupa 1 byte de memória - e o tipo int - que ocupa 4 bytes. /* programa_ponteiro_03.c */ #include <stdio.h> Programa 1.7: Aritmética com ponteiros 10 int main (void) int *pivalor; int ivalor; char *pcvalor; char cvalor; pivalor = &ivalor; pcvalor = &cvalor; 1 printf ("Endereco de pivalor = %d\n", pivalor); printf ("Endereco de pcvalor = %d\n", pcvalor); pivalor++; /* somando uma unidade (4 bytes) na memória */ pcvalor++; /* somando uma unidade (1 byte) na memória */ 0 printf ("Endereco de pivalor = %d\n", pivalor); printf ("Endereco de pcvalor = %d\n", pcvalor); return 0; Vetores e matrizes como ponteiros em C Vetores nada mais são do que ponteiros com alocação estática de memória, logo, todo vetor na linguagem C é um ponteiro, tal que o acesso aos índices do vetor podem ser realizados através de aritmética de ponteiros. Observe a igura 1.8:

Alocação dinâmica de memória

Alocação dinâmica de memória Alocação dinâmica de memória Jander Moreira 1 Primeiras palavras Na solução de problemas por meio algoritmos ou programas, é comum surgir a necessidade de manter todo o conjunto de dados a ser processado

Leia mais

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 1 PONTEIROS Prof. Yandre Maldonado e Gomes da Costa PONTEIROS Prof. Yandre Maldonado - 2 Ponteiro é uma variável que possui o endereço de outra variável; É um poderoso recurso

Leia mais

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Métodos Computacionais. Pilha

Métodos Computacionais. Pilha Métodos Computacionais Pilha Definição de Pilha Pilha é uma estrutura de dados dinâmica onde: Inserção e remoção de elementos no topo da pilha O primeiro elemento que sai é o último que entrou (LIFO) Operações

Leia mais

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C Edwar Saliba Júnior Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C Belo Horizonte 2010 Sumário 1 Nota:... 2 2 Comandos e Palavras Reservadas:... 3 3 Dicas... 4 3.1 Strings

Leia mais

INF1007: Programação 2 5 Tipos Estruturados. 05/03/2014 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 5 Tipos Estruturados. 05/03/2014 (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 5 Tipos Estruturados 05/03/2014 (c) Dept. Informática - PUC-Rio 1 Tópicos Tipo estrutura Definição de novos tipos Aninhamento de estruturas Vetores de estruturas Vetores de ponteiros

Leia mais

Aula 3 Alocação Dinâmica

Aula 3 Alocação Dinâmica Aula 3 Alocação Dinâmica Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas de Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno

Leia mais

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial Índice i Índice Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial 1. A Estrutura Abstrata de Dados Lista... 1 1.1. Definição... 1 1.2. Implementação de Listas utilizando armazenamento

Leia mais

Princípios de programação em Linguagem C Cesar Tadeu Pozzer UFSM 16/08/2010

Princípios de programação em Linguagem C Cesar Tadeu Pozzer UFSM 16/08/2010 Princípios de programação em Linguagem C Cesar Tadeu Pozzer UFSM 16/08/2010 Introdução a Programação em Linguagem C Antes de um algoritmo ser executado no computador, ele deve ser traduzido em uma linguagem

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 12 Cadeia de Caracteres (Strings) Edirlei Soares de Lima Caracteres Até o momento nós somente utilizamos variáveis que armazenam números (int, float ou

Leia mais

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu. Programação Estruturada Linguagem C Fundamentos da Linguagem Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Estrutura Básica Bibliotecas Básicas Tipos de Dados Básicos Variáveis/Declaração

Leia mais

Programação de Computadores I. Ponteiros

Programação de Computadores I. Ponteiros Ponteiros Prof. Edwar Saliba Júnior Outubro de 2012 Unidade 13 Ponteiros 1 Identificadores e Endereços Na linguagem C, uma declaração de variável faz associação entre um identificador e endereços de memória;

Leia mais

Primeiro Curso de Programação em C 3 a Edição

Primeiro Curso de Programação em C 3 a Edição Edson Luiz França Senne Primeiro Curso de Programação em C 3 a Edição Visual Books Sumário Prefácio da Terceira Edição 9 Prefácio da Primeira Edição 11 Aula 1 13 Regras de sintaxe de uma linguagem de programação...

Leia mais

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

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Operações com Strings Introdução a Ponteiros e Funções Profa Rosana Braga 1 Strings Strings são seqüências de caracteres

Leia mais

Figura 13.1: Um exemplo de árvore de diretório.

Figura 13.1: Um exemplo de árvore de diretório. 13. Árvores W. Celes e J. L. Rangel Nos capítulos anteriores examinamos as estruturas de dados que podem ser chamadas de unidimensionais ou lineares, como vetores e listas. A importância dessas estruturas

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Trabalho 3: Agenda de Tarefas

Trabalho 3: Agenda de Tarefas INF 1620 Estruturas de Dados Semestre 08.2 Trabalho 3: Agenda de Tarefas O objetivo deste trabalho é a implementação de um conjunto de funções para a manipulação de uma agenda de tarefas diárias, de forma

Leia mais

Universidade Estadual de Mato Grosso do Sul - Curso de Ciência da Computação Disciplina: Estruturas de Dados Profª. Raquel Marcia Müller

Universidade Estadual de Mato Grosso do Sul - Curso de Ciência da Computação Disciplina: Estruturas de Dados Profª. Raquel Marcia Müller 1 Listas Lineares Dentre as estruturas de dados não primitivas, as listas lineares são as de manipulação mais simples. Uma lista linear agrupa informações referentes a um conjunto de elementos que, de

Leia mais

2ª Lista de Exercícios

2ª Lista de Exercícios Universidade Federal de Minas Gerais Departamento de Ciência da Computação Algoritmos e Estruturas de Dados II (Turmas M, N, W, F) 1º Semestre de 2012 Profs. Camilo Oliveira, Gisele Pappa, Ítalo Cunha,

Leia mais

MC-102 Aula 17 Strings e Matrizes

MC-102 Aula 17 Strings e Matrizes MC-102 Aula 17 Strings e Matrizes Instituto de Computação Unicamp 5 de Maio de 2015 Roteiro 1 Strings Strings: Exemplos 2 Matrizes Exemplos com Matrizes 3 Exercícios (Instituto de Computação Unicamp) MC-102

Leia mais

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar e manipular dados em um computador Para representar um baralho precisamos: Representar cartas: naipe e valor struct

Leia mais

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II Universidade Federal do Vale do São Francisco Algoritmos e Estrutura de Dados II Professor: Marcelo Santos Linder E-mail: marcelo.linder@univasf.edu.br Ementa Árvores B, grafos e tabelas de hash: alocação

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Luiz Henrique Santos

Leia mais

Métodos Computacionais. Árvores

Métodos Computacionais. Árvores Métodos Computacionais Árvores Árvores Vetores e Listas são ótimos para representar estrutura de dados lineares, mas não para modelar dados hierárquicos Exemplos de dados hierárquicos: sistema de arquivos

Leia mais

Instituto de C. Linguagem C: Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.

Instituto de C. Linguagem C: Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti. Instituto de C Linguagem C: Filas Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Conceito de Filas Interface tipo fila Implementação

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

INF 1620 P1-10/04/02 Questão 1 Nome:

INF 1620 P1-10/04/02 Questão 1 Nome: INF 1620 P1-10/04/02 Questão 1 Considere uma disciplina que adota o seguinte critério de aprovação: os alunos fazem duas provas (P1 e P2) iniciais; se a média nessas duas provas for maior ou igual a 5.0,

Leia mais

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento 1/5 Exercício 1 Um sistema de segurança militar, usado num submarino nuclear, controla o acesso de usuários a três subsistemas (armamento, navegação e comunicações) através da digitação do login do usuário

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011 Estruturas de Dados Aula 11: TAD Pilha 09/05/2011 Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 3; Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 06 Tipos Estruturados Edirlei Soares de Lima Dados Compostos Até agora somente utilizamos tipos de dados simples: char, int, float, double. Muitas vezes

Leia mais

9. Estruturas em C Registros

9. Estruturas em C Registros 9. Estruturas em C Registros Unesp Campus de Guaratinguetá Curso: Programação de Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 1 9. Estrutura Até o presente momento os nossos dados eram armazenados

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 14 Árvores Binárias Edirlei Soares de Lima Árvores Uma estrutura de dados do tipo árvore permite que dados sejam organizados de maneira hierárquica.

Leia mais

Curso de Linguagem C

Curso de Linguagem C Curso de Linguagem C 1 Aula 1 - INTRODUÇÃO...4 AULA 2 - Primeiros Passos...5 O C é "Case Sensitive"...5 Dois Primeiros Programas...6 Introdução às Funções...7 Introdução Básica às Entradas e Saídas...

Leia mais

Funções e protótipos (declaração) de funções

Funções e protótipos (declaração) de funções Funções e protótipos (declaração) de funções Declaração de função tipo_de_retorno nome_da_função (declaração_de_parâmetros); onde o tipo-de-retorno, o nome-da-função e a declaração-de-parâmetros são os

Leia mais

17 - Funções e Procedimentos em C Programação Modular

17 - Funções e Procedimentos em C Programação Modular 17 - Funções e Procedimentos em C Programação Modular Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante 17

Leia mais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Estruturas de Dados Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos Árvores Conceitos Árvores binárias Árvores binárias de pesquisa Árvores binárias balanceadas Árvores ESTRUTURAS

Leia mais

Introdução a POO. Introdução a Linguagem C++ e POO

Introdução a POO. Introdução a Linguagem C++ e POO Introdução a POO Marcio Santi Linguagem C++ Introdução a Linguagem C++ e POO Programação Orientada a Objetos (POO) e C++ Recursos C++ não relacionados às classes Incompatibilidades entre C e C++ Classes

Leia mais

Curso de C para Engenharias

Curso de C para Engenharias Aula 4 Cristiano Dalbem Dennis Balreira Gabriel Moreira Miller Biazus Raphael Lupchinski Universidade Federal do Rio Grande do Sul Instituto de Informática Grupo PET Computação Sintaxe Funções Exemplos

Leia mais

Italo Valcy

Italo Valcy <italo@dcc.ufba.br> Programação C Módulo 01 Introdução à linguagem C Italo Valcy www.ieee.org/ufba Italo Valcy Programação em C Licença de uso e distribuição Todo o material aqui disponível pode, posteriormente,

Leia mais

Registros. Técnicas de Programação. Rafael Silva Guimarães :p://:p.ci.ifes.edu.br/informa@ca/rafael_guimaraes

Registros. Técnicas de Programação. Rafael Silva Guimarães :p://:p.ci.ifes.edu.br/informa@ca/rafael_guimaraes Rafael Silva Guimarães :p://:p.ci.ifes.edu.br/informa@ca/rafael_guimaraes Registros Técnicas de Programação Baseado no material do Prof. Rafael Vargas Mesquita Conceito de Registro (Struct) Vetores e Matrizes

Leia mais

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 10 Árvores Binárias (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Introdução Árvores binárias Representação em C Ordens de percurso em árvores binárias Altura de uma árvore

Leia mais

Árvores Binárias - continuação

Árvores Binárias - continuação Tópicos Avançados em Estrutura de Dados 6º Período Ciência da Computação Uma Aplicação de Árvores Binárias Árvores Binárias - continuação As árvore binárias são estruturas importantes toda vez que uma

Leia mais

EAD Árvore árvore binária

EAD Árvore árvore binária EAD Árvore árvore binária - Uma árvore binária é um conjunto finito de elementos (nodos) que pode ser vazio ou particionado em três subconjuntos: - raiz da árvore (elemento inicial, que é único); - subárvore

Leia mais

Algoritmos de Busca em Tabelas

Algoritmos de Busca em Tabelas Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas estão entre os mais usados. Considere por exemplo um sistema de banco de dados. As operações de busca e recuperação dos dados

Leia mais

10. Listas Encadeadas

10. Listas Encadeadas 10. Listas Encadeadas W. Celes e J. L. Rangel Para representarmos um grupo de dados, já vimos que podemos usar um vetor em C. O vetor é a forma mais primitiva de representar diversos elementos agrupados.

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 2 Linguagem C: Desenvolvida por Dennis Ritchie nos laboratórios da AT&T Bell (EUA) no início dos anos 70; Algol

Leia mais

Listas Duplamente Encadeadas

Listas Duplamente Encadeadas Listas Duplamente Encadeadas! quando for preciso seguir a seqüência de elementos em ambos os sentidos! cada nó possui dois ponteiros: ant e prox ant prox a b c d Início Fim 1 Listas Duplamente Encadeadas

Leia mais

Estruturas de Dados Pilhas, Filas e Deques

Estruturas de Dados Pilhas, Filas e Deques Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem

Leia mais

Apostila de Introdução à Linguagem C

Apostila de Introdução à Linguagem C Universidade Federal de Juiz de Fora Faculdade de Engenharia e Arquitetura Programa de Educação Tutorial Apostila de Introdução à Linguagem C Por Marcela Rocha Tortureli de Sá Bolsista do grupo PETCivil

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 8 Strings e Estruturas Susana M Iglesias 1 STRINGS - INTRODUÇÃO Strings (cadeia de caracteres): é uma serie de caracteres que podem ser tratados como uma unidade simples,

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação CP41F Conversão de tipos. Alocação dinâmica de memória. Recursão. Aula 16 Prof. Daniel Cavalcanti Jeronymo Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia de Computação

Leia mais

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores Introdução à Programação Armazenamento de Grande Quantidade de Informação Usando Vetores Armazenando Grande Quantidade de Informação Como armazenar tanta informação? Vetores! 2 Tópicos da Aula Hoje, aprenderemos

Leia mais

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

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra CES-11 Pilhas Filas Deques Pilhas,,f filas e deques Vimos que as listas lineares admitem inserção e eliminação

Leia mais

Estruturas II UFOP 1/1

Estruturas II UFOP 1/1 BCC 201 - Introdução à Programação I Estruturas II Guillermo Cámara-Chávez UFOP 1/1 Conceito de struct I Vetores e matrizes Estruturas de dados homegêneas Armazenam vários valores, mas todos de um mesmo

Leia mais

Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível

Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível 95 Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível 96 Aplicação dos conceitos de programação orientada a objeto em linguagens de alto nível Nesta etapa estudaremos

Leia mais

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: Introdução à Programação Carga horária total: 60 Carga horária teórica: 0 Carga horária prática: 60 Código da Disciplina: CCMP0041 Período de oferta: 2010.2 Turma: CA

Leia mais

Funções recursivas. O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); }

Funções recursivas. O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); } Funções Recursivas Funções recursivas O exemplo mais comum: int fat(int n){ if(n == 0) return 1; return n*fat(n-1); Versão sem recursão: int fat(int n){ int i = 0; int f = 1; for(i=1; i

Leia mais

Árvores. Seqüência de arcos, com origem na raiz e final em um determinado nó. Quantos caminhos existem para se atingir um determinado nó?

Árvores. Seqüência de arcos, com origem na raiz e final em um determinado nó. Quantos caminhos existem para se atingir um determinado nó? 39 Árvores Conceitue caminho. Seqüência de arcos, com origem na raiz e final em um determinado nó. Quantos caminhos existem para se atingir um determinado nó? Apenas um. O que determina o tamanho de um

Leia mais

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1 Estrutura de Dados Introdução a Ponteiros Prof. Gerson Borges Estrutura de Dados I 1 Sumário è Explicação da importância do planejamento de ensino; è Métodos e técnicas que iremos trabalhar durante o semestre;

Leia mais

Pilhas. Profa Morganna Diniz

Pilhas. Profa Morganna Diniz Pilhas Profa Morganna Diniz Pilhas Geralmente pilhas são úteis em situações em que dados devem ser recuperados em ordem inversa a do armazenamento É uma estrutura de dados linear que permite acesso por

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

Arquivos. Estruturas de Dados II Vanessa Braganholo

Arquivos. Estruturas de Dados II Vanessa Braganholo Arquivos Estruturas de Dados II Vanessa Braganholo Entidades } Aplicações precisam armazenar dados sobre as mais diversas entidades, que podem ser concretas ou abstratas } Funcionário de uma empresa (concreto)

Leia mais

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2 FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Projeto e Análise de Algoritmos II Lista de Exercícios 2 Prof. Osvaldo. 1. Desenvolva algoritmos para as operações abaixo e calcule a complexidade

Leia mais

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS Disciplina de Nivelamento - 2000/1: ALGORITMOS & ESTRUTURAS DE DADOS Professor Responsável: Prof. Fernando Santos

Leia mais

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO Tópicos Estrutura Básica B de Programas C e C++ Tipos de Dados Variáveis Strings Entrada e Saída de Dados no C e C++ INTRODUÇÃO O C++ aceita

Leia mais

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05 IFTO LÓGICA DE PROGRAMAÇÃO AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia Elétrica / UnB http://lab.ifto.edu.br/~mcampos http://manoelcampos.com

Leia mais

Introdução a C Tipos de Dados Variáveis Operadores

Introdução a C Tipos de Dados Variáveis Operadores Introdução a C Tipos de Dados Variáveis Operadores INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 introdução a C tópicos ciclo de desenvolvimento sistemas numéricos tipos de

Leia mais

1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2

1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2 Índice i Índice Capítulo 4 Estrutura de Dados não sequencial com armazenamento não sequencial ( Árvore ) 1. Introdução... 1 1.1. Definição... 1 1.2. Conceitos relacionados... 2 2. Árvores binárias... 2

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Introdução No capítulo anterior verificamos que a execução seqüencial dos comandos da função main nos limita a programação de algoritmos muito simples. Passamos, então, a dedicar

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme AULA 2: INTRODUÇÃO A LINGUAGEM DE C Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme Agenda Introdução a linguagem C Compiladores Variáveis IDEs Exemplos Exercícios Introdução A Linguagem C

Leia mais

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais. Linguagem C Matrizes Objetivos Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais. Definição de Matrizes em Linguagem C As matrizes em geral são

Leia mais

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 05 Cadeias de Caracteres Edirlei Soares de Lima Caracteres Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência

Leia mais

Curso de C: uma breve introdução

Curso de C: uma breve introdução V Semana de Engenharia Elétrica - UFBA Licença de uso e distribuição Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da: Creative Commons License:

Leia mais

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: INTRODUÇÃO À PROGRAMAÇÃO Carga horária total: 60 h Carga horária teórica: 30 h Carga horária prática: 30 h Código da Disciplina: CCMP0041 Período de oferta: 2015.2 Turma:

Leia mais

LINGUAGEM C: DESCOMPLICADA. Prof. André R. Backes

LINGUAGEM C: DESCOMPLICADA. Prof. André R. Backes LINGUAGEM C: DESCOMPLICADA Prof. André R. Backes 1 COMANDOS DE CONTROLE CONDICIONAL Os programas escritos até o momento são programas sequeciais: um comando é executado após o outro, do começo ao fim do

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1 14. Arquivos W. Celes e J. L. Rangel Neste capítulo, apresentaremos alguns conceitos básicos sobre arquivos, e alguns detalhes da forma de tratamento de arquivos em disco na linguagem C. A finalidade desta

Leia mais

Apostila de Estruturas de Dados

Apostila de Estruturas de Dados Apostila de Estruturas de Dados Profs. Waldemar Celes e José Lucas Rangel PUC-RIO - Curso de Engenharia - 2002 Apresentação A disciplina de Estruturas de Dados (ED) está sendo ministrada em sua nova versão

Leia mais

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipo de dados, tipo abstrato de dados, estruturas de dados Termos parecidos, mas com significados diferentes Tipo de dado Em linguagens de programação

Leia mais

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

system(pause); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa Atividade Prática no Ambiente Dev C++ Para as nossas atividades práticas vamos utilizar o ambiente de desenvolvimento da Linguagem C, Dev C++, ele é bastante fácil de utilizar e com muitos recursos. Segue

Leia mais

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza Introdução Manipulação de arquivos em C Estrutura de Dados II Prof Jairo Francisco de Souza Manipulação de Arquivo em C Existem dois tipos possíveis de acesso a arquivos na linguagem C : sequencial (lendo

Leia mais

struct LISTA item quant

struct LISTA item quant UNIVERSIDADE SÃO JUDAS TADEU ESTRUTURA DE DADOS - PROF. H. Senger IMPLEMENTAÇÃO DE LISTAS COM VETORES A implementação de listas utilizando vetores é simples. Existe apenas uma pequena questão, com relação

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Linguagem C: Árvores Binarias

Linguagem C: Árvores Binarias Instituto de C Linguagem C: Árvores Binarias Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Introdução Árvores binárias Implementação

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char **

Leia mais