Universidade de Brasília

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Marco Antonio Montebello Júnior
TECNOLOGIA EM REDES DE COMPUTADORES Algoritmos e programação de computadores Aula /08/2011 Professor Leomir J. Borba-
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Alocação Dinâmica de Memória
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem C Strings.
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Slides: Prof. João Fabro UTFPR - Curitiba
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Ponteiros.
Lista Encadeada Circular Lista Duplamente Encadeada
Escola Secundária c/ 3º CEB da Batalha
Tratamento de Ficheiros
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
Apontadores ou Ponteiros
Alocação Dinâmica de Memória
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
exercícios listas encadeadas
Alocação Dinâmica de Memória Professor Mário Dantas
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Alocação Dinâmica de Memória
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
Seminário 1: Revisão de C
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Estruturas (struct) Marco Antonio Montebello Júnior Estruturas de Dados.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 17: Estruturas Genéricas
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Prof. Alessandro Gonçalves
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Ponteiros em C Prof. Kariston Pereira
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Universidade de Brasília Departamento de Ciência da Computação Curso C: Estruturas Prof. Ricardo Pezzuol Jacobi rjacobi@cic.unb.br Linguagem C Ricardo Jacobi

Estruturas Struct são coleções de dados heterogêneos agrupados em uma mesma estrutura de dados Ex: armazenas as coordenadas (x,y) de um ponto: Linguagem C Ricardo Jacobi

Estruturas Declaração: a estrutura contém dois inteiros, x e y struct { int x; int y; } p1, p2; a estrutura contém dois inteiros, x e y p1 e p2 são duas variáveis tipo struct contendo duas coordenadas cada. Linguagem C Ricardo Jacobi

Declaração Formato da declaração: struct nome_da_estrutura { tipo_1 dado_1; tipo_2 dado_2; ... tipo_n dado_n; } lista_de_variaveis; A estrutura pode agrupar um número arbitrário de dados de tipos diferentes Pode-se nomear a estrutura para referencia-la Linguagem C Ricardo Jacobi

Nomeando uma Estrutura struct { int x; int y; } p1; } p2; struct ponto define um novo tipo de dado struct ponto { int x; int y; }; struct ponto p1, p2; Repetição Pode-se definir novas variáveis do tipo ponto Linguagem C Ricardo Jacobi

Estruturas acesso aos dados: Ex: struct-var.campo p1.x = 10; /*atribuição */ p2.y = 15; if (p1.x >= p2.x) && (p1.y >= p2.y) ... Linguagem C Ricardo Jacobi

Atribuição de Estruturas Inicialização de uma estrutura: struct ponto p1 = { 220, 110 }; Atribuição entre estruturas do mesmo tipo: struct ponto p2; p2 = p1; /* p2.x = p1.x e p2.x = p1.y */ Os campos correspondentes das estruturas são automaticamente copiados do destino para a fonte Linguagem C Ricardo Jacobi

Atribuição de Estruturas Atenção para estruturas que contenham ponteiros: struct aluno { char *nome; int idade; } a1, a2; a1.nome = “Afranio”; a1.idade = 32; a2 = a1; Agora a1 e a2 apontam para o mesmo string nome: a1.nome == a2.nome == “Afranio” Linguagem C Ricardo Jacobi

Composição de Estruturas struct retangulo { struct ponto inicio; struct ponto fim; }; struct retangulo r = { { 10, 20 }, { 30 , 40 } }; Acesso aos dados: r.inicio.x += 10; r.inicio.y -= 10; Linguagem C Ricardo Jacobi

Estruturas como parâmetros struct ponto cria_ponto (int x, int y) { struct ponto tmp; tmp.x = x; tmp.y = y; return tmp; } main () { struct ponto p = cria_ponto(10, 20); Linguagem C Ricardo Jacobi

Operações operações entre membros das estruturas devem ser feitas membro a membro: /* retorna uma cópia de p1 = p1 + p2 */ struct soma_pts (struct ponto p1, struct ponto p2) { p1.x += p2.x; p1.y += p2.y; return p1; /* retorna uma copia de p1 */ } Linguagem C Ricardo Jacobi

Ponteiros para Estruturas estruturas grandes são passadas como parâmetro de forma mais eficiente através de ponteiros struct ponto *pp; struct ponto p1 = { 10, 20 }; pp = &p1; printf(“Ponto P1: (%d %d)\n”, (*pp).x, (*pp).y}; acesso via operador “->”: printf(“Ponto P1: (%d %d)\n”, pp->x, pp->y}; Linguagem C Ricardo Jacobi

Arrays de Estruturas struct ponto arp[10]; /* cria um array de 10 pontos */ arp[1].x = 5; /*atribui 5 a coordenada x do 2º ponto */ struct jogador { char *nome; int idade; }; struct jogador Brasil[11] = { “Felix”, 32, “Carlos Alberto”, 24, ... Linguagem C Ricardo Jacobi

Espaço Alocado para um Estrutura struct aluno { char *nome; /* ponteiro 4 bytes */ short idade; /* 2 bytes */ char matricula[8]; /* array 8 bytes */ }; struct aluno al; al.nome = “Xexeo”; al.idade = 30; strcpy(al.matricula, “00/0001”); Linguagem C Ricardo Jacobi

Função sizeof(tipo) A função sizeof(tipo) retorna o tamanho em bytes ocupado em memória pelo tipo de dado passado como parâmetro Ex: sizeof(int) => 4 bytes sizeof(char) => 1 byte sizeof(struct ponto) => 8 bytes sizeof(struct ponto *) => 4 bytes Linguagem C Ricardo Jacobi

Espaço Efetivo /* teste com Symantec C, PowerPC 603 - Macintosh */ struct aluno { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[3]; /* 3 bytes */ }; /* sizeof(aluno) = 12 bytes */ Linguagem C Ricardo Jacobi

Espaço Efetivo /* teste com Symantec C, PowerPC 603 - Macintosh */ struct aluno1 { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[5]; /* 5 bytes */ }; /* sizeof(aluno1) = 12 bytes */ Linguagem C Ricardo Jacobi

Espaço Efetivo /* teste com Symantec C, PowerPC 603 - Macintosh */ struct aluno2 { char *nome; /* 4 bytes */ short idade; /* 2 bytes */ char matricula[7]; /* 7 bytes */ }; /* sizeof(aluno2) = 16 bytes */ no PowerMac uma estrutura é um múltipo do tamanho da palavra, 32 bits Linguagem C Ricardo Jacobi

Alocação Dinâmica de Memória as funções calloc e malloc permitem alocar blocos de memória em tempo de execução void * malloc( ); /* retorna um ponteiro void para n bytes de memória não iniciados. Se não há memória disponível malloc retorna NULL */ size_t n número de bytes alocados Linguagem C Ricardo Jacobi

Alocação Dinâmica de Memória void * calloc(size_t n, size_t size); /* calloc retorna um ponteiro para um array com n elementos de tamanho size cada um ou NULL se não houver memória disponível. Os elementos são iniciados em zero */ o ponteiro retornado por malloc e calloc deve ser convertido para o tipo de ponteiro que invoca a função: Linguagem C Ricardo Jacobi

Alocação Dinâmica de Memória int *pi = (int *) malloc (sizeof(int)); /* aloca espaço para um inteiro */ int *ai = (int *) calloc (n, sizeof(int)); /* aloca espaço para um array de n inteiros */ toda memória não mais utilizada deve ser liberada através da função free(): free(ai); /* libera todo o array */ free(pi); /* libera o inteiro alocado */ Linguagem C Ricardo Jacobi

Estrutras Autoreferenciadas É possível definir dentro de uma estrutura um ponteiro para a própria estrutura: struct Qualquer { tipo_dado_1 dado_1; ... struct Qualquer *proximo; } próximo aponta para uma estrutura do mesmo tipo Linguagem C Ricardo Jacobi

Lista de Inteiros Exemplo: lista encadeada de inteiros. raiz é um ponteiro para o primeiro nodo da lista. struct IntNode { int dado; struct IntNode *proximo; } *raiz; raiz = (IntNode *)malloc(sizeof(IntNode)); raiz->dado = 7; raiz->proximo = NULL; 7 raiz Linguagem C Ricardo Jacobi

Lista de Inteiros Inserindo elementos na lista: IntNode *pnode; pnode = (IntNode *)malloc(sizeof(IntNode)); pnode->dado = 11; pnode->proximo = NULL ; /*terminador de lista*/ raiz->proximo = pnode; 7 * 11 raiz Linguagem C Ricardo Jacobi

Percorrendo a Lista Percorre-se uma lista encadeada por meio de um ponteiro: ... IntNode *pnode; pnode = raiz; while (pnode != NULL) { printf(“%d “, pnode->dado); pnode = pnode->proximo; } Linguagem C Ricardo Jacobi

Insere Nodo struct IntNode *insere_int (int i, struct IntNode *pinicio) { struct IntNode *pi; pi=(struct IntNode *)malloc(sizeof(struct IntNode)); if (pi) { pi->dado = i; pi->proximo = pinicio; } return pi; Linguagem C Ricardo Jacobi

Print Lista void print_list (struct IntNode *pi) { printf("\nLista = "); while (pi) { printf (" %d ", pi->dado); pi = pi->proximo; } Linguagem C Ricardo Jacobi

Lista de Alunos struct aluno { char *nome; short idade; char matricula[8]; struct aluno *prox; }; struct aluno *ListaAlunos; /* variavel global */ Linguagem C Ricardo Jacobi

Insere Aluno int insere_aluno (char *n, short id, char *m) { struct aluno *pa; pa = (struct aluno *)malloc(sizeof(struct aluno)); pa->nome = n; pa->idade = id; strcpy(pa->matricula, m); pa->prox = ListaAlunos; ListaAlunos = pa; } Linguagem C Ricardo Jacobi

Criação Lista Alunos void main () { insere_aluno(“Castor”, 56, “0001/90”); insere_aluno(“Genoveva”, 62, “0002/90”); insere_aluno(“Abriola”, 97, “0007/66”); } Linguagem C Ricardo Jacobi

Esvaziando a Lista /* esvazia a lista */ void esvazia_lista () { struct aluno *tmp; while (ListaAlunos != NULL) { tmp = ListaAlunos ; ListaAlunos = lista->prox; free(tmp); } Linguagem C Ricardo Jacobi

Impressão Recursiva void imprimeRec ( aluno *lista ) { if ( lista != NULL ) { printf (“Aluno: %s \n”, lista->nome); imprimeRec (lista->prox); } Linguagem C Ricardo Jacobi