Você está na página 1de 8

Abstrao de Dados

Um processo qualquer sequncia finita ordenada de


passos que visa promover transformaes definidas
sobre uma determinada matria-prima.

ENTRADA
SADA

PROCESSO

(estado inicial)
(estado final)

TAD Lista Linear (1/2)


Para criar um tipo abstrato de dados Lista, necessrio definir um
conjunto de operaes sobre os objetos do tipo Lista. O conjunto de
operaes a ser definido depende de cada aplicao, no existindo um
conjunto de operaes que seja adequado a todas as aplicaes.
1. Criar um lista linear vazia.
2. Inserir um novo item imediatamente aps o i-simo item.
3. Retirar o i-simo item.
4. Localizar o i-simo item para examinar e/ou alterar o contedo de
seus componentes.
5. Combinar duas ou mais listas lineares em uma lista nica.
6. Partir uma lista linear em duas ou mais listas.
7. Fazer uma cpia da lista linear.
8. Ordenar os itens da lista em ordem ascendente ou descendente,
de acordo com alguns de seus componentes.
9. Pesquisar a ocorrncia de um item com um valor particular em algum
componente.

TAD Lista Linear (2/2)


Restringindo o conjunto de operaes necessrio para uma aplicao
que utilize o TAD Lista Linear:
1. FazListaVazia(Lista). Faz a lista ficar vazia.
2. ListaVazia(Lista). Esta funo retorna 1 (true) se a lista est vazia;
seno retorna 0 (false).
3. Imprime(Lista). Imprime os itens da lista na ordem de
ocorrncia.
4. Insere(x, Lista). Insere x aps o ltimo item da lista. (ou)
4. Insere(x, Lista, p). Insere x na posio p da lista.
5. Retira(p, Lista, x). Retira o item x que est na posio p da lista,
retirando-o da lista e deslocando os itens a partir da posio p+1
para as posies anteriores.
Existem vrias estruturas de dados que podem ser usadas para
representar listas lineares, cada uma com vantagens e desvantagens
particulares. As duas representaes mais utilizadas so as
implementaes atravs de arranjos (vetores) e de apontadores.
Implementao de Listas atravs de Arranjos
// modelo matemtico (estrutura de dados)
struct TipoItem {

// cada item da lista corresponde a um

char nome[30]; // registro (TipoItem) composto apenas


};

// do campo nome

const maxTam = 10;

// tamanho mximo da lista

struct TipoLista {
TipoItem Item[maxTam];
int Ultimo;
};
O campo Item o principal componente do registro TipoLista. Os itens

so armazenados em um vetor de tamanho suficiente para armazenar a


lista. J o campo Ultimo do registro TipoLista contm o valor da
posio do ltimo elemento da lista. O i-simo item da lista est
armazenado na i-sima posio do vetor, 0 i Ultimo. A constante
maxTam define o tamanho mximo permitido para a lista.
Implementao de Listas atravs de Arranjos
// Insere o item 'x' na final da 'Lista'.
int Insere(TipoItem x, TipoLista *Lista) {
if (Lista->Ultimo == (maxTam 1))
return(0);

// Erro: Lista Cheia !

else {
Lista->Ultimo = Lista->Ultimo + 1;
// item inserido no final da lista
Lista->Item[Lista->Ultimo] = x;
return(1); // Item inserido com sucesso
}
}
TAD Pilha (1/4)
Existem aplicaes para listas lineares nas quais inseres,
retiradas e acessos a itens ocorrem sempre em um dos
extremos da lista. Uma pilha uma lista linear em que todas
as inseres, retiradas e geralmente todos os acessos so
feitos em apenas um extremo da lista.
Os itens em uma pilha esto colocados um sobre o outro, com
o item inserido mais recentemente no topo e o item inserido
menos recentemente no fundo.
O modelo intuitivo de uma pilha o de um monte de pratos
em uma prateleira, sendo conveniente retirar os pratos ou

adicionar novos pratos na parte superior.


TAD Pilha (2/4)
As pilhas possuem a seguinte propriedade: O LTIMO ITEM
INSERIDO O PRIMEIRO ITEM QUE PODE SER RETIRADO
DA LISTA. Por esta razo as pilhas so chamadas de listas LIFO,
termo formado a partir de Last-In, First-Out.

Existe uma ordem linear para pilhas, que a ordem do "mais recente
para o menos recente".
Esta propriedade torna a pilha uma ferramenta ideal para processamento
de estruturas aninhadas de profundidade imprevisvel, situao em
que necessrio garantir que subestruturas mais internas sejam
processadas antes da estrutura que as contenham. A qualquer instante
uma pilha contm uma sequncia de obrigaes adiadas, cuja ordem de
remoo da pilha garante que as estruturas mais internas sero
processadas antes das estruturas mais externas.
TAD Pilha (3/4)
Estruturas aninhadas ocorrem frequentemente na prtica. Um
exemplo simples a situao em que necessrio caminhar
em um conjunto de dados e guardar uma lista de coisas a fazer
posteriormente.
O controle de chamadas de subprogramas e sintaxe de
expresses aritmticas so exemplos de estruturas aninhadas.
As pilhas ocorrem tambm em conexo com algoritmos
recurssivos e estrutura de natureza recursiva, tais como as
rvores.
Em Sntese: Pilha um caso especial de Lista Linear.
TAD Pilha (4/4)

Um tipo abstrato de dados Pilha, acompanhado de um conjunto de


operaes, apresentado a seguir.
1. FazPilhaVazia(Pilha). Faz a pilha ficar vazia.
2. PilhaVazia(Pilha). Esta funo retorna 1 (true) se a pilha est vazia;
seno retorna 0 (false).
3. Empilha(x, Pilha). Insere o item x no topo da pilha.
4. Desempilha(Pilha, x). Retira o item x que esta no topo da pilha.
5. ImprimePilha(Pilha). Imprime os itens da pilha (do mais recente
para o menos recente).
Como no caso do tipo abstrato de dados Lista, existem vrias opes de
estruturas de dados que podem ser usadas para representar Pilhas. As
duas representaes mais utilizadas so as implementaes atravs de
arranjos (vetores) e de apontadores.
Implementao de Pilhas atravs de Arranjos
// modelo matemtico (estrutura de dados)
struct TipoItem {

// cada item da pilha corresponde a um

char nome[30]; // registro (TipoItem) composto apenas


};

// do campo nome

const maxTam = 10;

// tamanho mximo da pilha

struct TipoPilha {
TipoItem Item[maxTam];
int Topo;
};
O campo Item o principal componente do registro TipoPilha. Os itens
so armazenados em um vetor de tamanho suficiente para armazenar a
pilha. J o campo Topo do registro TipoPilha contm o valor da posio
do item que est no topo da pilha. A constante maxTam define o
tamanho mximo permitido para a pilha.

Implementao de Pilhas atravs de Arranjos


// Insere o item 'x' no 'Topo' da 'Pilha'.
int Empilha(TipoItem x, TipoPilha *Pilha) {
if (Pilha->Topo == (maxTam 1))
return(0);

// Erro: Pilha Cheia !

else {
Pilha->Topo = Pilha->Topo + 1;
// item inserido no topo da pilha
Pilha->Item[Pilha->Topo] = x;
return(1);

// Item inserido com sucesso

}
}
TAD Fila (1/2)
Uma fila uma lista linear em que todas as inseres so realizadas em
um extremo da lista, e todas as retiradas e geralmente os acessos so
realizados no outro extremo da lista.
O modelo intuitivo de uma fila o de uma fila de espera em que as
pessoas no incio da fila so servidas primeiro e as pessoas que chegam
entram no fim da fila. Por esta razo as filas so chamadas de listas
FIFO, termo formado a partir de First-In, First-Out.
Existe uma ordem linear para filas que a ordem de chegada.
Filas so utilizadas quando desejamos processar itens de acordo com a
ordem PRIMEIRO-QUE-CHEGA, PRIMEIRO-ATENDIDO.
Sistemas operacionais utilizam filas para regular a ordem na qual tarefas
devem receber processamento e recursos devem ser alocados a
processos.
TAD Fila (2/2)
Um possvel conjunto de operaes, definido sobre um tipo abstrato

de dados Fila, definido a seguir.


1. FazFilaVazia(Fila). Faz a fila ficar vazia.
2. FilaVazia(Fila). Esta funo retorna 1 (true) se a fila est vazia;
seno retorna 0 (false).
3. Enfileira(x, Fila). Insere o item x no final da fila.
4. Desenfileira(Fila, x). Retira o item x que est no incio da fila.
5. ImprimeFila(Fila). Imprime os itens da fila (obedecendo a ordem
de chegada).
Como no caso do tipo abstrato de dados Lista, existem vrias opes de
estruturas de dados que podem ser usadas para representar filas. As
duas representaes mais utilizadas so as implementaes atravs de
arranjos (vetores) e de apontadores.
Implementao de Filas atravs de Arranjos
// modelo matemtico (estrutura de dados)
struct TipoItem {

// cada item da fila corresponde a um

char nome[30]; // registro (TipoItem) composto apenas


};

// do campo nome

const maxTam = 10;

// tamanho mximo da fila

struct TipoFila {
TipoItem Item[maxTam];
int Frente;
int Final;
int Tamanho;
};
O campo Item o principal componente do registro TipoFila. O
tamanho mximo do vetor circular definido pela constante maxTam.
Os outros campos do registro TipoFila contm apontadores para a parte
da frente (campo Frente) e final (campo Final) da fila. O campo

Tamanho indica a quantidade de itens armazenados na fila.


Implementao de Filas atravs de Arranjos
// Insere o item 'x' no 'Final' da 'Fila'.
int Enfileira(TipoItem x, TipoFila *Fila) {
if (Fila->Tamanho == maxTam)
return(0);

// Erro: Fila Cheia !

else {
// item inserido no final da fila
Fila->Item[Fila->Final] = x;
Fila->Final = Fila->Final + 1;
// se ltima posio ento volta para a primeira
// posio do vetor (vetor circular)
if (Fila->Final == maxTam)
Fila->Final = 0;
Fila->Tamanho = Fila->Tamanho + 1;
return(1); // Item inserido com sucesso
}
}

Você também pode gostar