• Nenhum resultado encontrado

Anhanguera ED 04 1 ListaEncadeada

N/A
N/A
Protected

Academic year: 2021

Share "Anhanguera ED 04 1 ListaEncadeada"

Copied!
27
0
0

Texto

(1)

Disciplina:

Estrutura de Dados

Tema da aula:

Listas Encadeadas

Listas Encadeadas

(2)

Structs e

Ponteiros

PLT: 706

(3)

Structs e

Ponteiros

Vamos declarar uma estrutura com

o nome

data

com três campos

inteiros:

inteiros:

typedef struct

data

{

int dia;

int mes;

int ano;

};

(4)

• Um Ponteiro é uma variável que contém o endereço de memória de outra variável.

• Podemos ter um ponteiro para qualquer tipo de variável.

int bb = 10; int cc = 0;

int *zz; declara um ponteiro do tipo inteiro de nome zz zz = &bb inicializa o ponteiro zz

cc = *zz coloca o valor que esta no endereço zz em cc

Ponteiros

cc = *zz coloca o valor que esta no endereço zz em cc

10

0

229346

int

cc

ponteiro

zz

int bb

10

(5)

Structs e

Ponteiros

int main(){

struct data *pDataHoje; //Declaro o ponteiro do tipo estrutura data struct data dataOntem; //Declaro a variável do tipo data

dataOntem.dia = 8; dataOntem.mes = 9; dataOntem.ano = 2014;

printf("Data ontem: %d/%d/%d\n",

dataOntem.dia, dataOntem.mes, dataOntem.ano);

//Inicializo ponteiro pDataHoje em um endereço memória pDataHoje =(data*) malloc (sizeof(data));

pDataHoje =(data*) malloc (sizeof(data)); pDataHoje->dia=9;

pDataHoje->mes=9; pDataHoje->ano=2014;

printf("Data hoje: %d/%d/%d\n",

pDataHoje->dia, pDataHoje->mes, pDataHoje->ano); free(pDataHoje);

system("PAUSE"); return(0);}

(6)

Listas

Encadeadas

PLT: 194

Páginas 223 a 244

Ziviani

Páginas: 73 a 78

(7)

o

A lista terá seu tamanho fixo

.

Se utilizarmos o vetor

para criarmos uma Lista

teremos algumas

desvantagens...

o

A lista terá seu tamanho fixo

.

o

Mesmo vazia a lista ocupará um espaço

de memória.

o

Dependendo da implementação da lista,

determinadas operações podem ter

(8)

Se temos algumas desvantagens com a utilização do vetor na implementação, o que podemos utilizar???.... Listas Encadeadas!!!

É uma estrutura de dados que é um struct que contém

um elemento e o endereço do próximo nó, ou seja é um

(9)

• Lista encadeada é um tipo abstrato de dados projetada para armazenar uma seqüência de dados chamado elemento de lista ou “nó”.

• Seu funcionamento é fundamentado no uso de uma estrutura chamada “nó”, que guarda a localização do próximo “nó”, permitindo o acesso de toda a seqüência de dados.

Listas Encadeadas Simples

seqüência de dados. 45 Endereço do próximo nó 67 Endereço do próximo nó 34 null

(10)

• Cada novo nó inserido na estrutura é

alocado um espaço de memória para

armazená-lo

.

Desta forma, o

espaço total de memória

gasto pela estrutura é proporcional ao

Listas Encadeadas Simples

gasto pela estrutura é proporcional ao

número de elementos armazenado.

As estruturas de dados são dinâmicas,

ou seja, elas crescem

à medida que elementos

são inseridos

(11)

• Não podemos garantir que os nós armazenados na lista

ocuparão um espaço de memória adjacente, ou seja, um ao lado do outro, assim, para que seja possível percorrer todos os elementos da lista, devemos explicitamente guardar o

encadeamento dos elementos, o que é feito armazenando-se, junto com a informação de cada elemento, um ponteiro para o próximo elemento da lista.

Listas Encadeadas Simples

próximo elemento da lista.

NO 01 NO 02 NO 04 NO 03 44 53 87 Memória RAM com o uso de vetor

Memória RAM

(12)

Pára....!!!!

Por favor,

faz uma revisão ai!

Lista encadeada é uma seqüência encadeada

de elementos, chamados de nós da lista.

de elementos, chamados de nós da lista.

Um nó é representado por dois campos:

Informação armazenada

Ponteiro para o próximo elemento da lista

O ponteiro do último elemento é NULL

45

Endereço do

(13)

• A lista é uma estrutura auto-referenciada,

pois o

campo próximo é um ponteiro

para

uma

próxima estrutura do mesmo tipo

.

45

Endereço do

Implementação da

Lista Encadeada Simples

typedef struct

no

{

int

dado;

no

*proximo;

};

45

Endereço do próximo nó

(14)

//

inserção no início: retorna a lista atualizada

no* insere(no *noZ, int dado) {

Implementação da

Lista Encadeada Simples

typedef struct no{ int dado;

no *proximo; };

no* insere(no *noZ, int dado) {

no *noNovo;

noNovo = (no*) malloc(sizeof(no));

noNovo->dado = dado;

noNovo->proximo = noZ;

return noNovo; }

(15)

// função imprime: imprime valores dos elementos

void imprime (no *noZ) {

no *no;

Implementação da

Lista Encadeada Simples

no *no;

for (no = noZ; no != NULL; no = no->proximo) printf("Dado = %d\n", no->dado);

(16)

1 int main(){

2 no

*listaZ

; // declara um ponteiro listaZ do tipo no

3

listaZ

= NULL; // Inicializa o ponteiro com NULL

4 listaZ

=

insere

(

listaZ

, 33); /* insere na lista o 33*/

5 listaZ

=

insere

(

listaZ

, 22); /* insere na lista o 22*/

6

listaZ

=

insere

(

listaZ

, 78); /* insere na lista o 78 */

Implementação da Lista Encadeada Simples

6

listaZ

=

insere

(

listaZ

, 78); /* insere na lista o 78 */

7

imprime

(

listaZ

);

8 system("PAUSE");

9 return(0);

(17)

1 int main(){

2 no

*listaZ

; // declara um ponteiro listaZ do tipo no

3

listaZ

= NULL; // Inicializa o ponteiro com NULL

Implementação da

Lista Encadeada Simples

listaZ

Conseguimos inicializar NULL

listaZ

(Espera um endereço)

Conseguimos inicializar

listaZ com o NULL porque ele é um

ponteiro e espera um endereço.

(18)

4 listaZ

=

insere

(

listaZ

, 33); /* insere na lista o 33*/

Implementação da

Lista Encadeada Simples

listaZ =

no* insere(no *noZ, int dado) {

typedef struct no{ int dado; no *proximo; };

listaZ =

noNovo

no* insere(no *noZ, int dado) {

no *noNovo;

noNovo = (no*) malloc(sizeof(no));

noNovo->dado = dado;

noNovo->proximo = noZ;

return noNovo; } NULL

listaZ

33 2.468.912

(2.468.912)

(3.434.9548)

Endereço da listaZ

(19)

Implementação da Lista Encadeada Simples

no* insere(no *noZ, int dado) {

no *noNovo;

noNovo = (no*) malloc(sizeof(no));

noNovo->dado = dado;

noNovo->proximo = noZ;

return noNovo; }

5 listaZ

=

insere

(

listaZ

, 22); // insere na lista o 22

listaZ

} NULL 33 2.468.912

(2.468.912)

(3.434.9548)

listaZ = noNovo 22 3.434.9548

(1.114.511)

Endereço da listaZ

(20)

Implementação da Lista Encadeada Simples

no* insere(no *noZ, int dado) {

no *noNovo;

noNovo = (no*) malloc(sizeof(no));

noNovo->dado = dado;

noNovo->proximo = noZ;

return noNovo; }

6 listaZ

=

insere

(

listaZ

, 78); // insere na lista o 78

listaZ

} NULL 33 2.468.912

(2.468.912)

(3.434.9548)

listaZ = noNovo 22 3.434.9548

(1.114.511)

78 1.114.511

listaZ

(21)

7

imprime

(

listaZ

);

void imprime (no

*noZ

) {

no *no

;

for (

no

=

noZ

;

no

!= NULL;

no = no->proximo

)

printf("Dado = %d\n",

no->

dado

);

}

Implementação da Lista Encadeada Simples

NULL 33 2.468.912 22 3.434.9548 78 1.114.511

}

noZ

(22)

#include <stdio.h> #include <stdlib.h> int main(){

no *listaZ;

listaZ = NULL;

listaZ = insere(listaZ, 33); listaZ = insere(listaZ, 22); listaZ = insere(listaZ, 78);

imprime(listaZ);

no* insere(no *noZ, int dado) {

no *noNovo;

noNovo = (no*) malloc(sizeof(no));

noNovo->dado = dado;

noNovo->proximo = noZ;

return noNovo; } imprime(listaZ); system("PAUSE"); return(0); } typedef struct no{ int dado; struct no *proximo; } no;

void imprime (no *noZ) { no *no;

for (no = noZ; no != NULL; no = no->proximo) printf("Dado = %d\n", no->dado);

(23)

void esvaziaLista(no *noZ) {

no *auxiliar;

while(noZ != NULL){

auxiliar = noZ ;

noZ = auxiliar->proximo;

printf("Retirou o no do dado: %d - ", auxiliar->dado);

free(auxiliar);

Implementação da Lista Encadeada Simples

esvaziaLista(

listaZ

);

free(auxiliar);

system("PAUSE");

}

printf("Lista vazia!\n");

}

(24)

• Para referenciar o primeiro elemento podemos

utilizamos um TAD cabeça da lista. Esta estrutura contém o número de elementos e o endereço do primeiro nó.

Listas Encadeadas com Cabeça

3 Próximo

Cabeça

da lista

45 Próximo 67 Próximo 34 null

da lista

Número de elementos

(25)

Faça as seguintes funções para a lista encadeada:

– 2.1 Pesquisar de um determinado elemento

• Nome:

Pesquisar

• Parâmetros: no e o dado

• Retorno: no

– 2.2 Excluir um elemento da lista

• Nome:

Excluir

• Parâmetros: no e o dado

Exercício 2

• Parâmetros: no e o dado • Retorno: no Retirar o primeiro elemento Retirar o elemento do meio

(26)

Faças os seguintes programas:

• 3.1

Pilha

com implementação em lista encadeada

• Funções:

Insere e remove

Exercício 3

• Funções:

Insere e remove

• 3.2

Fila

com implementação em lista encadeada

(27)

Referências

• MIZRAHI, Victorine V..

Treinamento em

Linguagem C

. 2ª ed. São Paulo: Pearson, 2008.

(PLT: 706)

• TANENBAUM, A.; Langsam, yedidyah; Augenstein, • TANENBAUM, A.; Langsam, yedidyah; Augenstein,

Moshe J..

Estrutura de Dados usando C.

1ª ed. São Paulo: Pearson, 2007.

(PLT 194)

• ZIVIANE, Nívio (org.).

Projeto de Algoritmos:

com implementações em Pascal e C

. 2ª ed.

Referências

Documentos relacionados

Este cap´ıtulo vai apresentar t´ecnicas de estimac¸˜ao de movimento (Fluxo ´ Otico) uti- lizadas nos experimentos e para tanto, a sec¸˜ao 3.2 vai apresentar o algoritmo de Lucas

Neste capítulo, será apresentada a Gestão Pública no município de Telêmaco Borba e a Instituição Privada de Ensino, onde será descrito como ocorre à relação entre

Em nossa opinião?, as demonstrações financeiras acima referidas representam adequadamente, em todos os aspectos relevantes?, a posição patrimonial e financeira do Itaú Renda Fi?xa

É plausível versar sobre os rituais de consumo como dispositivos entre os personagens e os produtos/marcas na ficção, ou enquanto dispositivos na realidade entre pessoas e

Na estrutura do tipo lista simplesmente encadeada e não ordenada, cada elemento pode armazenar um ou mais dados (estrutura homogênea ou

 Numéricos das das Propriedades Propriedades do do Ar Ar Úmido, Úmido, Cartas Cartas Psicrométricas, Psicrométricas, Processos Processos Psicrométricos, Psicrométricos,

Os casos não previstos neste regulamento serão resolvidos em primeira instância pela coorde- nação do Prêmio Morena de Criação Publicitária e, em segunda instância, pelo

Pela primeira vez foi organizado e produzido um livro com a participação de inúmeros filiados denominado &#34;Cerimonial por Cerimonialistas&#34;, lançado por ocasião da realização