tecnologia em anÁlise e desenvolvimento de sistemas estruturas de dados avanÇadas aula 5 1...

14
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

ESTRUTURAS DE DADOS AVANÇADASAula 5

105/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 2: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

AgendaCorreção exercícios aula 6Revisão aula anteriorProjeto e comparação de estrutura de dados

relacionados e algoritmos relacionados Ponteiros Alocação de memória e matrizes como ponteiros

PilhaBibliografia

205/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 3: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Correção exercícios aula 6/* programa_vetor_01.c */#include <stdio.h> #define TAMANHO 5int main (void){int iIndice;int iValorA;int iSoma;int aVetor [TAMANHO];float 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 = (float) iSoma/TAMANHO;printf ("Media : %f\n", fMedia);return 0;}

305/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 4: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Correção exercícios aula 6/* programa_memoria_01.c */#include <stdio.h>#include <stdlib.h>int main(void){int *p;int i,k, n;printf("\nDigite a quantidade de numeros que serao digitados ->");scanf("%d", &i);

/* A função malloc reserva espaço suiciente para um vetor de inteiros.Caso sejam digitados 5 elementos, serão reservados 20 bytes, pois cadainteiro ocupa 4 bytes na memória */p = (int *)(malloc(i*sizeof(int)));if( p == NULL ){printf("\nErro de alocacao de memoria");exit(1);}

for( k=0;k<i;k++){printf("Digite o numero para o indice %d ->", k);scanf("%d", &p[k]);}for( k=0;k<i;k++){printf("O numero do indice %d eh %d\n", k, p[k]);}

printf("\nDigite quantos elementos quer adicionar ao vetor ->");scanf("%d", &n

/* A função realloc aumenta ou diminui o tamanho do vetor dinamicamente. Ela recebe oponteiro para o vetor anterior e retorna o novo espaço alocado. */p = (int *)(realloc(p,(i+n)*sizeof(int)));if( p == NULL ){printf("\nErro de re-alocacao de memoria");exit(1);}for(;k<(n+i);k++)}{printf("Digite o numero para o indice %d ->", k);scanf("%d", &p[k]);}for( k=0;k<(i+n);k++){printf("O numero do indice %d eh %d\n", k, p[k]);}free(p);return 0;}

405/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 5: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Correção exercícios aula 6 /* programa_memoria_02.c */#include <stdio.h>#include <stdlib.h>int main(void){/* A declaração de uma matriz de 2 dimensões exige um ponteiro para ponteiro. */int **p;int i,j,k,x;printf("\nDigite as dimensoes da matriz ->");scanf("%d %d", &i, &j);/* Alocação da primeira dimensão. Internamente, a função calloc fará uma multiplicação daquantidade de elementos pelo tamanho de cada elemento para saber quanto de memóriadeve ser alocada. */p = calloc(i,sizeof(int));if( p == NULL ){printf("\nErro de alocacao de memoria");exit(1);}for( k=0;k<i;k++){/* Alocação das linhas de cada coluna (segunda dimensão) */p[k] = calloc(j,sizeof(int));if( p[k] == NULL ){

printf("\nErro de alocacao de memoria");exit(1);

}}

for( k=0;k<i;k++){ for(x=0;x<j;x++){printf("Digite o numero para o indice %d,%d ->", k,x);scanf("%d", &p[k][x]);}}for( k=0;k<i;k++){for(x=0;x<j;x++){printf("O numero do indice %d,%d eh %d\n", k,x, p[k][x]);}}printf("\nLiberando memoria alocada");for( k=0;k<i;k++){free(p[k]); /* Primeiro deve ser liberada a memória para linha da matriz... */}free(p); /* ... para depois liberar a memória do vetor que continha as linhas. */}

505/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 6: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Revisão aula 6

605/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

• Estrutura de Dados– Dados Homogêneos

• Vetor ; Matriz

– Dados Heterogêneos• Registro

– Uso de Memória em C• Alocação Estática x Dinamica

Page 7: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Ponteiros

705/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Tipo de dados implementado por C para guardar endereço de memória e acessar informação.

Deve-se entender quando esta trabalhando com o endereço de memória e quando esta trabalhando com a informação

Operadores & e * Passa variáveis para funções por referencia Aritmética com ponteiros Vetores e Matrizes como ponteiros em C Ponteiro para Ponteiro

Page 8: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Alocação de memória e matrizes como ponteiros

805/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

• Matriz deve ser declarada usando formato de ponteiro, o pnteiro que representa a matriz pode ser utlizado no formato matriz[linha][coluna]

1/* programa_memoria_04.c */#include <stdio.h>#include <stdlib.h>int ** aloca(int i, int j);void libera(int **p, int i, int j);void leitura(int **p, int i, int j);void imprime(int **p, int i, int j);int main(void){int **p;int **p1;p = aloca( , );leitura(p, , );p1 = aloca( , );leitura(p1, , ); imprime(p, , );imprime(p1, , );libera(p, , );libera(p1, , );

return 0;}

/* 2 asteriscos (*) indicam que será retornada uma matriz */int ** aloca(int i, int j){/* ponteiro de ponteiro. Indica que será alocada uma matriz de 2 dimensões */int **p;int x;p = calloc(i,sizeof(int)); /* alocação de linhas... */if( p == NULL ){printf("\nErro de alocacao");exit(-1);

Page 9: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Pilha

905/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Uma pilha é um conjunto ordenado de itens, no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados itens de uma extremidade, chamada topo da pilha. Também é chamada de lista linear, onde todas as inserções e eliminações são feitas em apenas uma das extremidades, chamada topo

Page 10: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Pilha

1005/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Metodos e funções push - coloca uma informação na pilha (empilha). pop - retira uma informação da pilha (desempilha). size - retorna o tamanho da pilha. stackpop - retorna o elemento superior da pilha sem removê-lo

(equivalente às operações de pop e um push). empty - veriica se a pilha está vazia.

Aplicação frequente em compiladores e S.O para controle de dados, alocação de variaveis.

Page 11: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Pilha

1105/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Representação em algoritimo.

Page 12: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Pilha

1205/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Representação em C – Pilha é um conjunto ordenado itens, na linguagem C o tipo de dado que a representa é o vetor.

Representação de métodos e funções de pilhas em algoritmos

Page 13: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Pilha

1305/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com

Page 14: TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula 5 1 05/08/2011 Professor Leomir J. Borba- professor.leomir@gmail.com

Bibliografia

05/08/2011 Professor Leomir J. Borba- [email protected] –http://professorleomir.wordpress.com 14

BIBLIOGRAFIA BÁSICA

1AZEREDO, Paulo A. Métodos de Classificação de Dados. Rio de Janeiro: Ed. Campus, 1996.

2LAUREANO, M. Estrutura de Dados com Algoritmos e C. 1ª Ed. São Paulo: Brasport, 2008.

3PEREIRA, Silvio do Lago. Estruturas de Dados Fundamentais – Conceitos e Aplicações. 7.ed. São Paulo: Érica, 2008.

BIBLIOGRAFIA COMPLEMENTAR

4KOFFMANN, E.B. Objetos, Abstração, Estrutura de Dados e Projetos. 1ª Ed. Rio de Janeiro: LTC, 2008.

5MORAES, Celso Roberto. Estruturas de Dados e Algoritmos.Uma abordagem didática. Edição revista e Ampliada. São Paulo: Editora Futura, 2003.

6WIRTH, Niklaus. Algoritmos e estruturas de dados. Rio de Janeiro: Prentice Hall do Brasil, 1989.

7ZIVIANI, N. Projeto de Algoritmos com implementações em Pascal e C , Editora Pioneira, 1999.