prof.: sergio pacheco estruturas de dados i prof.: sergio pacheco 1

21
Prof.: Sergio Pacheco Estruturas de Estruturas de Dados I Dados I Prof.: Sergio Pacheco 1

Upload: internet

Post on 17-Apr-2015

112 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Estruturas de Dados IEstruturas de Dados I

Prof.: Sergio Pacheco

1

Page 2: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco2

Tipos Struturas;Exercício;

SumárioSumário

Page 3: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo EstruturasTipo Estruturas

3

Page 4: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo EstruturasTipo Estruturas

4

Tipo de dado com campos compostos de tipos mais simples;

elementos acessados através do operador de acesso “ponto” (.);

Uma estrutura deve ser declarada após incluir as bibliotecas e antes da função main.

Page 5: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo EstruturasTipo Estruturas

5

Page 6: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo Estruturas - ExemploTipo Estruturas - Exemplo

6

Page 7: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo Estruturas – Exemplo Tipo Estruturas – Exemplo fflushfflush

7

void cad_condenado() { system ("cls"); printf ("Inserir dados\n"); printf("\n"); printf (" Nome: "); fflush(stdin); fgets (nome,31,stdin); printf(“\n"); printf ("\n Idade: "); scanf ("%d", &idade); }

Page 8: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Tipo Estruturas - Listas Tipo Estruturas - Listas EncadeadasEncadeadas

8

Seqüência encadeada de elementos, chamados de nós da lista;

E são representados por 2 campos:Um relacionado a informação armazenada;Outro para o próximo nó da lista.

Page 9: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Estrutura - Lista encadeadaEstrutura - Lista encadeada

9

Não podemos garantir que os elementos armazenados na lista ocuparão um espaço de memória contíguo, portanto não temos acesso direto aos elementos da lista.

Para que seja possível percorrer todos os elementos da lista, devemos explicitamente guardar o encadeamento dos elementos.

Page 10: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Estrutura - Lista encadeadaEstrutura - Lista encadeada

10

Trata-se de uma estrutura auto-referenciada.

Page 11: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Estrutura - Lista encadeadaEstrutura - Lista encadeada

11

Em C oferece outro operador de acesso, que permite acessar campos a partir do ponteiro da estrutura. Este operador é composto por um traço seguido de um sinal de maior, formando uma seta ( ->).

Em resumo, se temos uma variável estrutura e queremos acessar seus campos, usamos o operador de acesso ponto (p.x ); se temos uma variável ponteiro para estrutura, usamos o operador de acesso seta (pp->x). Seguindo o raciocínio, se temos o ponteiro e queremos acessar o endereço de um campo, fazemos &pp->x. pp->x = 12.0;

Page 12: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Estrutura - Lista encadeadaEstrutura - Lista encadeada

12

Passagem de estruturas para funções

void imprime (struct ponto p) {

printf("O ponto fornecido foi: (%.2f,%.2f)\n", p.x, p.y);

}

Problema : Cópia de toda a estrutura para a pilha:Passagem por Valor : A função não tem como alterar os valores dos elementos da estrutura original;

É mais conveniente passar apenas o ponteiro da estrutura, mesmo que não seja necessário alterar os valores dos elementos dentro da função.

Page 13: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada - Lista encadeada - InicializaçãoInicialização

13

A função que inicializa uma lista deve criar uma lista vazia, sem nenhum elemento;

Uma lista vazia é representada pelo ponteiro NULL. A função responsável por inicializar lista vazia, deve retornar NULL, ou seja, return Null .

/* função de inicialização: retorna uma lista vazia */

Lista* inicializa (void){ return NULL;}

Page 14: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada - InserçãoLista encadeada - Inserção

14

Uma vez criada a lista vazia, podemos inserir novos elementos nela;

Para cada elemento inserido na lista, devemos alocar dinamicamente a memória necessária para armazenar o elemento e encadeá-lo na lista existente.

/* inserção no início: retorna a lista atualizada */Lista* insere (Lista* l, int i){ Lista* novo = (Lista*) malloc(sizeof(Lista)); novo->info = i; novo->prox = l; return novo;}

Page 15: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada – Verifica se a Lista encadeada – Verifica se a Lista vaziaLista vazia

15

Função que verifique se uma lista está vazia ou não; Deve-se para isso incluir a biblioteca #include <stdbool.h>.

/* função vazia: retorna true se vazia ou false se não vazia */

bool vazia (Lista* l){ if (l == NULL) return true; else return false;}

Por que não precisa verificar se a lista está cheia na hora da inserção.

Page 16: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada – ExercícioLista encadeada – Exercício

16

Montar as funções mostradas e montar um único arquivo.c; Desenhar, com o intuito de mostrar por onde estão sendo

as inserções de novos nós; Criar um função para procurar um item na lista, o programa

deverá emitir a Msg elemento encontrado ou não; Alterar o código anterior para que o usuário possa interagir

com a inserção de novos nós (inclusão de um menu). Arquivo.c

Page 17: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada – ExercícioLista encadeada – Exercício

17

A função para retirar um elemento da lista é mais complexa; Verificar a posição do nó a ser retirado; Não podemos perder a referência

Page 18: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada – ExercícioLista encadeada – Exercício

18

Montar as funções mostradas e montar um único arquivo.c; Desenhar, com o intuito de mostrar por onde estão sendo

as inserções de novos nós; Criar um função para procurar um item na lista, o programa

deverá emitir a Msg elemento encontrado ou não; Alterar o código anterior para que o usuário possa interagir

com a inserção de novos nós (inclusão de um menu). Arquivo.c

Page 19: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco19

Lista encadeada – RetirarLista encadeada – Retirar

}

Page 20: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco

Lista encadeada – ExercícioLista encadeada – Exercício

20

Inserir no código a função de retirar um item da lista. Arquivo.c

Page 21: Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1

Prof.: Sergio Pacheco21

(

Bom final de semana e até semana que vem !!!

Deus abençoe a todos.