Estruturas de Dados Dinâmicas – Parte 1 Objetivo: Apresentar as

Propaganda
Estruturas de Dados Dinâmicas – Parte 1
Objetivo:
Apresentar as estruturas de dados freqüentemente utilizadas na programação, por meio de diagramas e
exemplos simples, para facilitar o entendimento e sua implementação.
Listas;
Filas;
Pilhas;
Listas
Uma lista é uma coleção de elementos do mesmo tipo dispostos linearmente que podem ou não seguir uma
determinada organização.
Por exemplo: [E1, E2, E3, E4, E5, ..., En], onde n deve ser > = 0.
Lista de Pagamentos:
Prestação do carro;
Cartão de crédito;
Conta de luz;
Condomínio;
TV a cabo;
Prestação do crediário.
Listas Simples
Implementadas por meio de arranjos: quando criamos uma lista para utilizá-la como uma estrutura de
dados, pode-se utilizar como contêiner para o armazenamento dos dados um vetor ou uma matriz ;
Lista de pagamentos: prestação do carro, cartão de crédito, conta de luz, condomínio, TV a cabo, prestação
do crediário.
Listas Encadeadas
Encadeadas: quando usamos a alocação dinâmica, precisamos referenciar os elementos seguinte e anterior,
de cada elemento da lista.
O elemento 1 aponta para o elemento 2, o elemento 2 aponta para o elemento 3 e assim por diante:
Listas Encadeadas Simples
Os elementos da lista possuem apenas um ponteiro que aponta para o elemento sucessor ou próximo.
Algoritmo ExemploListaSimples
Tipo apontador: ^NoSimples
NoSimples = registro
valor: inteiro
prox: apontador
fim
ListaSimples = registro
primeiro: apontador
ultimo: apontador
fim
Inicio
ListaSimples.primeiro  nulo
ListaSimples.ultimo  nulo
Procedimento InserirNoFInal
Procedimento InsereNo_fim (var novoNo: NoSimples)
Inicio
NovoNo^.prox  nulo
Se (ListaSimples.primeiro = nulo) Então
ListaSimples.primeiro  novoNo
Fim-Se
Se (ListaSimples.ultimo <> nulo) Então
ListaSimples.ultimo^.prox  novoNo
Fim-Se
ListaSimples.ultimo  novoNo
Fim
Listas Duplamente Encadeadas
Cada elemento possui um campo que aponta para o seu predecessor (anterior) e outro para o seu sucessor
(próximo):
Algoritmo ExemploListaDupla
Tipo apontador: ^NoDuplo
NoDuplo = registro
valor: inteiro
prox: apontador
ant: apontador
fim
ListaDupla = registro
primeiro: apontador
ultimo: apontador
numero_nos: inteiro
fim
inicio
ListaDupla.numero_nos  0
ListaDupla.primeiro  nulo
ListaDupla.ultimo  nulo
Listas Circulares
O ponteiro próximo do último elemento aponta para o primeiro; e o ponteiro anterior do primeiro elemento
aponta para o último.
Filas
As filas (queues) são conjuntos de elementos (ou listas) cujas operações de inserção são feitas por uma
extremidade e as de remoção, por outra extremidade.
Algoritmo Fila
Var
Tipo fila_reg = registro
inicio: inteiro
fim: inteiro
elemento: vetor [1..50] de inteiro
fim
total: inteiro
fila: fila_reg
Inicio
fila.inicio  0
fila.fim  0
total  0
Procedimento enfileirar( elem: inteiro)
inicio
Se (cheia( ) = .f..) então
fila.elemento[inicio]  elem
fila.fim  fila.fim + 1
total  total + 1
Se (fila.fim >= 50) então
fila.fim = 0
fim-se
senão
Mostre( "Fila cheia!")
fim-se
fim
Funcao desenfileirar( ): inteiro
var
excluido: inteiro
inicio
Se (vazia( ) = .f.) então
excluido  fila.elemento[inicio]
fila.inicio  fila.inicio + 1
Se (fila.inicio > = tamanho) então
fila.inicio  0
fim-se
total  total - 1
retorne excluido
senão
excluido  nulo
retorne excluido
fim-se
fim
Pilhas
É uma lista linear em que todas as operações de inserção e remoção são feitas por um único extremo
denominado topo.
Algoritmo Pilha
var
Tipo pilha_reg = registro
topo: inteiro
elemento: vetor[1..50] de inteiros
fim
pilha: pilha_reg
inicio
pilha.topo  -1
Função vazia( ): lógica
início
Se (pilha.topo = -1) então
retorne .v.
senão
retorne .f.
fim-se
fim
Função cheia( ): lógica
início
Se (pilha.topo >= 50) então
retorne .v.
senão
retorne .f.
fim-se
fim
Procedimento empilhar( elem: inteiro)
início
Se (cheia( ) = .f. ) então
pilha.topo  pilha.topo + 1
elemento.topo  elem
senão
Mostre("Pilha Cheia!")
fim-se
Função desempilhar( ): inteiro
var
valorDesempilhado:inteiro
início
Se (vazia ( ) = .f.) então
Mostre("Pilha vazia!")
valorDesempilhado  nulo
retorne(valorDesempilhado)
senão
valorDesempilhado  pilha.vetor[topo]
pilha.topo  pilha.topo - 1
retorne(valorDesempilhado)
fim-se
Download