Prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com
Download
1 / 83

- PowerPoint PPT Presentation


  • 74 Views
  • Uploaded on

Técnicas de Programação. Estruturas de. Dados em C. Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Carga Horária: 60 horas. Estruturas de Dados em C I. Objetivos

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '' - elgin


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com

Técnicas de Programação

Estruturas de

Dados em C

Prof.:José Eustáquio Rangel de Queiroz

rangel@dsc.ufcg.edu.br

rangeldequeiroz@gmail.com

Carga Horária:60 horas

Carga Horária:60 horas


Estruturas de dados em c i
Estruturas de Dados em C I

  • Objetivos

    • Apresentar as estruturas de dados usuais em C e seus respectivos algoritmos

    • Introduzir conceitos relativos às estruturas de dados apresentadas


Estruturas de dados em c ii
Estruturas de Dados em C II

  • Representação de Dados em um Sistema Computacional

    • Modelo (objetos matemáticos) adotado para o problema (objetos do mundo real)

    • Conjunto de operações definidas no modelo

    • Modo de armazenamento (representação) dos objetos matemáticos

    • Algoritmos usados para a execução das operações sobre os objetos matemáticos


Estruturas de dados em c iii
Estruturas de Dados em C III

  • Estruturação de Dados

    • Organização de conjuntos de dados

      • Facilidade de armazenamento e/ou processamento

      • Facilidade de resolução de problemas

    • Identificação e desenvolvimento de entidades e operações matemáticas úteis para a resolução de diferentes classes de problemas


Estruturas de dados em c iv
Estruturas de Dados em C IV

  • Exemplos de Estruturas de Dados Elementares

    • Vetores e Matrizes

      int a0, a1, a2, a3;

      /* Mais adequado: int a[4] */

    • Structs

      int x, y, z;

       /* Mais adequado: struct {int x,y,z;} Ponto3D;*/


Estruturas de dados em c v
Estruturas de Dados em C V

  • Estruturas de Dados mais Complexas

    • Pilhas

    • Filas

    • Listas

    • Árvores

    • Funções de Escrutínio (Hashing)

    • Grafos


Estruturas de dados em c vi
Estruturas de Dados em C VI

  • Estruturas de Dados – Conceitos I

    • Tipos de Dados

    • Estruturas de Dados

    • Tipos Abstratos de Dados


Estruturas de dados em c vii
Estruturas de Dados em C VII

  • Estruturas de Dados – Conceitos II

    • Tipo de Dados

      • Conjunto de valores possíveis de serem assumidos por uma variável e seqüência de operações sobre tais valores

        • Exemplo  Variável do tipo boolean(Valores possíveis: TRUE e FALSE)


Estruturas de dados em c viii
Estruturas de Dados em C VIII

  • Estruturas de Dados – Conceitos III

    • Estrutura de Dados

      • Forma de representação um tipo de dado abstrato, a qual pode conter tipos básicos (int, real, char) e/ou tipos estruturados (array, record) de uma LP


Estruturas de dados em c ix
Estruturas de Dados em C IX

  • Estruturas de Dados – Conceitos IV

    • Tipo Abstrato de Dados (TAD) I

      • Refere-se ao conceito de tipos de dados, não levando em consideração o hardware utilizado

      • Item especificado em termos de operações nele realizáveis, não em termos de sua interna


Estruturas de dados em c x
Estruturas de Dados em C X

  • Estruturas de Dados – Conceitos V

    • Tipo Abstrato de Dados (TAD) II

      • Conjunto de valores e seqüência de operações passíveis de execução nestes

      • Característica essencial  Separação entre conceito e implementação

      • Implementação de um TAD  Seleção de uma ED para representá-lo


Estruturas de dados em c xi
Estruturas de Dados em C XI

  • Estruturas de Dados – Conceitos VI

    • Tipo Abstrato de Dados (TAD) III

      • Exemplos

        • Listas

        • Pilhas

        • Filas

        • Árvores


Estruturas de dados em c xii
Estruturas de Dados em C XII

  • Estruturas de Dados – Conceitos VII

    • Lista Linear I

      • Seqüência ordenada de elementos E1, E2, ..., En, no sentido de sua posição relativa 

        • Existem n elementos na seqüência

        • E1 Primeiro elemento da seqüência

        • En Último elemento da seqüência

        • Para todo i, entre 1 e n, se i < j, então o elemento Ei antecede o elemento Ej

        • Caso i = j - 1, Ei é o antecessor de Ej e Ej é o sucessor de Ei

...

E1

E2

En


Estruturas de dados em c xiii
Estruturas de Dados em C XIII

  • Estruturas de Dados – Conceitos VIII

    • Lista Linear II

      • Operações

        • Busca de um elemento

        • Inserção de um elemento

        • Remoção de um elemento


Estruturas de dados em c xiv
Estruturas de Dados em C XIV

  • Estruturas de Dados – Conceitos IX

    • Lista Linear III

      • Outras Operações

        • Alteração de um elemento na lista

        • Combinação de duas ou mais listas

        • Ordenação de elementos


Estruturas de dados em c xv
Estruturas de Dados em C XV

  • Estruturas de Dados – Conceitos X

    • Lista Linear IV

      • Casos Particulares

        • Remoção e inserção apenas nas extremidades Deque

        • Inserção/ Remoção em uma única extremidade Pilha

        • Inserções em uma extremidade e remoções na extremidade oposta Fila


Estruturas de dados em c xvi
Estruturas de Dados em C XVI

  • Estruturas de Dados – Conceitos XI

    • Lista Linear V

      • Armazenamento de Elementos

        • Posições contíguas da memória  Lista seqüencial

        • Posições aleatórias da memória  Lista encadeada

      • Alocação de Memória

        • Estática Tempo de compilação

        • Dinâmica Tempo de execução


Prof jos eust quio rangel de queiroz rangel dsc ufcg br rangeldequeiroz gmail

Estruturas de Dados em C XVII

#include <stdio.h>#include <conio.h>#include <stdlib.h>/* Calculo da media e variancia de "d" numeros reais */void main (void){int i, d;float *n;float m, v;/* Alocacao dinamica de memoria */printf(“Entre com o número de elementos:”);scanf ("%d", &d );n = (float *) calloc (d, sizeof(float) );if ( n == NULL ) {printf("Memoria insuficiente ! \n");exit(1);}

  • Exemplo 01 (1/2)

A funçãocalloc()aloca memória suficiente para uma matriz de d objetos de tamanhofloat


Prof jos eust quio rangel de queiroz rangel dsc ufcg br rangeldequeiroz gmail

Estruturas de Dados em C XVIII

/* Leitura dos valores */ for(i = 0; i < d; i++){ printf(“Digite o valor do elemento n[%d]:”, i); scanf("%f", &n[i]); } /* Calculo da media e da variancia */ m = 0.0; v = 0.0; for ( i = 0; i < d; i++ ) m += n[i]; m /= d; for ( i = 0; i < d; i++ ) v += (n[i]-m)*(n[i]-m); v /= d;/* Liberação da memória alocada dinamicamente */ free ( n );/* Impressao do resultado */ printf("Media = %f Variancia = %f \n", m, v);}

  • Exemplo 01 (2/2)


Estruturas de dados em c xix
Estruturas de Dados em C XIX

  • Estruturas de Dados – Conceitos XIV

    • Listas

      • Variantes

        • Lista Estática

          • Seqüencial

          • Singularmente Encadeada

          • Duplamente Encadeada

        • Lista Dinâmica

        • Lista Circular


Estruturas de dados em c xx
Estruturas de Dados em C XX

  • Estruturas de Dados – Conceitos XV

    • Lista Seqüencial I

      • Estabelecimento de regras de precedência entre seus elementos  Sucessor de um elemento ocupa posição física subseqüente àquela do elemento considerado

...

E1

E2

En


Estruturas de dados em c xxi
Estruturas de Dados em C XXI

  • Estruturas de Dados – Conceitos XVI

    • Lista Seqüencial II

      • Alocação Seqüencial de Memória

        • Localização do endereço do (j+1)-ésimo elemento a uma unidade de armazenamento do j-ésimo elemento

      • Representação e Acesso

        • k-ésimo elemento L[i]


Estruturas de dados em c xxii
Estruturas de Dados em C XXII

  • Estruturas de Dados – Conceitos XVII

    • Lista Seqüencial III

      • Possibilidade de definição de cada elemento a partir de campos

        • Associação de uma chave c[k] está associada ao nó L[k]

        • Condição de classificação ou ordenação da lista por chave

          Se i < j, então c[i] precede c[j]


Estruturas de dados em c xxiii
Estruturas de Dados em C XXIII

  • Estruturas de Dados – Conceitos XVIII

    • Lista Seqüencial III

      • Busca em uma Lista Seqüencial

        • Ordenada por chaves

        • Não ordenada


Estruturas de dados em c xxiv
Estruturas de Dados em C XXIV

  • Estruturas de Dados – Conceitos XIX

    • Lista Seqüencial IV – Busca por um item

      • Problema

        • Busca pelo item i em uma lista de n elementos

      • Solução

        • Retorno da posição do elemento na lista (caso afirmativo) ou de n (caso negativo)


Estruturas de dados em c xxv
Estruturas de Dados em C XXV

  • Estruturas de Dados – Conceitos XX

    • Lista Seqüencial V

      • Exemplo 02 – Busca pelo item15

      • Exemplo 03 – Busca pelo item5

22

1

9

26

15

15

10

3

7

22

1

9

26

15

10

3

7

7


Estruturas de dados em c xxvi
Estruturas de Dados em C XXVI

  • Estruturas de Dados – Conceitos XXI

    • Lista Seqüencial VI

      • Algoritmo 01

/* Busca seqüencial – Algoritmo 01 */ Busca_1(item){ pos = 0; while ( (item != L[pos]) && (pos<n) ) pos++; return(pos); }


Estruturas de dados em c xxvii
Estruturas de Dados em C XXVII

  • Estruturas de Dados – Conceitos XXII

    • Lista Seqüencial VII

      • Algoritmo 02

/* Busca seqüencial – Algoritmo 02*/Busca_2(item){ L[n] = item; pos = -1; do { pos += 1; } while (item != L[pos]) return(pos); }


Estruturas de dados em c xxviii
Estruturas de Dados em C XXVIII

  • Estruturas de Dados – Conceitos XXIII

    • Lista Seqüencial VIII

      • Comentários sobre os Algoritmos 01 e 02

        • Complexidade do Pior Caso O(n)

        • Execução mais rápida  Algoritmo 2

          • Decrescimento do número de testes a cada iteração


Estruturas de dados em c xxix
Estruturas de Dados em C XXIX

  • Estruturas de Dados – Conceitos XXIV

    • Lista Seqüencial IX – Inserção de novo item I

      • Problema

        • Inserção um novo item i em uma lista seqüencial desordenada, caso este não exista na respectiva lista


Estruturas de dados em c xxx
Estruturas de Dados em C XXX

  • Estruturas de Dados – Conceitos XXV

    • Lista Seqüencial X - Inserção de novo item II

      • Algoritmo 03

/* Busca seqüencial – Algoritmo 03*/void Insercao(i, item[], *n) { if (*n < MAX-1) { if (Busca_2(item) == -1) { item[*n] = i; *n=*n+1; } else printf("Elemento ja existe na tabela."); } else puts("Lista ja cheia.");}


Estruturas de dados em c xxxi
Estruturas de Dados em C XXXI

  • Estruturas de Dados – Conceitos XXVI

    • Lista Seqüencial XI – Remoção de um item I

      • Problema

        • Exclusão de um item i existente em uma lista seqüencial desordenada contendo n elementos


Estruturas de dados em c xxxii
Estruturas de Dados em C XXXII

  • Estruturas de Dados – Conceitos XXVII

    • Lista Seqüencial XII - Remoção de um item II

      • Algoritmo 04

/* Busca seqüencial – Algoritmo 04*/void Remocao(item, *n){ if (n != 0) { indice = Busca_2(item); if (indice != *n){ item = a[indice]; for (i = indice; i < *(n-1); i ++) L[i] = L[i + 1]; *n = *n -1; } else printf(“Item não encontrado.”); }else printf(“Lista vazia.”);}


Estruturas de dados em c xxxiii
Estruturas de Dados em C XXXIII

  • Estruturas de Dados – Conceitos XXVIII

    • Lista Seqüencial XIII – Vantagens & Desvantagens

      • Vantagens

        • Acesso direto a itens da lista através de índices

        • Tempo de acesso constante

      • Desvantagens

        • Movimentação de toda a lista quando da inserção ou recuperação de um item

        • Pré-definição do tamanho


Estruturas de dados em c xxxiv
Estruturas de Dados em C XXXIV

  • Estruturas de Dados – Conceitos XXIX

    • Lista Seqüencial XIV – Uso

      • Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)


Estruturas de dados em c xxxv
Estruturas de Dados em C XXXV

  • Estruturas de Dados – Conceitos XXX

    • Lista Estática Encadeada I

      • Uso de apontadores para o encadeamento dos itens da lista

      • Indicação do nó inicial da lista feita por apont

      • Representação de cada nó a partir de um retângulo subdividido em duas partes

        • Parte 1Dado

        • Parte 2Apontador

Apontador

Dado


Estruturas de dados em c xxxvi

apont

E2

En

E1

Estruturas de Dados em C XXXVI

  • Estruturas de Dados – Conceitos XXXI

    • Lista Estática Encadeada II

      • Último nó  Apontamento para a terra

        • Indicação do fim da lista


Estruturas de dados em c xxxvii
Estruturas de Dados em C XXXVII

  • Estruturas de Dados – Conceitos XXXII

    • Lista Estática Encadeada III – Vantagens & Desvantagens

      • Vantagens

        • Não necessidade de movimentação de todos os itens no ato da inserção ou recuperação de um item

      • Desvantagens

        • Necessidade de definição de um tamanho máximo

        • Aumento do tempo de execução

        • Alocação de maior espaço de memória


Estruturas de dados em c xxxviii
Estruturas de Dados em C XXXVIII

  • Estruturas de Dados – Conceitos XXXIII

    • Lista Estática Encadeada IV – Uso

      • Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)


Estruturas de dados em c xxxix
Estruturas de Dados em C XXXIX

  • Estruturas de Dados – Conceitos XXXIV

    • Lista Linear com Disciplina de Acesso I

      • Disciplina de Acesso

        • Modo (regra) de acesso aos itens de uma lista linear

      • Verificação da corretude das inserções, remoções e acessos de consulta

        • Relativa ao primeiro ou ao último item da lista linear


Estruturas de dados em c xxxix1

http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimphttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

Estruturas de Dados em C XXXIX

  • Estruturas de Dados – Conceitos XXXIV

    • Lista Linear com Disciplina de Acesso I

      • Classificação

        • Pilha

        • Fila

        • Deque


Estruturas de dados em c xl

iníciohttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

início

início

início

início

início

F

I

L

A

I

L

A

I

L

A

S

fim

fim

fim

fim

fim

fim

Estruturas de Dados em C XL

  • Estruturas de Dados – Conceitos XXXV

    • Fila I

      • Definição

        • Lista linear na qual a inserção é feita numa extremidade e a remoção na extremidade oposta (First In First Out)


Estruturas de dados em c xli
Estruturas de Dados em C XLIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XXXVI

    • Fila II

      • Exemplo de Aplicação

        • Buffer para comunicação assíncrona entre equipamentos (em especial quando um deles é mais lento do que o outro – e.g. computador-impressora)


Estruturas de dados em c xlii
Estruturas de Dados em C XLIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XXXVII

    • Fila III

      • Operações Associadas

        • Criacao(F)  Criação de uma fila F vazia

        • Insercao(x, F) Inserção de um item x ao final da fila F

        • Vazia(F) Teste se a fila F está vazia

        • Primeiro(F) Acesso ao item do início da fila F

        • Remocao(F) Remoção do primeiro item da fila F


Estruturas de dados em c xliii
Estruturas de Dados em C XLIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XXXVIII

    • Fila IV

      • Exemplo 04


Estruturas de dados em c xliv
Estruturas de Dados em C XLIVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XXXIX

    • Fila V

      • Exercício 01 - Implementação de rotinas básicas para manipulação de dados em uma fila I

        • Analisar cada uma das funções listadas no Adicional 02 (Filas e Pilhas) e utilizá-las para implementar o Exemplo 04


Estruturas de dados em c xlv
Estruturas de Dados em C XLVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XL

    • Fila VI

      • Exercício 02 - Implementação de rotinas básicas para manipulação de dados em uma fila II

        • Analisar o código dos slides 48 a 50, construindo, em seguida, um quadro nos moldes do Exemplo 04 para representar o processo de manipulação dos dados associados


Estruturas de dados em c xlvi
Estruturas de Dados em C XLVIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLI

    • Fila VII

      • Algoritmo 05 (01/03)

/* Programa Principal */main(){ Tipo_Fila Fila; int Valor; clrscr(); printf("\n <Manipulacao de Dados em uma Fila>\n\n");  inicializa_fila(&Fila); if (vazia_fila(Fila)) printf("=> Fila vazia\n");  if (insere_fila(&Fila,2)) printf("=> Valor 2 inserido na fila\n"); if (insere_fila(&Fila,4)) printf("=> Valor 4 inserido na fila\n");


Estruturas de dados em c xlvii
Estruturas de Dados em C XLVIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLII

    • Fila VIII

      • Algoritmo 05 (02/03)

if (insere_fila(&Fila,6)) printf("=> Valor 6 inserido na fila\n"); printf("\n=> Elementos da fila... [inicio ao fim]\n"); lista_fila(Fila); if (acha_fila(Fila,4,&Valor)) printf("=> O valor 4 foi achado na posicao %d\n",Valor); if (!acha_fila(Fila,5,&Valor)) printf("=> O valor 5 nao foi achado na fila\n"); if (retira_fila(&Fila,&Valor)) printf("=> Valor %d retirado da fila\n",Valor); if (retira_fila(&Fila,&Valor)) printf("=> Valor %d retirado da fila\n",Valor); if (retira_fila(&Fila,&Valor)) printf("=> Valor %d retirado da fila\n",Valor);


Estruturas de dados em c xlviii
Estruturas de Dados em C XLVIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLIII

    • Fila IX

      • Algoritmo 05 (03/03)

printf("Pressione uma tecla para continuar...\n");getch();printf("\n=> Elementos da fila... [inicio ao fim]\n"); lista_fila(Fila);  if (vazia_fila(Fila)) printf("=> Fila vazia\n");  printf("Pressione uma tecla para encerrar o programa.\n"); getch();}


Estruturas de dados em c xlix
Estruturas de Dados em C XLIXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLIV

    • Fila X

      • Exercício 03 - Implementação de rotinas básicas para manipulação de dados em uma fila III

        • Alterar o código apresentado nos slides 48 a 50, de modo a obter, ao final do processamento, uma fila contendo

          • apenas o item 55

          • os itens 91 (início), 31, 82, 47, 16 e 29 (fim)


Estruturas de dados em c l

pophttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

pop

push

push

topo

topo

Estruturas de Dados em C L

  • Estruturas de Dados – Conceitos XLV

    • Pilha I

      • Definição

        • Lista na qual a inserção ou a remoção de um item ocorre a partir de uma única extremidade - o topo (Last In First Out)


Estruturas de dados em c li
Estruturas de Dados em C LIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLVI

    • Pilha II

      • Características

        • Estrutura P=(a(1), a(2), ..., a(n))

          • a(1) Elemento da base

          • a(n) Elemento do topo

          • a(i+1) Elemento sucessor de a(i)


Estruturas de dados em c lii
Estruturas de Dados em C LIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLVII

    • Pilha III

      • Operações Associadas

        • Criacao(P)  Criação de uma pilha P vazia

        • Insercao(x, P) Inserção de um item x no topo da pilha P (push(x,P))

        • Vazia(P) Teste se a pilha P está vazia

        • Topo(P) Acesso ao item do topo da pilha P

        • Remocao(P) Remoção do item de topo da pilha P


Estruturas de dados em c liii
Estruturas de Dados em C LIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLVIII

    • Pilha IV

      • Aplicação Típica

        • Reordenação de um conjunto de dados, tal que o primeiro e o último elementos devam ter suas posições invertidas e as posições de todos os elementos entre o primeiro e último devam, também, ser relativamente invertidas


Estruturas de dados em c liv
Estruturas de Dados em C LIVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos XLIX

    • Pilha V

      • Exemplo 05 - Conversão de um número decimal para outra base de numeração I

12510 = ?3

Sentido da leitura

12510 = 111223


Estruturas de dados em c lv
Estruturas de Dados em C LVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos L

    • Pilha VI

      • Exemplo 05 - Conversão de um número decimal para outra base de numeração II


Estruturas de dados em c lvi
Estruturas de Dados em C LVIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LI

    • Pilha VII

      • Exercício 04 - Implementação de rotinas básicas para manipulação de dados em uma pilha I

        • Analisar cada uma das funções listadas no Adicional 02 (Filas e Pilhas) e utilizá-las para implementar o Exemplo 05


Estruturas de dados em c lvii
Estruturas de Dados em C LVIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LII

    • Pilha VIII

      • Exercício 05 - Implementação de rotinas básicas para manipulação de dados em uma pilha II

        • Analisar o código dos slides 60 e 61, construindo, em seguida, um quadro nos moldes do Exemplo 05 para representar o processo de manipulação dos dados associados


Estruturas de dados em c lviii
Estruturas de Dados em C LVIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LIII

    • Pilha IX

      • Algoritmo 06 (01/02)

/* Programa Principal */void main(){ int x,num,den, resto; Tipo_Pilha P; clrscr(); inicializa_pilha(&P); printf("\nDigite um numero na base decimal: "); scanf("%d",&num); printf("\nO numero %d na base 10 equivale a ",num); while( (num !=0) && (cheia_pilha(P) != 1) ) { resto = num%2; den = num/2; num = den; insere_pilha(&P,resto); }


Estruturas de dados em c lix
Estruturas de Dados em C LIXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LIV

    • Pilha X

      • Algoritmo 06 (02/02)

while(vazia_pilha(P) != 1) { x=retira_pilha(&P); printf("%d",x);}printf(" na base 2\n\n");getch();}


Estruturas de dados em c lx
Estruturas de Dados em C LXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LV

    • Pilha XI

      • Exercício 07 - Implementação de rotinas básicas para manipulação de dados em uma pilha III

        • Alterar o código apresentado nos slides 63 e 64, de modo a obter, ao final do processamento

          • os números primos da seqüência empilhada

          • os itens 91 (início), 31, 82, 47, 16 e 29 (fim)


Estruturas de dados em c lxi
Estruturas de Dados em C LXIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LVI

    • Pilha XII

      • Algoritmo 07 (01/02)

/* Programa Principal */void main(){ int num, x; Tipo_Pilha P; clrscr(); inicializa_pilha(&P); printf("\nArmazene um numero (Encerre digitando 999): "); scanf("%d",&num); while( (num !=999) && (cheia_pilha(P) != 1)) { insere_pilha(&P,num); printf("\nArmazene um numero: "); scanf("%d",&num); }


Estruturas de dados em c lx1
Estruturas de Dados em C LXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LVII

    • Pilha XIII

      • Algoritmo 07 (02/02)

printf("\nSequencia LIFO\n"); while(vazia_pilha(P) != 1) { x=retira_pilha(&P); printf("%d",x); } printf("\n");getch();}


Estruturas de dados em c lxi1
Estruturas de Dados em C LXIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LVIII

    • Árvore I

      • Considerações

        • Lista, Fila e Pilha

          • ED lineares

          • Cada nó contém apenas um link

        • Árvore

          • ED bidimensional não linear com propriedades especiais

          • Todos os nós podem conter 2 ou maislinks (nenhum, um, vários ou todos podem estar vazios)


Estruturas de dados em c lxii
Estruturas de Dados em C LXIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LIX

    • Árvore II

      • Definição I

        • Estrutura recursiva contendo um conjunto finito de itens denominados nós (vértices ou folhas), tais que

          • Se T = 0 a árvore é dita vazia

          • Existe um nó especial r, denominado raiz de T


Estruturas de dados em c lxiii
Estruturas de Dados em C LXIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LX

    • Árvore III

      • Definição II

        • Tipo particular de lista com as seguintes propriedades

          • Substruturas encadeadas a qualquer nó são disjuntas

          • Todos os nós podem ser atingidos a partir do nó inicial (raiz)  Navegação por um número finito de locações


Estruturas de dados em c lxiv
Estruturas de Dados em C LXIVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXI

    • Árvore IV

      • Terminologia I

        • Nó pai Nó ao qual um nó está diretamenteligado

        • Nó filho Cada nó derivado de um nó

        • Nós ancestrais Nós acima de um dado nó, em direção a raiz

        • Nós descendentesTodos os nós abaixo de um dado nó

        • Nós irmãos Nós ligados ao mesmo pai


Estruturas de dados em c lxv
Estruturas de Dados em C LXVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXII

    • Árvore V

      • Terminologia II

        • Grau Número de subárvores de um nó

        • Nó terminal (folha)  Nó sem filho ou com grau zero

        • Nível Número de arcos entre um nó e a raiz

        • Altura (da árvore)  Nível mais alto (profundidade)

        • Floresta Conjunto de árvores disjuntas


Estruturas de dados em c lxvi
Estruturas de Dados em C LXVIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXIII

    • Árvore VI

      • Aplicações Típicas

        • Relação de hierarquia (Composição)

          • Organograma

          • Estruturação de Diretórios

          • Composição de um conjunto a partir de peças elementares

          • Processamento de Expressões Aritméticas

          • Armazenamento de dados com acesso rápido (Árvore Binária de Busca)


Estruturas de dados em c lxvii
Estruturas de Dados em C LXVIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXIV

    • Árvore VII

      • Exemplo 06 – Árvore contendo a expressão aritmética

        ((-m)+(n+p))/(x*(y*z))


Estruturas de dados em c lxviii
Estruturas de Dados em C LXVIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXV

    • Árvore VIII

      • Exemplo 07 – Árvore contendo excerto dos 2 primeiros níveis de uma partida de Jogo da Velha

Jogador iniciante


Estruturas de dados em c lxix
Estruturas de Dados em C LXIXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXVI

    • Árvore IX

      • Árvore Binária I - Definição

        • Estrutura recursiva, composta de

          • Uma árvore vazia (T=0); ou

          • Um elemento, denominado raiz, associado a duas sub-árvores, denominadas sub-árvore esquerda e sub-árvore direita


Estruturas de dados em c lxx
Estruturas de Dados em C LXXhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXVII

    • Árvore X

      • Árvore Binária II - Estrutura

Raiz

Sub-árvore direita

Sub-árvore esquerda

Folhas


Estruturas de dados em c lxxi

MSG1http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

D

H

MSG2

MSG2

MSG3

C

B

A

MSG1

G

E

MSG3

MSG2

MSG1

F

MSG

MSG1

MSG3

MSG

MSG2

MSG2

MSG3

(Ordenação &

eliminação de réplicas)

(Fragmentação)

Estruturas de Dados em C LXXI

  • Estruturas de Dados – Conceitos LXVIII

    • Árvore XI

      • Árvore Binária III – Exemplo de Aplicação

        Redes de Comunicação de Dados


Estruturas de dados em c lxxii
Estruturas de Dados em C LXXIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXIX

    • Árvore XII

      • Operações Associadas

        • Criação de uma árvore vazia

        • Criação de um nó raiz

        • Verificação de árvore vazia (ou não)

        • Criação de um filho à direita ou à esquerda de um dado nó

        • Verificação do nível de um dado nó

        • Retorno do pai (ou dos filhos) de um dado nó


Estruturas de dados em c lxxiii
Estruturas de Dados em C LXXIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXX

    • Árvore XIII

      • Exploração de uma Árvore Binária I

        • Ordenada (Inorder)  Processamento dos valores dos nós em ordem ascendente

          • Exploração da subárvore esquerda de forma ordenada (inorder)

          • Processamento do valor do nó (i.e., impressão do valor)

          • Exploração da subárvore direita de forma ordenada (inorder)


Estruturas de dados em c lxxiv
Estruturas de Dados em C LXXIVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXXI

    • Árvore XIII

      • Exploração de uma Árvore Binária II

        • Pré-ordenada (Preorder)

          • Processamento do valor do nó (i.e., impressão do valor)

          • Exploração da subárvore esquerda de forma pré-ordenada (preorder)

          • Exploração da subárvore direita de forma pré-ordenada (preorder)


Estruturas de dados em c lxxv
Estruturas de Dados em C LXXVhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXXII

    • Árvore XIV

      • Exploração de uma Árvore Binária III

        • Pós-ordenada (Postorder)

          • Exploração da subárvore esquerda de forma pós-ordenada (postorder)

          • Exploração da subárvore direita de forma pós-ordenada (postorder)

          • Processamento do valor do nó (i.e., impressão do valor)


Estruturas de dados em c lxxvi
Estruturas de Dados em C LXXVIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXXIII

    • Árvore XV

      • Exploração de uma Árvore Binária IV

        • Ordem de Acesso

  • Ordenadaa b c d e f g

  • Pré-ordenadad b a c f e g

  • Pós-ordenadaa c b e g f d


Estruturas de dados em c lxxii1
Estruturas de Dados em C LXXIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXIX

    • Árvore XII

      • Exercício 08

        • Construir as árvores binárias correspondentes às seguintes expressões:

          • (a+b)/(c-d*e)+e+g*h/(a-b)

          • (-x-y*(z+(a+b+c/d*e)/(c-d))/k

          • ((a+b)>(c-e))&&a<f||(x<y&&y>z)


Estruturas de dados em c lxxiii1
Estruturas de Dados em C LXXIIIhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

  • Estruturas de Dados – Conceitos LXX

    • Árvore XIII

      • Exercício 09 - Manipulação de dados em uma árvore

        • Analisar e testar o código do Adicional 03 (Árvores), de modo a incrementá-lo com barras (/) e contrabarras (\), a fim de facilitar a visualização da árvore impressa.


Rangel@dsc ufcg edu br rangeldequeiroz@gmail com

José Eustáquio Rangel de Queirozhttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp

UNIVERSIDADE FEDERAL DE CAMPINA GRANDE

CENTRO DE CIÊNCIAS E TECNOLOGIA

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com