ces-10 introduÇÃo À computaÇÃo capítulo xi noções de estruturas de dados

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

Upload: internet

Post on 17-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

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

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Capítulo XI Capítulo XI

Noções de Estruturas de Noções de Estruturas de DadosDados

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

Capítulo XI – Noções de Capítulo XI – Noções de Estruturas de DadosEstruturas de Dados

11.1 – Importância de uma boa 11.1 – Importância de uma boa estruturação de informaçõesestruturação de informações

11.2 – Modelos de armazenamento de 11.2 – Modelos de armazenamento de informaçõesinformações

11.3 – Listas lineares encadeadas11.3 – Listas lineares encadeadas

11.4 – Pilhas e filas11.4 – Pilhas e filas

11.5 – Árvores11.5 – Árvores

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

11.1 – Importância de uma 11.1 – Importância de uma Boa Estruturação de Boa Estruturação de

InformaçõesInformações Os Os sistemas computacionaissistemas computacionais da atualidade da atualidade

têm capacidade de têm capacidade de armazenararmazenar e e manipularmanipular em altíssima velocidade quantidades imensas em altíssima velocidade quantidades imensas de de informações informações

Das mais diversas Das mais diversas espécies espécies

Para as mais variadas Para as mais variadas aplicações aplicações

Localizadas espalhadamente Localizadas espalhadamente pelo planetapelo planeta

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

Exemplos de informações: Exemplos de informações:

Medições colhidas em experiências Medições colhidas em experiências científicascientíficas, , sondagens e análise de sondagens e análise de fenômenosfenômenos físicos e físicos e químicosquímicos

Medições colhidas durante Medições colhidas durante cirurgiascirurgias e e informações para informações para diagnoses médicasdiagnoses médicas

Controle de Controle de materiaismateriais e e produtosprodutos na indústria e na indústria e comérciocomércio

OrganogramasOrganogramas e controle de pessoal em e controle de pessoal em empresasempresas

Organização de sistemas Organização de sistemas bancários bancários e de e de bibliotecasbibliotecas

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

Exemplos de informações:Exemplos de informações:

Confecção e acompanhamento de Confecção e acompanhamento de projetosprojetos

SimulaçãoSimulação de fenômenos físicos, químicos, de fenômenos físicos, químicos, biológicos, psíquicos e sociaisbiológicos, psíquicos e sociais

Cursos, livros e apostilasCursos, livros e apostilas

Jogos, artes, etc.Jogos, artes, etc.

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

Importância do tempo gasto pelo Importância do tempo gasto pelo computador:computador:

TempoTempo de máquina pode ficar caro (aluguel) de máquina pode ficar caro (aluguel)

CustoCusto proporcional ao proporcional ao tempotempo de utilização de utilização

A A respostaresposta do computador deve ser dada em do computador deve ser dada em tempo hábiltempo hábil

Previsão de Previsão de catástrofes atmosféricascatástrofes atmosféricas

Sistemas computacionais em Sistemas computacionais em tempo realtempo real

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

Tarefas consumidoras de tempo e memória:Tarefas consumidoras de tempo e memória:

OrdenaçãoOrdenação, , classificaçãoclassificação e e pesquisapesquisa de de informaçõesinformações

LigaçãoLigação entre informações entre informações correlatascorrelatas

InserçãoInserção, , eliminaçãoeliminação e e atualizaçãoatualização de de informaçõesinformações

CompactaçãoCompactação e descompactação de e descompactação de informaçõesinformações

CálculosCálculos matemático-científicos envolvendo matemático-científicos envolvendo imensas matrizes imensas matrizes multidimensionais, etc.multidimensionais, etc.

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

Crítico:Crítico: quando o quando o universouniverso de informações é de informações é muito muito grandegrande

Eficiente utilização de Eficiente utilização de recursos recursos computacionaiscomputacionais e redução do e redução do tempo de tempo de respostaresposta dependem de dependem de

Boa Boa estruturaçãoestruturação das informações das informações Bons Bons algoritmosalgoritmos para manipulá-las para manipulá-las

Tudo depende da Tudo depende da naturezanatureza das informações e das informações e das das aplicaçõesaplicações

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

Capítulo XI – Noções de Capítulo XI – Noções de Estruturas de DadosEstruturas de Dados

11.1 – Importância de boa 11.1 – Importância de boa estruturação de informaçõesestruturação de informações

11.2 – Modelos de armazenamento de 11.2 – Modelos de armazenamento de informaçõesinformações

11.3 – Listas lineares encadeadas11.3 – Listas lineares encadeadas

11.4 – Pilhas e filas11.4 – Pilhas e filas

11.5 – Árvores11.5 – Árvores

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

11.2 – Modelos de 11.2 – Modelos de Armazenamento de Armazenamento de

InformaçõesInformações Há vários Há vários modelosmodelos para visualizar, interpretar e para visualizar, interpretar e

armazenar sistemas de armazenar sistemas de informaçõesinformações

Exemplos:Exemplos:

Listas lineares, Árvores, GrafosListas lineares, Árvores, Grafos

Cada um desses Cada um desses modelosmodelos pode ser implementado pode ser implementado por meio de diversas por meio de diversas estruturas de dadosestruturas de dados alternativasalternativas

A A escolhaescolha de uma de uma estruturaestrutura para um para um modelomodelo, , numa determinada aplicação, afeta a numa determinada aplicação, afeta a eficiênciaeficiência do do programaprograma

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

11.2.1 – Listas lineares11.2.1 – Listas lineares

Os Os elementoselementos formam uma formam uma sequência linearsequência linear

Cada Cada elementoelemento tem um tem um antecessorantecessor e um e um sucessorsucessor (exceto o primeiro e o último) (exceto o primeiro e o último)

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

TabelasTabelas em geral podem se enquadrar nesse em geral podem se enquadrar nesse modelomodelo

• 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

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

11.2.2 – Árvores 11.2.2 – Árvores

Os Os elementoselementos formam uma formam uma hierarquia hierarquia paternapaterna

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

Cada Cada elementoelemento tem tem um e apenas um pai um e apenas um pai (exceto a raiz)(exceto a raiz)

Cada elemento tem Cada elemento tem zero ou mais filhoszero ou mais filhos

Um Um elementoelemento não pode ter um não pode ter um ancestralancestral como como filhofilho

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

Exemplos:Exemplos:

Organogramas de empresasOrganogramas de empresas Organização de livros e cursosOrganização de livros e cursos Jogos eliminatórios de um campeonatoJogos eliminatórios de um campeonato Expressões aritméticasExpressões aritméticas Estrutura de um programaEstrutura de um programa

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

Expressão aritmética:Expressão aritmética:

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

void main () {void main () {int n, i, p, aux, vetor[50]; int n, i, p, aux, vetor[50]; char trocou;char trocou;read (n);read (n);for (i=0; i<n; i++)for (i=0; i<n; i++)

read (vetor[i]);read (vetor[i]);trocou = 1;trocou = 1;for (p = n-2; p>=0 && trocou == 1; p--) {for (p = n-2; p>=0 && trocou == 1; p--) {

trocou = 0; trocou = 0; for (i = 0; i<=p; i++)for (i = 0; i<=p; i++)

if (vetor[i] > vetor[i+1]) {if (vetor[i] > vetor[i+1]) {aux = vetor[i]; aux = vetor[i]; vetor[i] = vetor[i+1];vetor[i] = vetor[i+1];vetor[i+1] = aux; vetor[i+1] = aux; trocou = 1;trocou = 1;

}}}}for (i=0; i<n; i++) for (i=0; i<n; i++)

write (vetor[i]);write (vetor[i]);}}

Sua árvore de armazenamento

Estrutura de um programa em C aplainada

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

Cada nó retangular pode ser mais detalhado

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

11.2.3 – Grafos 11.2.3 – Grafos

Os Os elementoselementos se interligam de forma bem se interligam de forma bem geralgeral, sem necessariamente formar , sem necessariamente formar hierarquiashierarquias ou ou sequênciassequências

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

Exemplos:Exemplos:

Tarefas de um projetoTarefas de um projeto Sistema rodoviário de uma regiãoSistema rodoviário de uma região Rede de computadoresRede de computadores Fornecimento de produtos entre fábricasFornecimento de produtos entre fábricas Dependências entre os comandos de um Dependências entre os comandos de um

programaprograma Máquinas de estados finitos (inúmeras Máquinas de estados finitos (inúmeras

aplicações em Engenharia)aplicações em Engenharia) Editores de textoEditores de texto

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

Capítulo XI – Noções de Capítulo XI – Noções de Estruturas de DadosEstruturas de Dados

11.1 – Importância de boa 11.1 – Importância de boa estruturação de informaçõesestruturação de informações

11.2 – Modelos de armazenamento de 11.2 – Modelos de armazenamento de informaçõesinformações

11.3 – Listas lineares encadeadas11.3 – Listas lineares encadeadas

11.4 – Pilhas e filas11.4 – Pilhas e filas

11.5 – Árvores11.5 – Árvores

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

11.3 – Listas Lineares 11.3 – Listas Lineares EncadeadasEncadeadas

11.3.1 – Conceito de lista linear geral11.3.1 – Conceito de lista linear geral

Listas lineares geraisListas lineares gerais são listas lineares que são listas lineares que admitem admitem inserção e remoçãoinserção e remoção de elementos de elementos em em qualquer posiçãoqualquer posição

As As estruturas de dadosestruturas de dados para elas se dividem para elas se dividem em dois grandes grupos:em dois grandes grupos:

Estruturas contíguas:Estruturas contíguas: seus elementos são seus elementos são armazenados num armazenados num vetorvetor

Estruturas encadeadas:Estruturas encadeadas: seus elementos são seus elementos são guardados em guardados em encadeamentos de estruturasencadeamentos de estruturas

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

11.3.2 – Estruturas contíguas11.3.2 – Estruturas contíguas

Os Os elementoselementos são armazenados num são armazenados num vetorvetor::

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;

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

11.3.2 – Estruturas contíguas11.3.2 – Estruturas contíguas

Os Os elementoselementos são armazenados num são armazenados num vetorvetor::

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

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

11.3.2 – Estruturas contíguas11.3.2 – Estruturas contíguas

Os Os elementoselementos são armazenados num são armazenados num vetorvetor::

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

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

11.3.2 – Estruturas contíguas11.3.2 – Estruturas contíguas

Os Os elementoselementos são armazenados num são armazenados num vetorvetor::

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

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

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

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

11.3.3 – Estruturas encadeadas11.3.3 – Estruturas encadeadas

Os Os elementoselementos são guardados em são guardados em encadeamentosencadeamentos de de estruturasestruturas::

Cada Cada estruturaestrutura costuma receber o nome de costuma receber o nome de nónó

Cada Cada nónó guarda um guarda um elementoelemento da lista e um da lista e um ponteiroponteiro apontando para o nó que contém o apontando para o nó que contém o sucessorsucessor desse elemento desse elemento

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

Por convenção, o Por convenção, o 1º nó1º nó do encadeamento do encadeamento não não guarda nenhum elementoguarda nenhum elemento, para facilitar a , para facilitar a programação de diversas operações com listasprogramação de diversas operações com listas

Esse Esse nó especialnó especial costuma receber a costuma receber a designação de designação de nó-lídernó-líder

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

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 listaO tipo do campo elem poderia ser uma estrutura complexa

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

Variáveis do tipo posição: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;

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

Variáveis do tipo posição:Variáveis do tipo posição:

Na Na estrutura encadeadaestrutura encadeada::

Adota-se uma Adota-se uma convenção não muito naturalconvenção não muito natural, , mas útil para facilitar a mas útil para facilitar a programaçãoprogramação das das operações de operações de inseririnserir e e removerremover elementos da elementos da listalista

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

Variáveis do tipo posição:Variáveis do tipo posição:

Na Na estrutura encadeadaestrutura encadeada::

PosiçãoPosição de um elemento é um de um elemento é um ponteiroponteiro para o para o nó que contém o nó que contém o antecessorantecessor desse elemento desse elemento

typedef noh *posicao;

posicao p;

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

Exemplos:Exemplos:

Posição do 2º elemento:Posição do 2º elemento: ponteiro para o nó do ponteiro para o nó do 1º elemento1º elemento

Posição do 1º elemento:Posição do 1º elemento: ponteiro para o ponteiro para o nó-nó-líderlíder

Posição do último elemento:Posição do último elemento: ponteiro para o ponteiro para o penúltimopenúltimo nó nó

typedef noh *posicao;posicao p;

pp p

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

Fim de lista: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

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

Fim de lista:Fim de lista:

Na Na estrutura encadeadaestrutura encadeada::

Ponteiro para o último nóPonteiro para o último nó

Fim (L)

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

Exemplo: formação de uma nova lista:Exemplo: formação de uma nova lista:

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <conio.h>#include <conio.h>

typedef struct noh noh;typedef struct noh noh;

typedef noh *lista;typedef noh *lista;

typedef noh *posicao;typedef noh *posicao;

struct noh {struct noh {

int elem;int elem;

noh *prox;noh *prox;

};};

lista NovaLista (void);lista NovaLista (void);

void EscreverLista (lista);void EscreverLista (lista);

Função para formar uma nova lista, retornando-aFunção para escrever a lista-argumento

Os elementos da lista serão números inteiros;

Poderiam ser complexas estruturas ou ponteiros para elas

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

void main () {void main () {

lista L;lista L;

printf ("Leitura de uma lista:\n\n");printf ("Leitura de uma lista:\n\n");

L = NovaLista ();L = NovaLista ();

printf ("\nConfirmacao:");printf ("\nConfirmacao:");

EscreverLista (L);EscreverLista (L);

printf("\n\nDigite algo para encerrar: ");printf("\n\nDigite algo para encerrar: ");

getch ();getch ();

}}

L main

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

i

p

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

i

p

3

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (for (p = L, i = 1p = L, i = 1; i <= n; i++) {; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (for (p = L, i = 1p = L, i = 1; i <= n; i++) {; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

2

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

1i

p

3

##

2

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

2i

p

3

##

2

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

2i

p

3

##

2

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

2i

p

3

##

2

p

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

2i

3

##

2

p

5

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

2i

3

##

2

p

5

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

3i

3

##

2

p

5

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

3i

3

##

2

p

5

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

3i

3

##

2

p

5

p

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

3i

3

##

2 5

p

7

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

3i

3

##

2 5

p

7

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; for (p = L, i = 1; i <= n; i++i++) {) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

4i

3

##

2 5

p

7

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

4i

3

##

2 5

p

7

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

NovaLista

L

n

4i

3

##

2 5

p

7

Retorno

Nova lista sai do ar !!!

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

lista NovaLista () {lista NovaLista () {

lista L; posicao p;lista L; posicao p;

int i, n;int i, n;

printf ("Numero de elementos da lista: ");printf ("Numero de elementos da lista: ");

scanf ("%d", &n);scanf ("%d", &n);

printf ("\nElementos:\n\t");printf ("\nElementos:\n\t");

L = (noh *) malloc (sizeof (noh));L = (noh *) malloc (sizeof (noh));

for (p = L, i = 1; i <= n; i++) {for (p = L, i = 1; i <= n; i++) {

p->prox = (noh *) malloc (sizeof (noh));p->prox = (noh *) malloc (sizeof (noh));

p = p->prox;p = p->prox;

scanf ("%d", &p->elem);scanf ("%d", &p->elem);

}}

p->prox = NULL;p->prox = NULL;

return L;return L;

}}

L mainmain: L = NovaLista ();

##

2 5 7

Retorno

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

p

Vídeo

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (for (p = L;p = L; p->prox != NULL; p = p->prox) p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

p

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; for (p = L; p->prox != NULL; p = p->proxp = p->prox))

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2

Vídeo

p p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; for (p = L; p->prox != NULL; p = p->proxp = p->prox))

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5

Vídeo

p p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5 7

Vídeo

p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; for (p = L; p->prox != NULL; p = p->proxp = p->prox))

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5 7

Vídeo

p p

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

void EscreverLista (lista L) {void EscreverLista (lista L) {

posicao p;posicao p;

printf ("\n\t");printf ("\n\t");

for (p = L; p->prox != NULL; p = p->prox)for (p = L; p->prox != NULL; p = p->prox)

printf ("%4d", p->prox->elem);printf ("%4d", p->prox->elem);

printf ("\n");printf ("\n");

}}

L mainmain: EscreverLista (L);

##

2 5 7

EscreverLista

L

2 5 7

Vídeo

p

Fim !!!

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

Para Para inseririnserir ou ou removerremover elementos de uma elementos de uma lista linear com estrutura lista linear com estrutura encadeadaencadeada não é não é necessária grande necessária grande movimentaçãomovimentação de dados de dados

Exemplo:Exemplo: inseririnserir um elemento um elemento xx na posição na posição pp de uma lista de uma lista LL

##

2 5 7L

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;

q9

Cuidado: p pode apontar para nó fora da lista L

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

Exemplo:Exemplo: removerremover o elemento da posição o elemento da posição pp de de uma lista uma lista LL

Outra vantagemOutra vantagem da lista encadeada: o da lista encadeada: o número número de elementosde elementos de uma lista não fica limitado a de uma lista não fica limitado a nenhum nenhum dimensionamentodimensionamento estabelecido em estabelecido em declaraçõesdeclarações

p

Nó que contém o elemento da posição p

Passos:

q = p->prox;p->prox = q->prox;free(q);

q

##

2 5 7L 9

Cuidado: p pode apontar para nó fora da lista L