You are on page 1of 25

ESTRUTURA DE DADOS I

Lista Lineares 3 Perodo de Sistemas de Informao

Prof. Geovane Caetano

Apresentao do Mdulo.
Conceitos e representaes. Exemplos. listas estticas e dinmicas. alocao esttica e dinmica. Representao. Operaes: insero, remoo, consulta. Listas encadeada e duplamente encadeada: representaes, particularidades e operaes. Listas Circulares: conceitos e operaes.

Conceito e representao
Uma lista de compras, por exemplo uma enumerao de elementos a serem adquiridos. Note-se que essa lista poderia conter apenas o nome do item, mas poderia tambm especificar a quantidade a ser comprada.... nesse caso, a lista possuiria pares como elementos, cada um contendo um nome de item e a quantidade correspondente. Em alguns casos, existe uma relao de ordem entre os elementos da lista. Por exemplo, se fossem feitas medidas da temperatura em Muria, durante os 30 primeiros dias do ano. Para se garantir a relao de cada temperatura com seu dia correspondente, uma soluo seria formar-se uma lista de pares (dia, temperatura). Ex: 3 [01,39]; [02,38];[.....];[30,36]

Conceito e representao
Entretanto, uma alternativa mais simples seria armazenar apenas as temperaturas, na ordem da coleta de dados

[39]; [38];[.....];[36] Listas lineares, portanto so estruturas que permitem representar uma coleo de dados de forma a preservar a relao de ordem entre eles. Lista linear a estrutura que permite representar um conjunto de dados afins de forma a preservar a relao de ordem linear de seus elemento.

Conceito e representao
Define-se lista linear como sendo o conjunto de n 0 ns x1, x2, ....., xn, organizados estruturalmente de forma a refletir as posies relativas dos mesmos: se n > 0, ento x1 o primeiro n; para 1 < k < n, o n xk precedido pelo n xk1 e seguido do xk+1; e xn o ltimo n. quando n = 0 diz-se que a lista vazia. Ex. Lista
X[k] x[k+1] .... X[n]

Lista esttica
uma estrutura muito simples, mas extremamente importante para iniciar o estudo das listas. Pode ser implementada usando array/vetores, devido a seqncia dos ns ou elementos serem dispostos em uma ordem estritamente linear, ou seja, so acessveis um aps o outro. Poder usar um vetor/array de tamanho fixo e uma varivel inteira para armazenar o tamanho da lista/quantidade de elementos.

Lista esttica
A estrutura da lista um agregado heterogneo, conforme declaraes abaixo.
int m = 10; struct lista{ int n; char v[m]; }; struct lista L;

Para atribuirmos valores a um membro da estrutura lista, devemos utilizar a notao abaixo.
L.v[0]= a; //primeiro elemento da lista L.v[1]= b; //segundo elemento da lista L.v[9]= t; //dcimo elemento da lista // Se L.n == 0; //lista est L.n == 10; //lista est cheia

Lista esttica
Operaes primitivas

Em listas podemos realizar vrias operaes, discutiremos as operaes primitivas e implementaremos algumas das operaes possveis:
a)

b) c) d) e) f) g) h) i) j) k)

Acessar o k_simo n da lista para obter e/ou alterar o dado nele contido. Inserir um novo n aps o k_simo n da lista. Inserir um n no final da lista. Remover o k_simo n da lista. Concatenar duas listas. Determinar o nmero de ns de um lista. Localizar o n que contm um dado valor. Gerar uma sub-cadeia de uma lista(sub-lista) . Intercalar duas listas. Inverter uma lista. Ordenar uma lista.
8

Lista esttica
Implementaes das operaes primitivas.

Criao de uma lista esttica TAD (tipo abstrato de dados)


#define m 10; struct lista{ int n; char v[m]; }; struct lista L; // criao normal int m = 10; typedef struct { int n; char v[m]; } lista; // Definindo tipo

ou

Iniciar uma lista Antes de inserir algum elemento na lista, devemos primeiro iniciar a lista. ou seja, atribuir zero ao numero de elementos.
void iniciaLista(struct lista *L){ L->n =0; //ou (*L).n = 0; } //criao normal void iniciaLista(lista *L){ L->n =0; //ou (*L).n = 0; } //com tipo definido no typedef

ou

Lista esttica
Implementaes das operaes primitivas.

Acessar o k_simo n de uma lista. O acesso ao elemento da lista endereado pela varivel k feito de forma direta, uma vez que k j conhecido. Pela definio da lista contgua, se conhecemos um endereo podemos determinar os seguintes e os precedentes. Exemplo em pseudocdigo.
funo acessar_K_esimo(L: lista; k: int ,retorno: logico; dados: tipoDeDados) Inicio: se k < 0 ou k > L->n ento // testa o limite da lista de 0 ao tamanho mximo retorno falso seno dados L->v[k] retorno verdadeiro fim se Fim.

10

Lista esttica
Implementaes das operaes primitivas.

Alterar o valor do k_simo n de uma lista. Esta funo recebe como parmetro a lista, o endereo do n a ser alterado e o novo valor que substituir o antigo. Exemplo em pseudocdigo.
Funco altera_K_esimo(L: lista; k:int , retorno: logico; dados: tipoDeDados) Inicio: se k < 0 ou k > L->n ento // testa o limite da lista de 0 ao tamanho mximo retorno falso seno L->v[k] dados retorno verdadeiro fim se Fim.
11

Lista esttica
Implementaes das operaes primitivas.

Inserir um novo n antes do k_simo n de um lista.


Esta funo recebe como parmetro a lista, o endereo do n a ser inserido e o dado que ser inserido na lista. Se houver elemento direita de k ou no endereo determinado pela varivel k, sero movido para direita.
Funco inserAntes Do_K_esimo(L: lista; k :int; retorno: logico; dados: tipoDeDados) Inicio: var i: int; se k < 0 ou k > L-> n ento // testa o limite da lista de 0 ao tamanho mximo retorno falso seno para i de n incremento -1 at k faa L->v [i + 1] L->v [i]; fim-para L->n L->n +1 L->v [k] dados; retorno verdadeiro fim se Fim.

12

Lista esttica
Implementaes das operaes primitivas.

A complexidade de tempo desta funo 0(n),pois tem que realizar o movimento dos n elementos para liberar espao de armazenamento, caso exista, para inserir um novo elemento. Outra opo de insero a insero no final da lista, diferentemente dessa funo que insere no local determinado.
Funco insereNoFinal: lista; retorno: logico; dados: tipoDeDados) Inicio se NumeroDeElementos > TamanhoDaLista - 1 ento // testa o limite da lista retorno falso seno L.v [L->n] dados; retorno <- verdadeiro L->n L->n +1 fim se Fim.

13

Lista esttica
Implementaes das operaes primitivas.

Remova o k-simo n de um lista. Esta funo recebe a lista, o endereo do elemento a ser removido como parmetro e ento desloca os elementos que esto direita para esquerda, sobrepondo as posies anteriores.
Funco remove_K_esimoElemento: lista; k:int; retorno: logico; dados: tipoDeDados) Inicio var i : int; se k < 0 ou k > L->n -1 ento // testa o limite da lista retorno falso seno para i de k incremento 1 at L->n -1 faa L.v [i] L.v [i=1] ; fim-para L->n L->n -1 fim se Fim.

14

Exerccios proposto Lista esttica.


Usando Tad- tipo abstrato de dados. a) Passar todas esses pseudocdigo para linguagem estruturada C. b) Criar um funo para ordenar os elementos. c) Fazer uma anlise de complexidade, nos procedimentos abaixo e exemplificar qual o melhor mtodo. Dever usar lista com 5, 10 e 100 elementos para anlise a) Sempre inserir o elemento no final e aps fazer a ordenao; b) Ao inserir um elemento o mesmo j dever ser inserido na posio ordenada. d) Criar uma segunda lista, copiar os elementos da primeira, apagando os elementos repetidos. e) Criar um funo que retorna a quantidade elementos/ns disponveis na lista. f) Criar um funo para retornar valor do k_simo elemento informado.
15

Lista encadeada
Lista encadeadas/ligadas

Vantagens em relao as lista esttica No necessrio predefinir o tamanho da lista. Menor esforo computacional nas operaes. Listas encadeadas so usadas para dois propsitos: Criar matrizes de tamanhos desconhecidos na memria. Armazenar bancos de dados em disco. A lista ligada permite que se insira e elimine itens rapidamente sem re-arranjar todo o arquivo de discos

16

Lista encadeada
Ligaes ou encadeamento

Listas encadeadas podem ser de ligao simples e de ligao dupla. Uma lista de ligao simples contm uma ligao para o prximo item da estrutura.
5 6 7 8

Uma lista de ligao dupla possui ligaes tanto para o item seguinte quanto para o anterior
8 7 6 3

17

Lista encadeada
Lista encadeadas/ligada simples

Uma lista ligada de ligao simples uma coleo ordenada de registros em que cada registro tem um campo que indica a localizao do registro seguinte na lista.

18

Lista encadeada
Lista encadeadas simples

Uma lista ligada de ligao simples uma coleo ordenada de registros em que cada registro tem um campo que indica a localizao do registro seguinte na lista. Cada item da estrutura tem um ponteiro para o prximo item.
CODALUNO NOTA CODALUNO NOTA CODALUNO NOTA ORDENADA POR NOTA

5
INICIO DA LISTA

10

FIM = NULL

19

Lista encadeada
Insero ordenada

Inserir o a nota 9 do aluno 4


CODALUNO NOTA

CODALUNO

NOTA

CODALUNO

NOTA

CODALUNO

NOTA

ORDENADA POR NOTA

5
INICIO DA LISTA

10

FIM = NULL

20

Lista encadeada
Insero ordenada

O ponteiro que estava apontando para o aluno 7 passou apontar para o aluno 8. E esse passou apontar para o aluno 7
CODALUNO NOTA

CODALUNO

NOTA

CODALUNO

NOTA

CODALUNO

NOTA

ORDENADA POR NOTA

5
INICIO DA LISTA

10

FIM = NULL

21

Lista encadeada
Remover

Remover o aluno 7

CODALUNO

NOTA

CODALUNO

NOTA

CODALUNO

NOTA

ORDENADA POR NOTA

5
INICIO DA LISTA

10

FIM = NULL

22

Lista encadeada
Remover

O ponteiro que estava apontando par o aluno 7, passou apontar para o aluno que era apontado por ele.

CODALUNO

NOTA

CODALUNO

NOTA

CODALUNO

NOTA

ORDENADA POR NOTA

5
INICIO DA LISTA

10

FIM = NULL

23

Lista encadeada
Implementao

Para definir uma lista ligada em C deve-se criar uma estrutura que tenha como um dos campos um ponteiro do tipo da prpria estrutura Exemplo: Para exemplificar a implementao de listas encadeadas em C, vamos considerar um exemplo simples em que queremos armazenar cdigo e nota de numa lista encadeada. O n da lista pode ser representado pela estrutura abaixo:
struct lista { int codAluno; int nota; struct lista* prox; }; //Cdigo fonte anexo.
24

Fim lista esttica e dinmica.

25

You might also like