Você está na página 1de 14

Tipos de Dados: Listas

Introduo Cincia da Computao Rosane Minghim


Apoio na confeco: Rogrio Eduardo Garcia

Tipos de Dados
T Vrios tipos de dados (simples e compostos) foram
vistos neste curso. Eles possuem uma definio prpria e um tipo de acesso ditado pela sua organizao fsica. T Muitas vezes os dados manipulados possuem uma natureza adequada aplicao que, no entanto, no apropriada para implementao com tipos convencionais. P. exemplo: como implementar uma lista telefnica com vetores e registros? T Para manipular dados de natureza mais especfica ou complexa a computao apia-se no conceito de TIPOS ABSTRATOS DE DADOS

Tipos Abstratos de Dados


T Para definir e manipular um tipo abstrato de
dados, o programador pensa, numa primeira fase, no objetivo e na organizao que os seus dados precisam ter para atender as demandas da aplicao. Apenas numa segunda fase definido como implementar essa estrutura. T Um tipo abstrato de dados possui dois componentes:
Uma organizao dos dados Um conjunto de operaes sobre eles.

Tipos Abstratos de Dados Exemplo


T Uma biblioteca pode ser vista como um tipo abstrato
de dados. T Ela composta de: funcionrios, usurios, livros, recursos udio-visuais, estantes, livros, revistas, diretoria, classificaes, materiais diversos, horrio de funcionamento, etc.. T Operaes adequadas a uma biblioteca seriam:
Catalogar livro Retirar livro do acervo Catalogar usurio Retirar Livro Devolver livro Recomendar livro Etc..

Tipos Abstratos de Dados Exemplos


T Evidentemente modelar uma biblioteca como
um tipo abstrato de dados pode ser muito complexo. No entanto ela serve como exemplo de que possvel pensar na sua organizao e em operaes que possam ser realizadas sobre ela independentemente da sua implementao. T A forma de implementar pode ser deixada para uma segunda etapa, uma vez que a organizao e as operaes sejam completamente especificadas.

Tipos de Dados: Listas


T Alguns tipos de dados so mais genricos e podem
ser utilizados para um nmero varivel de aplicaes justamente por sua generalidade. T Esse o caso das chamadas Listas. T Uma lista uma seqncia de elementos: x1, x2, xn. Sobre essa seqncia de elementos pode-se impor certas restries:
A insero de um novo elemento pode ser restrita a uma das extremidades (no fim, no incio). O mesmo ocorre para a eliminao de um elemento. A lista pode ser ordenada (portanto insero depende de definir inicialmente a posio correta de um determinado elemento). A lista pode admitir elementos iguais ou se restringir a elementos no repetidos.

Tipos de Dados: Listas


T Algumas operaes tpicas para listas so:
Criar a lista Inserir um elemento na lista Eliminar um elemento da lista Imprimir um elemento da lista Destruir a lista Buscar um elemento da lista Verificar o nmero de elementos da lista Lista de espera Lista de compras Lista de livros recomendados Lista de produtos descontinuados Lista de benefcios de um empregados de uma empresa Lista de funcionrios em frias Lista de documentos necessrios

T As aplicaes so muitas:

Tipos de Dados: Listas


T Uma vez definida para a lista
1.

2. 3.

T T

a organizao da lista (se ela ordenada ou no, se pode possuir elementos repetidos, se inseres podem ser realizadas em qualquer lugar ou devem se feitas em lugares especficos) Seu conjunto de operaes O tipo de elemento que ela vai armazenar (lista de nmeros, registros, nomes?). Pode-se pensar como implement-la. As opes para implementao de listas normalmente so duas:
Listas estticas (Implementao usando Vetores) Listas encadeadas, ou dinmicas (Implementao usando ponteiros e alocao dinmica).

T Questo: vantagens e desvantagens?

Listas: Exemplo de implementao Parcial


T Suponha uma lista com a seguinte especificao:
1. 2. 3.

A lista no ordenada e pode possuir elementos iguais. O tipo de elemento que ela vai armazenar nomes de pessoas. Seu conjunto de operaes :
1. 2. 3. 4. Criar a lista: criar (L) Inserir um elemento x na posio j: inserir (L,x,j) Eliminar o elemento da posio j: eliminar (L,j) Determinar a posio da primeira ocorrncia de um elemento x: posio (L,x):inteiro. 5. Imprimir o elemento da posio j: imprimir (L,j). 6. Determinar o nmero de elementos da lista:
tamanho (L):inteiro.

7. Determinar se a lista est vazia: vazia(L):lgico.

Listas: Exemplo de implementao Parcial


T Assim, a seguinte seqncia de operaes:
criar(L1) inserir(L1,Joo,1) inserir(L1,Maria,2) inserir(L1,Jos,2) Produziria a lista: Joo, Jos, Maria

T Supondo que, a seguir fosse executada a


operao:
eliminar (L1,3) A lista ficaria: Joo, Jos.

T O cdigo para imprimir a lista toda seria parecido


com:
para i de 1 at tamanho(L1) faa imprimir (L1,i) fim para

Listas: Exemplo de implementao Parcial


T Essa uma caracterstica tpica de um tipo
abstrato de dados: uma vez definido, ele pode ser utilizado por uma aplicao sem que se saiba a forma como foi implementado. Basta para isso saber quais suas operaes e que forma elas assumem.

Listas: Exemplo de implementao Parcial


Supondo implementao dinmica da lista anterior, pode-se defin-la da seguinte forma: tipo
tipo_dado = cadeia[40]
dado prox

elemento = registro dado: tipo_dado prox: >elemento fim registro lista = >elemento

Listas: Exemplo de implementao Parcial


Assim, o resultado fsico da seqncia de operaes data anteriormente seria:
L1:lista criar(L1)
L1

inserir(L1,Joo,1)
L1

Joo

Listas: Exemplo de implementao Parcial


inserir(L1,Maria,2)
L1

Joo
inserir (L1,Jos,2)
L1

Maria

Joo

Jos

Maria

Listas: Criar a lista e descobrir o tamanho da lista


tipo tipo_dado = cadeia[40] tipo_pont = >elemento elemento = registro dado: tipo_dado prox: tipo_pont fim registro lista = tipo_pont Subprograma tamanho (L): inteiro e: L: lista r: nmero de elementos da lista variveis cont:inteiro pont: lista incio cont 0 pont L Subprograma criar (L) e/s: L: lista incio L NULO fim L enquanto pont NULO faa cont cont + 1 pont pont^.prox fim enquanto fim

Listas: Inserir um elemento na lista


inserir (L,x,j)
L

Joo

Maria

inserir (L,Jos,2)
novo_p

novo_p L

Jos Joo Maria Jos Joo Maria

novo_p L

Listas: Inserir um elemento na lista


inserir (L,x,j)
Subprograma inserir (L,x,pos) e/s: L : lista e:x: tipo_dado {dado a ser inserido} pos:inteiro {posio de insero} variveis novo_p,p_ant:lista i : inteiro incio aloque(novo_p) novo_p^.dado x Se vazia(L) ento L novo_p L^.prox NULO seno Se pos = 1 ento novo_p^.prox L L novo_p seno

Se pos > tamanho (L) ento procura tamanho(L) seno procura pos -1 fim se p_ant L para i de 1 at procura-1 faa p_ant p_ant^.prox fim para novo_p^.prox p_ant^.prox p_ant^.prox novo_p fim se fim se fim

Listas: Eliminar um elemento na lista


eliminar (L,j)
L

Joo
eliminar (L,2) p_ant
L

Jos

Maria

Joo
L

Jos

Maria

Joo
p

Jos

Maria
libere (p)

Listas: Eliminar um elemento na lista (exerccio)


eliminar (L,j)
Subprograma eliminar (L,pos) e/s: L : lista e: pos:inteiro {posio de insero} variveis p, {ponteiro auxiliar para a liberao} p_ant:lista {aponta elemento anterior ao que vai ser eliminado} i : inteiro incio Se no vazia(L) e pos < tamanho(L) ento Se pos = 1 ento pL L L^.prox seno p_ant L para i de 1 at pos-2 faa p_ant p_ant^.prox fim para p p_ant^.prox p_ant^.prox p^.prox fim se libere(p) fim se fim

Listas: Buscar um elemento na lista (exerccio)


buscar (L,x): inteiro

Listas: Implementao em Pascal (exerccio)

10

Pilha: Caso particular de lista


T Pilhas so listas especiais onde tanto a insero T
quanto a eliminao de elementos ocorre apenas em um dos extremos (chamado topo). Por exemplo, se, numa pilha vazia de nomes fossem inseridos :

T Por exemplo, numa garagem residencial que possui

Joo, Maria e Jos, nesta ordem, A prxima insero (p. exemplo, Lia) seria aps o Jos, ficando: Joo, Maria, Jos e Lia. Como no h liberdade para eliminar elemento em posies arbitrrias, o primeiro elemento a ser eliminado seria Lia, depois Jos, depois Maria, depois Joo.

largura para um carro mas comprimento para vrios, o ltimo a ser inserido o primeiro que precisa sair.

Pilha: Ilustrao da implementao encadeada


1. Pilha vazia:
topo

2. Depois de inserir Joo:


topo

Joo
3. Depois de inserir Maria

topo

Maria

Joo

4. Depois de inserir Jos


topo

Jos

Maria

Joo

5. Depois de inserir Lia:


topo

Lia

Jos

Maria

Joo

11

Pilha: Ilustrao da implementao encadeada


topo

Lia

Jos

Maria

Joo

6. Depois de eliminar:
topo

Jos

Maria

Joo

7. Depois de eliminar:
topo

Maria

Joo

8. Depois de eliminar:
topo

Joo

9. Depois de eliminar:
topo

Fila: Caso particular de lista


T Filas so listas especiais onde a insero de um T
elemento se d no incio enquanto que a eliminao de elementos ocorre apenas no fim. Por exemplo, se, numa lista vazia de nomes fossem inseridos :

T Por exemplo, uma lista de espera ou uma fila de

Joo, Maria e Jos, nesta ordem, A prxima insero (p. exemplo, Lia) seria no fim, aps o Jos, ficando: Joo, Maria, Jos e Lia. Como no h liberdade para eliminar elemento em posies arbitrrias, o primeiro elemento a ser eliminado seria o elemento do incio (Joo), depois Maria, depois Jos e depois Lia.

banco funciona assim: o primeiro que entra o primeiro que sai.

12

Fila: Ilustrao da implementao encadeada


1. Fila vazia:
incio incio fim fim

2. Depois de inserir Joo:

Joo
3. Depois de inserir Maria

incio

Joo

Maria
4. Depois de inserir Jos
fim

incio

Joo

Maria

Jos
fim

incio

Joo

5. Depois de inserir Lia: Maria Jos Lia


fim

Fila: Ilustrao da implementao encadeada


incio

Joo

Maria

Jos

Lia
fim

6. Depois de eliminar:
incio

Maria

Jos

Lia
fim

7. Depois de eliminar:
incio

Jos

Lia
fim

8. Depois de eliminar:
incio fim

Lia
9. Depois de eliminar:
incio fim

13

EXERCCIOS Pilhas: Implementar pseudo-cdigo e Pascal


Operaes: criar, inserir (push), eliminar(pop), topo (recupera o valor do elemento de topo), destruir

Filas: Implementar pseudo-cdigo e Pascal


Operaes: criar, inserir, eliminar, incio (recupera o valor do elemento do incio), fim (recupera o valor do elemento do fim), nmero de elementos da fila, destruir

Listas
Introduo Cincia da Computao Rosane Minghim
Apoio na confeco: Rogrio Eduardo Garcia

14

Você também pode gostar