A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.

Apresentações semelhantes


Apresentação em tema: "CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados."— Transcrição da apresentação:

1 CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados

2 Capítulo XI – Noções de Estruturas de Dados 11.1 – Importância de uma boa estruturação de informações 11.2 – Modelos de armazenamento de informações 11.3 – Listas lineares encadeadas 11.4 – Pilhas e filas 11.5 – Árvores

3 11.1 – Importância de uma Boa Estruturação de Informações Os sistemas computacionais da atualidade têm capacidade de armazenar e manipular em altíssima velocidade quantidades imensas de informações Os sistemas computacionais da atualidade têm capacidade de armazenar e manipular em altíssima velocidade quantidades imensas de informações Das mais diversas espécies Das mais diversas espécies Para as mais variadas aplicações Para as mais variadas aplicações Localizadas espalhadamente pelo planeta Localizadas espalhadamente pelo planeta

4 Exemplos de informações: Medições colhidas em experiências científicas, sondagens e análise de fenômenos físicos e químicos Medições colhidas em experiências científicas, sondagens e análise de fenômenos físicos e químicos Medições colhidas durante cirurgias e informações para diagnoses médicas Medições colhidas durante cirurgias e informações para diagnoses médicas Controle de materiais e produtos na indústria e comércio Controle de materiais e produtos na indústria e comércio Organogramas e controle de pessoal em empresas Organogramas e controle de pessoal em empresas Organização de sistemas bancários e de bibliotecas Organização de sistemas bancários e de bibliotecas

5 Exemplos de informações: Confecção e acompanhamento de projetos Confecção e acompanhamento de projetos Simulação de fenômenos físicos, químicos, biológicos, psíquicos e sociais Simulação de fenômenos físicos, químicos, biológicos, psíquicos e sociais Cursos, livros e apostilas Cursos, livros e apostilas Jogos, artes, etc. Jogos, artes, etc.

6 Importância do tempo gasto pelo computador: Tempo de máquina pode ficar caro (aluguel) Tempo de máquina pode ficar caro (aluguel) Custo proporcional ao tempo de utilização Custo proporcional ao tempo de utilização A resposta do computador deve ser dada em tempo hábil A resposta do computador deve ser dada em tempo hábil Previsão de catástrofes atmosféricas Previsão de catástrofes atmosféricas Sistemas computacionais em tempo real Sistemas computacionais em tempo real

7 Tarefas consumidoras de tempo e memória: Ordenação, classificação e pesquisa de informações Ordenação, classificação e pesquisa de informações Ligação entre informações correlatas Ligação entre informações correlatas Inserção, eliminação e atualização de informações Inserção, eliminação e atualização de informações Compactação e descompactação de informações Compactação e descompactação de informações Cálculos matemático-científicos envolvendo imensas matrizes multidimensionais, etc. Cálculos matemático-científicos envolvendo imensas matrizes multidimensionais, etc.

8 Crítico: quando o universo de informações é muito grande Crítico: quando o universo de informações é muito grande Eficiente utilização de recursos computacionais e redução do tempo de resposta dependem de Eficiente utilização de recursos computacionais e redução do tempo de resposta dependem de Boa estruturação das informações Boa estruturação das informações Bons algoritmos para manipulá-las Bons algoritmos para manipulá-las Tudo depende da natureza das informações e das aplicações Tudo depende da natureza das informações e das aplicações

9 Capítulo XI – Noções de Estruturas de Dados 11.1 – Importância de boa estruturação de informações 11.2 – Modelos de armazenamento de informações 11.3 – Listas lineares encadeadas 11.4 – Pilhas e filas 11.5 – Árvores

10 11.2 – Modelos de Armazenamento de Informações Há vários modelos para visualizar, interpretar e armazenar sistemas de informações Há vários modelos para visualizar, interpretar e armazenar sistemas de informações Exemplos: Exemplos: Listas lineares, Árvores, Grafos Cada um desses modelos pode ser implementado por meio de diversas estruturas de dados alternativas Cada um desses modelos pode ser implementado por meio de diversas estruturas de dados alternativas A escolha de uma estrutura para um modelo, numa determinada aplicação, afeta a eficiência do programa A escolha de uma estrutura para um modelo, numa determinada aplicação, afeta a eficiência do programa

11 11.2.1 – Listas lineares Os elementos formam uma sequência linear Os elementos formam uma sequência linear Cada elemento tem um antecessor e um sucessor (exceto o primeiro e o último) Cada elemento tem um antecessor e um sucessor (exceto o primeiro e o último)

12 Tabelas em geral podem se enquadrar nesse modelo Tabelas em geral podem se enquadrar nesse modelo Listas telefônicas Folhas de pagamento de empregados Livros de uma biblioteca Tabelas de banco de dados relacional Cada elemento ocupa uma linha da tabela

13 11.2.2 – Árvores Os elementos formam uma hierarquia paterna Os elementos formam uma hierarquia paterna

14 Cada elemento tem um e apenas um pai (exceto a raiz) Cada elemento tem um e apenas um pai (exceto a raiz) Cada elemento tem zero ou mais filhos Cada elemento tem zero ou mais filhos Um elemento não pode ter um ancestral como filho Um elemento não pode ter um ancestral como filho

15 Exemplos: Organogramas de empresas Organogramas de empresas Organização de livros e cursos Organização de livros e cursos Jogos eliminatórios de um campeonato Jogos eliminatórios de um campeonato Expressões aritméticas Expressões aritméticas Estrutura de um programa Estrutura de um programa

16 Expressão aritmética:

17 void main () { int n, i, p, aux, vetor[50]; char trocou; read (n); for (i=0; i<n; i++) read (vetor[i]); trocou = 1; for (p = n-2; p>=0 && trocou == 1; p--) { trocou = 0; for (i = 0; i<=p; i++) if (vetor[i] > vetor[i+1]) { aux = vetor[i]; vetor[i] = vetor[i+1]; vetor[i+1] = aux; trocou = 1; }} for (i=0; i<n; i++) write (vetor[i]); } Sua árvore de armazenamento Estrutura de um programa em C aplainada

18 Cada nó retangular pode ser mais detalhado

19 11.2.3 – Grafos Os elementos se interligam de forma bem geral, sem necessariamente formar hierarquias ou sequências Os elementos se interligam de forma bem geral, sem necessariamente formar hierarquias ou sequências

20 Exemplos: Tarefas de um projeto Tarefas de um projeto Sistema rodoviário de uma região Sistema rodoviário de uma região Rede de computadores Rede de computadores Fornecimento de produtos entre fábricas Fornecimento de produtos entre fábricas Dependências entre os comandos de um programa Dependências entre os comandos de um programa Máquinas de estados finitos (inúmeras aplicações em Engenharia) Máquinas de estados finitos (inúmeras aplicações em Engenharia) Editores de texto Editores de texto

21 Capítulo XI – Noções de Estruturas de Dados 11.1 – Importância de boa estruturação de informações 11.2 – Modelos de armazenamento de informações 11.3 – Listas lineares encadeadas 11.4 – Pilhas e filas 11.5 – Árvores

22 11.3 – Listas Lineares Encadeadas 11.3.1 – Conceito de lista linear geral Listas lineares gerais são listas lineares que admitem inserção e remoção de elementos em qualquer posição Listas lineares gerais são listas lineares que admitem inserção e remoção de elementos em qualquer posição As estruturas de dados para elas se dividem em dois grandes grupos: As estruturas de dados para elas se dividem em dois grandes grupos: Estruturas contíguas: seus elementos são armazenados num vetor Estruturas contíguas: seus elementos são armazenados num vetor Estruturas encadeadas: seus elementos são guardados em encadeamentos de estruturas Estruturas encadeadas: seus elementos são guardados em encadeamentos de estruturas

23 11.3.2 – Estruturas contíguas Os elementos são armazenados num vetor: Os elementos são armazenados num vetor: Declarações, supondo que os elementos sejam nomes de até 15 caracteres: typedef char nome[16]; typedef nome vetor[51]; typedef struct lista lista; struct lista { vetor Elementos; int ultimo; }; lista L;

24 11.3.2 – Estruturas contíguas Os elementos são armazenados num vetor: Os elementos são armazenados num vetor: Por convenção, o 1º elemento fica guardado na posição 1 do vetor Elementos Caso o valor do campo ultimo seja zero, a lista está vazia Caso seja 1, a lista tem apenas um elemento

25 11.3.2 – Estruturas contíguas Os elementos são armazenados num vetor: Os elementos são armazenados num vetor: Inserir um elemento na posição i: Somar 1 ao campo ultimo Deslocar os elementos a partir da posição i, uma posição para baixo Copiar, nessa posição, o elemento a ser inserido

26 11.3.2 – Estruturas contíguas Os elementos são armazenados num vetor: Os elementos são armazenados num vetor: Remover o elemento da posição i: Subtrair 1 do campo ultimo Deslocar os elementos a partir da posição i+1, uma posição para cima O elemento da posição i+1 passa a ocupar a posição i, apagando o que ali estava

27 Para listas com muitos elementos, inserir e remover das posições iniciais envolvem grande movimentação de informações A ineficiência será grande O tamanho das listas fica limitado à dimensão declarada do vetor Para aplicações com muitas inserções e remoções, a estrutura contígua se mostra inadequada

28 11.3.3 – Estruturas encadeadas Os elementos são guardados em encadeamentos de estruturas: Os elementos são guardados em encadeamentos de estruturas: Cada estrutura costuma receber o nome de nó Cada estrutura costuma receber o nome de nó Cada nó guarda um elemento da lista e um ponteiro apontando para o nó que contém o sucessor desse elemento Cada nó guarda um elemento da lista e um ponteiro apontando para o nó que contém o sucessor desse elemento

29 Por convenção, o 1º nó do encadeamento não guarda nenhum elemento, para facilitar a programação de diversas operações com listas Por convenção, o 1º nó do encadeamento não guarda nenhum elemento, para facilitar a programação de diversas operações com listas Esse nó especial costuma receber a designação de nó-líder Esse nó especial costuma receber a designação de nó-líder

30 Declarações: Declarações: typedef char nome[16]; typedef struct noh noh; typedef noh *lista; struct noh { nome elem; noh *prox; }; lista L; Um ponteiro para o nó-líder identifica perfeitamente a lista O tipo do campo elem poderia ser uma estrutura complexa

31 Variáveis do tipo posição: Servem para indicar a posição de um determinado elemento numa lista e também para percorrer listas Na estrutura contígua, a posição de um elemento pode ser o índice do elemento dentro do vetor typedef int posicao; posicao p;

32 Variáveis do tipo posição: Na estrutura encadeada: Na estrutura encadeada: Adota-se uma convenção não muito natural, mas útil para facilitar a programação das operações de inserir e remover elementos da lista Adota-se uma convenção não muito natural, mas útil para facilitar a programação das operações de inserir e remover elementos da lista

33 Variáveis do tipo posição: Na estrutura encadeada: Na estrutura encadeada: Posição de um elemento é um ponteiro para o nó que contém o antecessor desse elemento Posição de um elemento é um ponteiro para o nó que contém o antecessor desse elemento typedef noh *posicao; posicao p;

34 Exemplos: Posição do 2º elemento: ponteiro para o nó do 1º elemento Posição do 2º elemento: ponteiro para o nó do 1º elemento Posição do 1º elemento: ponteiro para o nó-líder Posição do 1º elemento: ponteiro para o nó-líder Posição do último elemento: ponteiro para o penúltimo nó Posição do último elemento: ponteiro para o penúltimo nó typedef noh *posicao; posicao p; pp p

35 Fim de lista: Posição logo após à do último elemento Na estrutura contígua, é o índice no vetor após o do último elemento

36 Fim de lista: Na estrutura encadeada: Na estrutura encadeada: Ponteiro para o último nó Ponteiro para o último nó Fim (L)

37 Exemplo: formação de uma nova lista: #include #include typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int elem; noh *prox; }; lista NovaLista (void); void EscreverLista (lista); Função para formar uma nova lista, retornando-a Função para escrever a lista-argumento Os elementos da lista serão números inteiros; Poderiam ser complexas estruturas ou ponteiros para elas

38 void main () { lista L; printf ("Leitura de uma lista:\n\n"); L = NovaLista (); printf ("\nConfirmacao:"); EscreverLista (L); printf("\n\nDigite algo para encerrar: "); printf("\n\nDigite algo para encerrar: "); getch (); getch ();} L main

39 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n i p

40 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n i p 3

41 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n i p 3 ##

42 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n i p 3 ##

43 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ##

44 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ##

45 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ##

46 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ##

47 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ## 2

48 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 1 i p 3 ## 2

49 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 2 i p 3 ## 2

50 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 2 i p 3 ## 2

51 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 2 i p 3 ## 2 p

52 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 2 i 3 ## 2 p 5

53 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 2 i 3 ## 2 p 5

54 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 3 i 3 ## 2 p 5

55 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 3 i 3 ## 2 p 5

56 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 3 i 3 ## 2 p 5 p

57 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 3 i 3 ## 25 p 7

58 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 3 i 3 ## 25 p 7

59 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 4 i 3 ## 25 p 7

60 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 4 i 3 ## 25 p 7

61 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); NovaLista L n 4 i 3 ## 25 p 7 Retorno Nova lista sai do ar !!!

62 lista NovaLista () { lista L; posicao p; int i, n; printf ("Numero de elementos da lista: "); scanf ("%d", &n); printf ("\nElementos:\n\t"); L = (noh *) malloc (sizeof (noh)); L = (noh *) malloc (sizeof (noh)); for (p = L, i = 1; i <= n; i++) { p->prox = (noh *) malloc (sizeof (noh)); p = p->prox; scanf ("%d", &p->elem); } p->prox = NULL; return L; return L;} L main main: L = NovaLista (); ## 257 Retorno

63 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L p Vídeo

64 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L p Vídeo p

65 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L Vídeo p

66 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 Vídeo p

67 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 Vídeo pp

68 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 Vídeo p

69 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 Vídeo p

70 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 Vídeo pp

71 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 Vídeo p

72 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 7 Vídeo p

73 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 7 Vídeo pp

74 void EscreverLista (lista L) { posicao p; printf ("\n\t"); for (p = L; p->prox != NULL; p = p->prox) printf ("%4d", p->prox->elem); printf ("\n"); } L main main: EscreverLista (L); ## 257 EscreverLista L 2 5 7 Vídeo p Fim !!!

75 Para inserir ou remover elementos de uma lista linear com estrutura encadeada não é necessária grande movimentação de dados Para inserir ou remover elementos de uma lista linear com estrutura encadeada não é necessária grande movimentação de dados Exemplo: inserir um elemento x na posição p de uma lista L Exemplo: inserir um elemento x na posição p de uma lista L ##257 L p O nó do elemento deve ser encadeado aqui 9 x Passos: q = p->prox; p->prox = (noh*) malloc (sizeof (noh)); p->prox->elem = x; p->prox->prox = q; q 9 Cuidado: p pode apontar para nó fora da lista L

76 Exemplo: remover o elemento da posição p de uma lista L Exemplo: remover o elemento da posição p de uma lista L Outra vantagem da lista encadeada: o número de elementos de uma lista não fica limitado a nenhum dimensionamento estabelecido em declarações Outra vantagem da lista encadeada: o número de elementos de uma lista não fica limitado a nenhum dimensionamento estabelecido em declarações p Nó que contém o elemento da posição p Passos: q = p->prox; p->prox = q->prox; free(q); q ##257 L 9 Cuidado: p pode apontar para nó fora da lista L


Carregar ppt "CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados."

Apresentações semelhantes


Anúncios Google