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.

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Listas Prof. Rodrigo Rocha
Advertisements

Estruturas de Dados Árvores Binárias
Recursividade Prof. Rosana Palazon.
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
Listas duplamente encadeadas
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária – Árvores de Busca
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Universidade de Brasília
Slides: Prof. João Fabro UTFPR - Curitiba
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Alocação Dinâmica de Memória
Listas Simplesmente Encadeadas
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Pesquisa em Memória Primária
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
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.
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
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.
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Listas Simplesmente Encadeadas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
Prof. Alessandro Gonçalves
Prof. Hilton Cardoso Marins Junior
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Introdução a Árvores e Árvores Binárias
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
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.
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.
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.
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.
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.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Fundamentos de Programação 1 Slides 19 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Binários”.
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.
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Transcrição da apresentação:

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 Ferraz Bonetti LCR – Laboratório de Computação Reconfigurável Sala: ICMC ou Página da disciplina:

Listas Listas encadeadas simples: recordando – Fila / Queue (FIFO), Pilha / Stack (LIFO) – Ponteiros: Início / Fim (Head / Tail) Novo conceito! Listas encadeadas duplas Árvores – Árvore Binária – Árvore Binária Ordenada – Árvore Binária Balanceada Exercícios 2 Agenda:

Lista Encadeada Simples (Ponteiros) Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 3 DadoPróximo NULL (fim) Início Inserção de Novo Nó DadoPróximoDadoPróximo NULL DadoPróximo Novo Início

DadoPróximoDadoPróximo Lista Encadeada Simples (Ponteiros) Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 4 DadoPróximo Início Inserção de Novo Nó DadoPróximo DadoPróximoDadoPróximo NULL (fim) DadoPróximo NULL (fim)

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 5 DadoPróximo DadoPróximo NULL Início TIPOS DE DADOS: typedef int Tipo_Dado; typedef struct bloco { Tipo_Dado Dado; struct bloco *Proximo; } Node ROTINAS: void inicializa_lista (Node **N); int insere_inicio_lista (Node **N, Tipo_Dado Dado); int insere_fim_lista (Node **N, Tipo_Dado Dado); int insere_ordenando_lista (Node **N, Tipo_Dado Dado); int remove_inicio_lista (Node **N, Tipo_Dado *Dado); int remove_fim_lista (Node **N, Tipo_Dado *Dado); int remove_elemento_lista (Node **N, Tipo_Dado Dado); int quantidade_lista (Node **N); void exibe_lista (Node **N); int pesquisa_lista (Node **N, Tipo_Dado Dado); int percorre_lista (Node **N, Tipo_Dado *Dado); void apaga_lista (Node **N);

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 6 DadoPróximo DadoPróximo NULL Início ROTINA INSERIR NO INICIO: int insere_inicio_lista (Node **N, Tipo_Dado Dado) { Node *novo; novo = (Node *) calloc ( 1, sizeof (Node) ); if ( novo == NULL ) return (ERRO); /* Não conseguiu alocar na memória */ novo -> Dado = Dado; novo -> Proximo = *N; *N = novo; return (OK); } DadoPróximo Novo

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 7 DadoPróximo DadoPróximo NULL Início ROTINA INSERIR NO FINAL: int insere_fim_lista (Node **N, Tipo_Dado Dado) { Node *aux, *novo; novo = (Node *) calloc ( 1, sizeof (Node) ); if ( novo == NULL ) return(ERRO); novo -> Dado = Dado; novo -> Proximo = NULL; if ( *N == NULL ) /* 1o. da lista? */ *N = novo; else { aux = *N; while ( aux -> Proximo != NULL ) aux = aux -> Proximo; aux -> Proximo = novo; } return (OK); } DadoPróximo Novo NULL

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 8 DadoPróximo DadoPróximo Início ROTINA EXIBIR int exibe_lista (Node **N) { Node *aux; aux = *N; if (aux != NULL) { while ( aux != NULL ) { printf("Dado: %d\n",aux->Dado); aux = aux -> Proximo; } else printf("Lista vazia!\n"); } DadoPróximo NULL

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 9 DadoPróximo DadoPróximo Início INSERIR NO INÍCIO #include "listsimp.c" main() { Nodo *Inicio; printf("\n ROTINAS DE MANIPULACAO DE LISTAS SIMPLES ENCADEADAS \n\n"); inicializa_lista(&Inicio); insere_inicio_lista(&Inicio,1); insere_inicio_lista(&Inicio,2); insere_inicio_lista(&Inicio,3); exibe_lista(&Inicio); system(“pause"); } DadoPróximo NULL

Lista Encadeada Simples: Início e Fim Podemos trabalhar com ponteiros auxiliares INICIO e FIM “Head / Cabeça” e “Tail / Cauda” Insere no Final: Precisava percorrer toda a lista CADA vez que fosse inserir um dado no final da lista! 10

Alocação Dinâmica - Ponteiros: Lista Encadeada Simples 11 DadoPróximo DadoPróximo Início DadoPróximo NULL DadoPróximo DadoPróximo Início DadoPróximo NULL Insere no INÍCIO Insere no FIM

Alocação Dinâmica - Ponteiros: Lista Encadeada DUPLA 12 AnteriorDadoPróximo Início Estrutura de dados: typedef struct bloco_ld { int Dado; struct bloco_ld *Proximo, *Anterior; } Node; NULL AnteriorDadoPróximoAnteriorDadoPróximo NULL Fim

Alocação Dinâmica - Ponteiros: Lista Encadeada DUPLA 13 Duplamente Encadeada – Rotinas: void inicializa_ld (Node **LD); void posiciona_inicio_ld (Node **LD); void posiciona_fim_ld (Node **LD); int insere_inicio_ld (Node **LD, int Dado); int insere_fim_ld (Node **LD, int Dado); int insere_antes_ld (Node **LD, int Dado); int insere_depois_ld (Node **LD, int Dado); int insere_ordenando_ld (Node **LD, int Dado); int pesquisa_ld (Node **LD, int Dado); int remove_Node (Node **LD, int *Dado); int remove_dado_ld (Node **LD, int *Dado); int quantidade_ld (Node *LD); void exibe_ld (Node *LD); int percorre_lista (Node **LD, int *Dado); void apaga_ld (Node **LD);

Alocação Dinâmica - Ponteiros: Lista Encadeada DUPLA 14 Posiciona o ponteiro no início/fim da lista duplamente encadeada void posiciona_inicio_ld (Node **LD) { if ( *LD != NULL ) { while ( (*LD)-> Anterior != NULL ) *LD = (*LD)-> Anterior; } void posiciona_fim_ld (Node **LD) { if ((*LD != NULL) && (( *LD)->Proximo != NULL )) { while ( (*LD)-> Proximo != NULL ) *LD = (*LD)-> Proximo; }

Alocação Dinâmica - Ponteiros: Lista Encadeada DUPLA 15 AnteriorDadoPróximo Início Rotinas: int insere_inicio_ld (Node **LD, int Dado); int insere_fim_ld (Node **LD, int Dado); int insere_antes_ld (Node **LD, int Dado); int insere_depois_ld (Node **LD, int Dado); int insere_ordenando_ld (Node **LD, int Dado); NULL AnteriorDadoPróximoAnteriorDadoPróximo NULL Fim

16

Alocação Dinâmica - Ponteiros: ÁRVORE 17 Estrutura de dados typedef struct Node { int Dado; Node *FilhoEsq, *FilhoDir; Node *Pai; /* opcional */ } Node; A A B B C C E E D D Raiz / Pai FolhaPai Filho / Folha Altura 2 – Prof. 0 Altura 1 – Prof. 1 Altura 0 – Prof. 2

Terminologia utilizada em Árvores 18 Raiz Topo da árvore Pai Oposto de filho Irmãos Que possuem o mesmo pai Folha Um nó sem filhos Grau Número de sub árvores de um nó (caso binário = 2) Aresta Conexão entre dois nós Altura Nível da árvore a partir da folha mais baixa Profundidade Nível da árvore a partir da raiz A A B B C C E E D D

Árvore 19 Não balanceada (lista encadeada)Balanceada (completa)

Informações sobre a disciplina USP - Universidade de São Paulo - São Carlos, SP ICMC - Instituto de Ciências Matemáticas e de Computação SSC - Departamento de Sistemas de Computação Prof. Dr. Daniel Rodrigo Ferraz Bonetti Web institucional: Página do Grupo de Pesquisa: ou Disciplina de Linguagem de Programação e Aplicações SSC