TÓPICO 2 – BASES COMPUTACIONAIS
2.1 MODELO PARA UM TAD
Vejamos a figura a seguir:
Neste tópico entenderemos esta estrutura de dados para a implementação e discutiremos vários tipos abstratos de dados.
FIGURA 38 – MODELO DE TAD
FONTE: Forouzan e Mosharraf (2011, p. 281)
Entendendo a figura, podemos destacar que a área do contorno irregular representa o TAD. Dentro dele estão as duas partes diferentes do modelo. A estrutura de dados e as operações públicas e privadas. O programa de aplicação apenas pode acessar as operações públicas por meio da interface. As operações privativas são destinadas ao uso interno pelo TAD. As estruturas de dados, como o vetor, os registros e as listas encadeadas estão dentro da TAD e são utilizadas pelas operações públicas e privadas.
As operações públicas e a interface devem ser independentes da implementação, já as operações privativas são dependentes das estruturas de dados escolhidas durante a implementação do TAD. As linguagens de computador não oferecem pacotes de TADs, por isso para ser utilizado precisa primeiro ser implementado e mantido em uma biblioteca (FOROUZAN; MOSHARRAF, 2011).
2.2 ENTENDENDO PILHAS
Pilha é uma lista linear restrita, onde todas as adições e exclusões são efetuadas em uma extremidade, chamada topo. Se inserirmos uma série de itens de dados em uma pilha e removermos, a ordem delas é invertida. Por exemplo se a entrada de dados fosse 25, 30, 35, 40 seria removida como 40, 35, 30, 25. Este atributo de inversão torna as pilhas estrutura de dados chamada LIFO (last in, first
Em nosso dia a dia utilizamos muitos e diferentes tipos de pilhas. O que nos é mais comum são pilhas de moedas ou de livros. Qualquer situação que podemos adicionar ou remover um objeto do topo caracteriza uma pilha. Caso queira remover um objeto diferente daquele que está no topo, primeiro devemos remover todos os objetos acima dele (FOROUZAN; MOSHARRAF, 2011).
FIGURA 39 – REPRESENTAÇÃO DE PILHAS
FONTE: Forouzan e Mosharraf (2011, p. 282)
Existem muitas operações com pilha, mas na computação existem quatro básicas: pilha cria, pilha_insere, pilha exclui e pilha_vazia.
Para criarmos uma pilha vazia temos a seguinte sintaxe: pilha_cria (nomedapilha)
nomedapilha é o nome da pilha a ser criada. Essa operação apresenta como resultado uma pilha vazia (FOROUZAN; MOSHARRAF, 2011).
FIGURA 40 – REPRESENTAÇÃO DE CRIAÇÃO DE UMA PILHA
FONTE: Forouzan e Mosharraf (2011, p. 282)
pilha_cria
Operação
pilha_vazia
A operação inserção na fila insere um item no topo da fila. Veja a sintaxe: pilha_isere(nomedapilha, itemdedados)
nomedapilha é o nome da pilha e item de dados se refere aos dados a serem inseridos no topo da pilha. Depois da operação de inserção, o novo item se torna o topo.
FIGURA 41 – REPRESENTAÇÃO DA OPERAÇÃO INSERÇÃO
FONTE: Forouzan e Mosharraf (2011, p. 282)
A operação exclusão da fila exclui o item no topo da fila. Veja a sintaxe: pilha_exclui(nomedapilha, itemdedados)
nomedapilha é o nome da pilha e item de dados se refere aos dados a serem excluídos da pilha.
FIGURA 42 – REPRESENTAÇÃO DE OPERAÇÃO DE EXCLUSÃO
FONTE: Forouzan e Mosharraf (2011, p. 283)
30 78 20 Elemento do topo Pilha antes da exclusão pilha_exclui Operação 30 Dados eliminados 78 20 Elemento do topo Pilha antes da exclusão Elemento do topo Elemento do topo 30 78 20 20 78 30 Dados a serem inseridos Operação pilha_insere Pilha depois da inserção Pilha depois da inserção
O item excluído pode ser utilizado pelo programa da aplicação ou ser descartado. Depois que o item é excluído, o item que estava abaixo do elemento do topo antes da exclusão passa ser o do topo. Isto resulta em uma nova pilha com um
A operação pilha vazia verifica o status da pilha. Veja a sintaxe: pilha_vazia(nomedapilha)
nomedapilha é o nome da pilha. Esta operação resulta em verdadeiro se a pilha estiver vazia, senão resulta em falso.
Para definirmos uma pilha como um TAD utilizamos conforme segue: TAD de pilhas
Definição: uma lista de itens de dados que somente pode ser acessada em uma extremidade, chamada topo da pilha.
Operações: pilha_cria: cria uma pilha vazia.
pilha_insere: insere um elemento no topo. pilha_exclui: exclui um elemento no topo.
pilha_vazia: verifica o status da pilha.
FONTE: Forouzan e Mosharraf (2011, p. 283)
FIGURA 43 – APLICANDO OPERAÇÃO DE PILHA
FONTE: Forouzan e Mosharraf (2011, p. 284)
Analisando a Figura 43, o algoritmo aplica as operações definidas anteriormente em uma pilha P. Na operação ela verifica o status da pilha antes de tentar eliminar o elemento do topo. O valor deste elemento é armazenado na variável x. Porém, não utilizamos este valor, ele será descartado automaticamente
pilha_cria (P) pilha_insere (P, 10)
se (não pilha_vazia (P) ) pilha_exclui (P, X)
pilha_insere (P, 12) pilha_insere (P, 2) P P P P P
10
12
10
2
10
10
Classificamos as aplicações de pilhas em inversão de dados, emparelhamento de dados, adiamento do uso de dados e rastreamento de caminho.
A inversão de dados é uma categoria que exige um determinado conjunto de itens de dados reordenado, de modo que o primeiro e o último troquem de posição entre si, e que todas as posições entre o primeiro e último item, também sejam trocadas relativamente.
Ainda quando falamos de implementação de pilhas, precisamos escolher uma estrutura de dados para implementá-los. Os TADs de pilhas podem ser implementados utilizando um vetor ou uma lista encadeada (FOROUZAN; MOSHARRAF, 2011).
FIGURA 44 – EXEMPLO DE UMA IMPLEMENTAÇÃO DE PILHAS
FONTE: Forouzan e Mosharraf (2011, p. 286)
a. TAD topo contador topo S [n] [6] [5] [4] [3] [2] [1] S contador topo b. Implementação
em vetor c. Implementação emlista encadeada
Na figura anterior temos a implementação em um vetor com o registro com dois campos. O primeiro pode ser utilizado para armazenar informações sobre o vetor utilizando um campo de contagem chamado contador, o qual a cada momento mostra o número de itens de dados na pilha. O segundo é um número inteiro que mantém o índice do elemento do topo. O vetor é mostrado do último (topo) para o primeiro para corresponder a implementação em lista encadeada. A implementação em lista encadeada é similar onde temos um nó extra cujo nome é o da pilha. Esse nó também tem dois campos, um contador e um ponteiro que aponta o elemento do topo (FOROUZAN; MOSHARRAF, 2011).
2.3 ENTENDENDO FILAS
Filas são listas lineares nas quais os dados podem ser inseridos somente em uma extremidade, chamada fim da fila. Essas restrições asseguram que os dados sejam processados por intermédio da fila na ordem em que são recebidos. A estrutura de uma fila é chamada de FIFO (first in, first out), traduzindo, primeiro a entrar e primeiro a sair.
Utilizamos filas em nosso cotidiano, fila de pessoas esperando o ônibus, uma relação de chamadas colocadas em espera para serem respondidas por uma telefonista, uma lista de tarefas em espera a serem executadas por um computador (FOROUZAN; MOSHARRAF, 2011).
FIGURA 45 – REPRESENTAÇÃO DE FILAS
FONTE: Forouzan e Mosharraf (2011, p. 286)
Uma fila de pessoas
exclui (fila_exclui)
inicio fim
insere (fila_insere) Uma fila no computador
Como pilhas, filas também possuem muitas operações, vamos ver as quatro básicas: fila_cria, fila_insere, fila_exclui e fila_vazia.
Para a criação de uma fila vazia utiliza-se a sintaxe a seguir: fila_cria(nomedafila)
nomedafila é o nome a ser criado, e esta operação apresenta como resultado uma fila vazia (FOROUZAN; MOSHARRAF, 2011).
FIGURA 46 – REPRESENTAÇÃO DE CRIAÇÃO DE FILA
FONTE: Forouzan e Mosharraf (2011, p. 287)
fila_cria
Operação
Fila vazia
Para operação de inserção de um item na fila utiliza-se a sintaxe a seguir: fila_insere(nomedafila, itemdedados)
nomedafila é o nome a ser criado, e o itemdedados refere-se aos dados a serem inseridos no fim da fila. Após inserção, o novo item passa a ser o último da fila. Isto apresenta como resultado a nova fila com o itemdedados inserido no fim dela (FOROUZAN; MOSHARRAF, 2011).
FIGURA 47 – REPRESENTAÇÃO DE OPERAÇÃO DE INSERÇÃO
FONTE: Forouzan e Mosharraf (2011, p. 287)
Para operação de exclusão de um item na fila utiliza-se a sintaxe a seguir: fila_exclui(nomedafila, itemdedados)
nomedafila é o nome a ser criado, e o itemdedados refere-se aos dados a serem excluídos da fila. Como na fila depois da operação de exclusão, o item seguinte ao elemento do início da fila passa a ocupar sua posição. Esta operação apresenta como resultado a nova fila, com um elemento a menos (FOROUZAN; MOSHARRAF, 2011).
FIGURA 48 – REPRESENTAÇÃO DE OPERAÇÃO DE EXCLUSÃO
FONTE: Forouzan e Mosharraf (2011, p. 288)
inicio
da fila da filafim inicio
da fila da filafim
20
20
Operação Fila depois
Fila antes
78
78
34
fila_exclui34
Dado excluído
Para a verificação de status de fila vazia utilizamos a operação filavazia
Operação Fila depois
Fila antes inicio
da fila da filafim da filainicio da filafim
fila_insere Dado a ser inserido
20
78
20
78
34
34
Operação
nomedafila é seu nome. Esta operação resulta verdadeiro se a fila estiver vazia, e se não estiver retorna falso (FOROUZAN; MOSHARRAF, 2011).
TAD de filas
Definição: uma lista de itens de dados na qual um item pode ser excluído de uma extremidade, chamada início da fila ou pode ser inserido na outra, chamada fim da fila.
Operações: fila_cria: cria uma fila vazia.
fila_insere: insere um elemento no fim da fila. fila_exclui: exclui um elemento no início da fila. fila_vazia: verifica o status da fila.
FONTE: Forouzan e Mosharraf (2011, p. 288).
FIGURA 49 – REPRESENTAÇÃO DE UM ALGORITMO DE FILA
FONTE: Forouzan e Mosharraf (2011, p. 289)
fila_cria (F) fila_insere (F, 10)
se ( não fila_vazia (F) fila_exclui (F, X) fila_insere (F, 12) fila_insere (F, 2)
10 12
10
12 2
12
F F F F FA figura nos demonstra um algoritmo em uma fila F. A condição se verifica o status da fila antes de tentar excluir o elemento inicial. O valor deste elemento é armazenado na variável x, porém não utilizamos este valor, ele será descartado automaticamente ao final do algoritmo.
As filas são uma das estruturas mais comuns de processamento de dados. Vejamos a seguir a figura com um algoritmo de fila:
Spool de impressão é um espaço na memória do seu computador (no HD) onde
ficam armazenados em fila (essa fila depende das prioridades dos usuários que enviaram o arquivo ou da ordem de chegada) os arquivos para impressão.
NOTA