Sunteți pe pagina 1din 17

Curso de nivelamento 2016:

Algoritmos e estrutura de dados


Tulipa Silva
Programa de P
os-Graduaca
o em Metodos Numericos em Engenharia PPGMNE/UFPR

Introduc
ao - Aula 0

Algoritmo: e uma sequencia finita e bem definida de passos que, quando


executados, realizam uma tarefa especfica ou resolvem um problema.
Propriedades do algoritmo:
Composto por ac
oes simples e bem definidas (nao pode haver ambiguidade,
ou seja, cada instruc
ao representa uma acao que deve ser entendida e realizada)
Sequencia ordenada de acoes
Conjunto finito de passos
Exerccio 1:(Torre de Han
oi) Regra: Mover os discos de uma haste para
a outra sem que um disco maior fique sobre um disco menor. Escreva um algoritmo capaz de resolver o problema da Torre de Hanoi com 3 discos, como
esquematizado em Fig 1.

Fig. 1. Ilustraca
o Torre de Han
oi

Programas: representam uma classe especial de algoritmos capazes de serem


seguidos por computadores.
Um computador s
o e capaz de seguir programas em linguagem de maquina.
Uma linguagem de programacao e uma tecnica de notacao para programar, com
a intenc
ao de servir de veculo tanto para a expressao do raciocnio algortmico
quanto para a execuc
ao automatica de um algoritmo por um computador.
Algoritmo Computacional: possui instrucoes que podem ser executadas pelo
computador, no entanto, est
a escrito em linguagem nao conhecida pelo computador (programa). Um exemplo de linguagem computacional e o pseudocodigo.
Por simplificac
ao, iremos nos referir ao algoritmo computacional apenas como
algoritmo.
Pseudolinguagem (pseudoc
odigo): e um linguagem especial que utiliza express
oes pre-definidas para representar acoes e fluxos de controle. Funciona
como uma linguagem simplicada de programacao, com estrutura similar. Utiliza palavras chaves como do (faca), if then (se entao), else (senao), for (para),
identado por blocos de comando, possui um comando
while(enquanto), etc. E
por linha, entre outras caractersticas.
O peseudoc
odigo n
ao e padrao.Existem diversas palavras chaves e ou mesmo
idiomas para se escrever um pseudocodigo. Quando o peseudocodigo esta em
Portugues e chamado Portugol. Neste material as palavras chave serao utilizadas em Ingles afim de facilitar a implementacao posterior dos algoritmos.
Exemplo: Calcular a media final de um aluno, sendo que foram realizadas 4
provas de mesmo peso no perodo.
Algoritmo: CalculaMedia
read p1, p2, p3, p4
m = (p1 + p2 + p3 + p4)/4.
print m
Uma vez que, o computador so conhece os valores que estao armazenados na
sua mem
oria, a maioria das instrucoes esta associada ao processo de armazenamento ou transformac
aodestes valores.
Para fins de estudo de algoritmo podemos considerar a memoria como conjunto de posic
oes. Cada posicao recebe uma identificacao (nome) e armazena
um ou mais valores, de acordo com o tipo de estrutura. Por exemplo idade=18,
x1=2.5. Onde os identificadores sao idade e x1, enquanto que os valores
associados s
ao 18 e 2.5.
Tipos primitivos de dados:
Num
ericos:
Inteiro(int)

Real(float)
N
ao n
umericos:
Booleano(l
ogico): True, False
Caracter(string): a, @, nome
Tipos de operadores:
Relacionais: ==(igual comparativo), / = (diferente), > (maior que), <=
(menor ou igual)
L
ogicos: and, or, not (e, ou, nao)
Aritmeticos: +, -, /, * (multiplicacao), (potenciacao)
Obs.1: Operadores l
ogicos e relacionais resultam em valores booleanos (True
ou False)
Obs.2: O sinal = representa atribuicao. Assim, x = 4 significa x recebe 4.
Portanto, o sinal comparativo de igualdade e, em geral ==. Ou seja, x == 4
resulta em True ou False, dependendo do que existe neste identificador.
Obs.3: Para usar um valor literal e necessario usar aspas (em algumas linguagens n
ao h
a distinc
ao entre aspas simples ou dupla). Portanto x e uma string
e x e um identificador que, caso nao esteja definido, ira resultar em erro.
Obs.4: Os operados podem mudar de acordo com a linguagem.
Estruturas de controle: (Comandos de sele
c
ao) Comandos if then(se
ent
ao) e else(sen
ao). O comando if executa um bloco especfico se, e somente
se, a condic
ao testada for verdadeira. No caso em que a condicao testada e falsa,
o bloco relacionado ao else sera executado. O comando if nao necessariamente
e seguido de else, no entanto, o comando else sempre e precedido por um bloco
relacionado a um if e, sempre e executado no caso de falha do u
ltimo if no mesmo
bloco de hierarquia.
Algoritmo: MostraModulo
read x
if x < 0 then
print x
else
print x
Obs.1: Em geral comandos da forma print sao usados para dados que serao
mostrados na tela e write para dados que serao escritos em arquivos.
Algoritmo: IndicaMultiplo5
read x
if mod(x, 5) == 0 then
print x, e multiplo de 5

A func
ao mod(x, y) retorna o resto da divisao de x por y, pode ser representado pelo operador %, x%y.
No algoritmo IndicaMultiplo5, caso o n
umero nao seja multiplo de 5, o que
ir
a aparecer na tela?
Estruturas aninhadas: s
ao comandos de selecao (if then e else) que possuem
outros comandos de selec
ao.
Obs.: N
ao h
a restric
ao ao tipo ou quantidade de instrucoes que serao inseridas
em um bloco de selec
ao.
Exerccio: Dado o pseudocodigo abaixo, qual sera a sada no monitor para o
caso em que x e A, B, C e D respectivamente?
Algoritmo: Exerccio 2
read x
if x == A then
print azul
x = C
if x/ = B then
print verde
x = B
else
print vermelho
print cinza
Existe alguma cor que sempre sera escrita? E, alguma que nunca sera escrita?
Escreva um algoritmo com estruturas de selecao (if then, else) encadeadas para
obter os mesmos resultados impressos pelo programa Exerccio 2. Escreva o
c
odigo em fluxograma.
Estruturas de repeti
c
ao:
While(Enquanto): repete o bloco enquanto a condicao, a ele associada, for
verdadeira.
Algoritmo: ExemploWhile
x=1
#valor inicial de x e 1
while x/ = 0
read x
print x
Obs.1: No comando while a condicao e verificada antes da execucao do bloco.
Portanto o bloco pode n
ao ser executado, por exemplo se tivessemos x = 0

definido inicialmente, os comandos internos ao while nao seriam executados.


Obs.2: Existe outra estrutura de repeticao que e o repeat (do while em C e
Fortran). Esta estrutura testa a condicao apos a execucao do bloco (Algoritmo:
ExemploRepeat).
Algoritmo: ExemploRepeat
repeat
read x
print x
until x/ = 0
A estrutura do comando repeat e muito u
til, por nao necessitar da previa
atribuic
ao de valor `
a condicao. No entanto, este comando pode ser substitudo
por uma execuc
ao do bloco seguida de while, ou while True com um if-break no
final.
for(para): repete o bloco de comandos enquanto a variavel de controle for
menor ou igual a um valor final.
Obs.1: Quando o passo nao e definido, o incremento padrao `a variavel de
controle e o acrescimo de 1.
Obs.2: Neste material usaremos a notacao for i=(incio, fim, passo).
Obs.3: Note que e possvel utilizar passo negativo, bem como incio>fim.
Algoritmo: ExemploFor
for i=(1,5)
print i

Fluxograma: uso de ilustracoes graficas para representar as instrucoes. Apresenta a l


ogica de um algoritmo, enfatizando passos individuais (objetos graficos)
e fluxo de execuc
ao (setas).

Teste de mesa: executar as tarefas sequencialmente, progressivamente, linha


ap
os linha, como o processador faria, afim de encontrar possveis falhas no algoritmo e/ou verificar se o algoritmo resolve o problema proposto.
Exerccio 3: Elabore um algoritmo para determinar o menor n
umero inteiro
fornecido pelo usu
ario. Onde 0 representa o fim da entrada de dados.

Fig. 2. Exemplos de fluxogramas

Exerccio 4: Faca um algoritmo que, sem utilizar o operador de exponenciacao,


realize a operac
ao de x elevado a y, para x e y fornecidos pelo usuario.
Exerccio 5: Realize o teste de mesa no algoritmo ObtemConceitoAluno, dado
abaixo, com as entradas:
a) 5, 6, 8, 4
b) -5, 11, 12, 15
Algoritmo: ObtemConceitoAluno
read p1, p2, p3, p4
m = (p1 + p2 + p3 + p4)/4.
print m
if m < 7 then
print Reprovado
else
print Aprovado

Exerccio 6: Altere o algoritmo ObtemConceitoAluno afim de corrigir a(s)


falha(s) observada(s) pelo teste de mesa ( Exerccio 5, b)). (inclusao da condicao
de consistencia dos dados)
Exerccio 7: Escreva um algoritmo que verifica se 3 comprimentos lidos podem
formar um triangulo. Dica: utilize a desigualdade triangular.

Fig. 3. Estruturas padr


ao de fluxograma

Subalgoritimos (sub-rotinas e fun


c
oes): Sao algoritmos que executam uma
tarefa especfica. Em geral, subalgoritimos ficam acima do algoritmo principal
(main), e a interac
ao com os subalgoritimos pode ser realizada por meio de
passagem de argumentos ou o uso de variaveis globais. No caso de passagem de
argumentos e possvel passar o parametro por valor ou por referencia, de forma
que no segundo caso o valor do argumento e tambem modificado no algoritmo ao
fim da execuc
ao do subalgoritimo. Utilizar variaves globais diminui a alocacao
de mem
oria, no entanto e algo aconselhado apenas ao caso de constantes. (Por
que?)
As sub-routinas, ao contrario das funcoes, nao retornam valor de forma
explcita.
Algoritmo: ExemploSubalgoritimo
subroutine LerNotas(p)
while i < 5
read p[i]

i=1
# p e um vetor com 4 posicoes

function CalculaMedia(p)
m = (p[1] + p[2] + p[3] + p[4])/4.
return m
function main()
p = p(4)
LerNotas(p)
print CalculaMedia(p)

Exerccio 8: Utilizando subalgoritimos , construa um algoritmo que determine


para uma serie de valores, quantos sao maiores que a media do conjunto.
Exerccio 9: Utilizando subalgoritimos, construa um algoritmo que calcule, a
partir de dois n
umeros inteiros p e m, a combinacao de m elementos tomados p
a p.

Algoritmos de ordenac
ao e busca - Aula 1 e 2

Dada uma sequencia s de n n


umeros, s = [a1, a2, a3, . . . , an], um algoritmo de
ordenac
ao e aquele que retorna a permutacao sp de s, sp = [b1, b2, . . . , bn] tal
que b1 < b2 < . . . < bn. A entrada [a1, a2, a3, . . . , an] e chamada instancia do
problema. Uma inst
ancia de um problema consiste na entrada (que satisfaz as
restric
oes impostas no enunciado do problema) necessaria para se obter uma
soluc
ao para o problema.
Algoritmo: SelectionSort

subroutine OrdenaSelectionSort(v)
for i = (1, lengh(v) 1)
min = i
for j = (i + 1, lengh(v))
if v[j] < v[i] then
min = j
aux = v[i]
v[i] = v[min]
v[min] = aux

Algoritmo: InsertionSort
subroutine OrdenaInsertionSort(v)
for j = (2, lengh(v))
key = v[j]
i=j1
while (i > 0 and v[i] > key)
v[i + 1] = v[i]
i=i1
v[i + 1] = key

Algoritmo: BubbleSort
subroutine OrdenaBubbleSort(v)
for i = (1, lengh(v))
for j = (i + 1, lengh(v))
if v[j] < v[i] then
aux = v[i]
v[i] = v[j]
v[j] = aux
O Quick Sort e um dos metodo mais rapidos de ordenacao, apesar de `as vezes
partic
oes desequilibradas poderem conduzir a uma ordenacao lenta. Esse metodo
de ordenac
ao utiliza a tecnica divide and conquer (dividir o problema inicial em
dois subproblemas e resolver um problema menor utilizando a recursividade).
Algoritmo: QuickSort
function Particiona(v, p, r)
pivot = v[r]
i=p1
for j = (p, r)
if v[j] <= pivot then
i=i+1

aux = v[i]
v[i] = v[j]
v[j] = aux
return i
subroutine OrdenaQuickSort(v, p, r)

#p e r sao posicoes que indicam


incio e fim da particao

if p < r then
q = P articiona(v, p, r)
OrdenaQuickSort(v, p, q 1)
OrdenaQuickSort(v, q + 1, r)

Exerccio 10: Considere o caso onde todos os pivos do quick sort dividem a
lista numa lista vazia e numa lista que contem todos os elementos maiores que
o piv
o. Este caso degenerado do quick sort e equivalente a outro algoritmo de
ordenac
ao?
Exerccio 11: Pesquise e discuta como o metodo do pivo sofisticado pode ajudar
na eficiencia do algoritmo do quick sort?
Exerccio 12: Explique porque para a Lista = (9, 8, 7, 6, 5, 4, 3, 2, 1) o metodo
de ordenac
ao Quick Sort e pouco eficiente.
Exerccio 13: Em termos de complexidade e eficiencia, compare os metodos de
ordenac
ao Selection Sort, Insertion Sort, Bubble Sort e Quick Sort.
Existem outros metodos de ordenacao mais eficientes, alguns com complexidade linear, no entanto os principais sao os 4 apresentados e Merge Sort.

Introduc
ao a complexidade de algoritmos - Aula 3

Qual e o custo de usar um dado algoritmo para resolver um problema especfico?


Caractersticas que devem ser investigadas:
an
alise do n
umero de vezes que cada parte do algoritmo deve ser executada;
estudo da quantidade de memoria necessaria.
Determinando o menor custo possvel para resolver problemas de uma dada
classe, temos a medida da dificuldade inerente para resolver o problema.
Quando o custo de um algoritmo e igual ao menor custo possvel, o algoritmo
e
otimo para a medida de custo considerada.
Podem existir v
arios algoritmos para resolver o mesmo problema.
Se a mesma medida de custo e aplicada a diferentes algoritmos, entao e possvel

compar
a-los e escolher o mais adequado.
usual ignorar o custo de algumas das operacoes e considerar apenas as
E
operac
oes mais significativas.
Por exemplo, em algoritmos de ordenacao considera-se o n
umero de comparac
oes entre os elementos do conjunto a ser ordenado e ignoramos as operacoes
aritmeticas, de atribuic
ao e ma- nipulacoes de ndices, caso existam.
Algoritmo: ExemploComplexidade
function maximo(v)
max = v[1]
for i=(2,lengh(v))
if v[i]>max then
max = v[i]
return max
O Algoritmo ExemploComplexidade sempre faz n 1 comparacoes para retornar o maior elemento do conjunto.
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto, n
ao vazio, com n elementos faz pelo menos n 1 comparacoes.
O teorema acima nos diz que, se o n
umero de comparacoes for utilizado como
medida de custo, ent
ao a funcao maximo do Algoritmo ExemploComplexidade
anterior e
otima.
Para um algoritmo de ordenacao a complexidade depende de quao ordenados
est
ao os dados de entrada: se os dados de entrada ja estiverem quase ordenados,
ent
ao o algoritmo pode ter que trabalhar menos.
Melhor caso, pior caso e caso m
edio
Melhor caso:
Menor tempo de execuc
ao sobre todas as entradas de tamanho n.
Pior caso:
Maior tempo de execuc
ao sobre todas as entradas de tamanho n.
Se f
e uma fun
c
ao de complexidade baseada na an
alise de pior
caso, o custo de aplicar o algoritmo nunca
e maior do que f (n).
Caso medio (ou caso esperado):
Media dos tempos de execucao de todas as entradas de tamanho n.
Na an
alise do caso esperado, supoe-se uma distribuicao de probabilidades
sobre o conjunto de entradas de tamanho n e o custo medio e obtido com base
nessa distribuic
ao.
A an
alise do caso medio e geralmente muito mais difcil de obter do que as
an
alises do melhor e do pior caso.
comum supor uma distribuicao de probabilidades em que todas as entradas
E
possveis s
ao igualmente provaveis. Na pratica isso nem sempre e verdade.

Exerccio 14: Analise o caso medio dos algoritmos de iordenacao estudados na


aulas 1 e 2.

Matrizes e vetores - Aula 4 e 5

Vetor: arranjo unidimensional de dados do tipo basico, com um mesmo


identificador (nome), mas diferenciado pela sua posicao (ndice) dentro do vetor.
Para fins de escrita de algoritmo usaremos: v = vetor([v1, v2, v3, . . . , vn]),
tal que v[i] e o i-esimo elemento de v, n e um n
umero natural.
Matriz: arranjo bidimensional de dados do tipo basico, com um mesmo
identificador (nome), mas diferenciado pela sua posicao (linha, coluna) dentro
da matriz.
Para fins de escrita de algoritmo usaremos: M = matriz(m, n), tal que M [i, j]
e elemento da linha i e coluna j de M , m e n sao n
umeros naturais.
Em muitas linguagens (C e Python, por exemplo) vetores, matrizes e listas
iniciam a contagem de seus elementos em 0. Ou seja, o primeiro elemeto da
matriz A(m, n) seria o elemento A(0, 0).
Exerccio 15: Crie uma funcao que receba como parametro uma matriz A(n, n)
e retorne o menor elemento da diagonal secundaria de A.
Exerccio 16: Crie uma funcao que retorna a media harmonica dos elementos
da diagonal principal de A(n, n). (media harmonica e o n
umero de elementos
dividido pela soma dos inversos dos elementos)
Exerccio 17: Crie uma funcao que retorna a mediana da n-esima linha de
A(n, n).
Exerccio 18: Crie uma funcao que verifique se A(m, n) e simetrica.
Exerccio 19: Escreva uma funcao que receba como parametros a matriz
A(n, n) e o vetor b(n) e, retorne a solucao do sistema linear da forma Ax = b.
Exerccio 20: Crie um algoritmo que calcula a inversa de uma matriz A(n, n).
Dica: utilize a func
ao criada no exerccio anterior.
Exerccio 21: Escreva um algoritmo capaz de receber um n
umero inteiro digitado pelo usu
ario e retornar um vetor com todos os divisores deste n
umero, nao
se esqueca das condic
oes de consistencia. Dica: guarde os valores em um vetor
que tenha o m
aximo possvel de divisores de um n
umero, depois conte estes divisores para gerar um vetor apenas com os divisores. (Em termos de memoria
isto n
ao e muito experto, mas voltaremos a este exerccio quando tratarmos de
listas)

Exerccio 22: Crie um algoritmo capaz de realizar a multiplicacao entre duas


matrizes dadas.(N
ao se esqueca das condicoes de consistencia!)

Estruturas de dados: listas, pilhas e filas - Aula 6

A qualidade da soluc
ao de um problema depende, entre outros fatores, da forma
como os dados est
ao organizados. Para tanto, desenvolveu-se uma classe de modelos de estrutura de dados (formas genericas de se estruturar informacoes de
modo a serem registradas e processadas pelo computador) que viabilizam o processamento de dados de acordo com o problema. Algumas estruturas de dados
s
ao listas, vetores, matrizes, pilhas, filas, grafos, avores e dicionarios. No entanto, estas estruturas s
o possuem significado quando associadas a um conjunto
de operac
oes de manipulacao das mesmas.

Lista: e uma seq


uencia de zero ou mais elementos, cada um deles sendo um valor
primitivo (
atomo ou nodo) ou composto. Nao precisam de dimensao definida (ao
contr
ario de vetores), logo se ganha espaco na memoria.
S
ao operac
oes elementares para a implementacao de uma lista:
criar uma nova lista vazia (lista = [ ])
adicionar um elemento x apos o u
ltimo elemento da lista (lista(append(x)))
verificar dimens
ao da lista (lengh(lista))
acessar o k-esimo elemnto (lista[k])
inserir o elemento x na k-esima posicao(existente) da lista (lista[k] = x)
remover o u
ltimo elemento da lista (pop(lista))
Obs.: Quando se utiliza um vetor como lista, dizemos que esta lista e estatica
pois, tal como um vetor, e necessario definir a dimensao da lista durante a
compilac
ao.
(Retorne ao Exerccio 21 e reescreva o algoritmo usando uma lista para
guardar os divisores)

Listas lineares
Lista linear e uma estrutura de dados na qual elementos de um mesmo tipo
de dado est
ao organizados de maneira sequencial. Nao necessariamente, estes
elementos est
ao fisicamente em sequencia, mas a ideia e que exista uma ordem
l
ogica entre eles. Por exemplo quando sao distribudas senhas em um banco,
as pessoas n
ao est
ao em ordem fisicamente mas existe uma sequencia que as
organiza.

Tipos de Listas Lineares:

Pilha (Stack):
Uma pilha e uma lista linear do tipo LIFO - Last In First Out, o u
ltimo elemento que entrou, e o primeiro a sair. Ela possui apenas uma entrada, chamada
de topo, a partir da qual os dados entram e saem dela. Exemplos de pilhas sao:
pilha de pratos, pilha de livros, pilha de alocacao de variaveis da memoria, etc.

Fila (Queue)
Uma fila e uma lista linear do tipo FIFO - First In First Out, o primeiro
elemento a entrar ser
a o primeiro a sair. Na fila os elementos entram por um
lado (por tr
as) e saem por outro (pela frente). Exemplos de filas sao: a fila
de caixa de banco, a fila do INSS, etc. deques

Deque
Um deque - Double-Ended QUEue) e uma lista linear na qual os elementos
entram e saem tanto pela pela frente quantopor tras. Pode ser considerada
uma generalizac
ao da fila.
Exerccio 23: Discuta as diferencas entre fila, pilha, lista e deque em termos
de implementac
ao e utilizac
ao.
Exerccio 24: Faca uma esquema para mostar o funcionamento da fila, da lista
e da pilha.
Aloca
c
ao Sequencial ou contgua: A insercao de um proximo item pode
ser realizada ap
os o u
ltimo item com custo constante. A insercao de um novo
item no meio da lista, sem que o elemento da posicao seja trocado, requer um
deslocamento de todos os itens localizados apos o ponto de intersecao. (Em
algumas linguagens, retirar um elemento que nao seja o u
ltimo elemento de uma
lista, tambem requer realocar todos os demais afim de preencher o espaco vazio)
Exerccio 25 Escreva um algoritmo que insere um valor x na posicao k de
uma lista linear sequencial com m > k elementos. Ao final a lista tera m + 1
elementos.
Exerccio 26: Utilizando as operacoes elementares da lista, apresentadas nesta
aula, escreva subalgoritimos que implementem funcoes elementares de pilha e
fila a partir de uma lista. Quais seriam estas operacoes elementares?

Exerccio 27 Escreva um algoritmo que dada uma lista sequencial linear, escreve os elementos da lista em ordem inversa.
Exerccio 28 Escreva um algoritmo que verifica se uma string e um palndromo
(uma palavra ou frase e um palndromo se pode ser lida, indiferentemente do
sentido de leitura por exemplo, a palavra REVER). Considere split(string) uma
func
ao que retorna uma lista em sequencia com as letras de uma string.
Exerccio 29 Discuta as vantagens e desvantagens da utilizacao de uma lista
est
atica.
Aloca
c
ao encadeada: Os elementos nao estao necessariamente armazenados
sequencialmente na mem
oria, porem a ordem logica entre os elementos que
comp
oem a lista deve ser mantida.
ponteiro: um tipo u
nico de variavel, uma variavel que utiliza apontamentos na
mem
oria RAM, para otimizacao do programa. Toda variavel, assim que criada,
e alocada na mem
oria RAM, que automaticamente da um endereco para essa
vari
avel, por exemplo, em 1 GB de RAM, pode haver milhares de enderecos de
vari
aveis, ent
ao, essa vari
avel que suponha o endereco 1248. O ponteiro contera
este enderco que aponta para essa variavel, e portanto e possvel manipular tais
informac
oes. Para fims de algoritmo um ponteiro sera declarado precedido de .
Para tomar o endereco de um ponteiro p usaremos &p e para usar o valor p.
Uma lista encadeada linked list e uma representacao de uma sequencia de
objetos, todos do mesmo tipo, na memoria rapida (RAM) do computador.

Listas simplesmente encadeadas:


Cada elemento da lista e um no, e possui um ponteiro. Caso a lista tenha
cabec
ario no primeiro elemento havera a indicacao do primeiro elemento. O
u
ltimo elemento aponta para o N U LL, indicando o fim da lista. Este tipo de
lista facilita operac
oes como retirar/inserir na ordem um elemento. Por exemplo, lista = [(st = &p1), (p2, &p3), (p1, &p2), (p3, N U LL)] implica que a a
sequencia dos elementos e p1, p2 e p3, independente da ordem que estes elementos aparecam em lista. (A representacao de lista e didatica mas nao possui
semelhanca em relac
ao a sintaxe `as linguagens de programacao)
Exerccio 30: Escreva um subalgoritimo que insere um elemento na posicao k
de uma lista simplesmente encadeada.
Exerccio 31: Escreva um algoritmo que utilize uma fila simplesmente encadeada. (Sim, como pilha e fila sao derivados de lista, podemos ter pilhas e filas
encadeadas)

Listas duplamente encadeadas:


Na lista duplamente encadeada, cada no possui dois ponteiros: um que aponta
para o elemento anterior e outro para o proximo elemento. Por exemplo
lista = [(st = &p1), (&p1, p2, &p3), (N U LL, p1, &p2), (&p2, p3, N U LL)].
Exerccio 32: Escreva um subalgoritimo que remove um elemento na posicao
k de uma lista duplamente encadeada.
Listas circulares:
Na lista circulares o u
ltimo no aponta para o primeiro no e vice-versa (no
caso de listas duplamente encadeadas). Ou seja, uma lista que nao tem fim, portanto e importate conter o n
umero de elementos n da lista no cabecario da lista.
Por exemplo
lista = [(st = &p1, lst = &p3, n = 3), (&p1, p2, &p3), (&p3, p1, &p2), (&p2, p3, &p1)].

Exerccios complementares

EC 1: Escreva um algoritmo para ordenar pilhas.


EC 2: Escreva um algoritmo para ordenar filas.
EC 3: Escreva um algoritmo que forneca o maior, o menor elemento e a media
aritmetica dos elementos de uma pilha.
EC 4: Escreva um algoritmo que forneca o maior, o menor elemento e a media
aritmetica dos elementos de uma fila. Escreva um algoritmo que leia um n
umero
indetereminado de valores inteiros. Onde 0 finaliza a entrada de dados. para cada
valor lido, determinar se ele e par ou mpar. Se o n
umero e par, entao inclu-lo
na fila par. Caso contr
ario, inclu-lo na fila mpar. Ao final da entrada de
dados mostrar os elementos de cada fila comecando pelos mais recentes.
EC 5: Dadas duas listas L1 e L2. Escreva um algoritmo que retorne L1 L2 e
L1 L2.
EC 6: Uma estrategia de remocao de elementos de uma lista e chamada Lazy
deletion. Esta estrategia marca os elementos a serem removidos, por exemplo
listando suas posic
oes em uma lista auxiliar, removendo os elementos apenas
quando existe uma determinada quantidade n de elementos a serem removidos.
Escreva um algoritmo que implemente Lazy deletion.

EC 7: Usando uma pilha, ecreva um algoritmo que verifica se uma expressao


matem
atica tem os parentes agrupados da forma correta. Isto e: se o n
umero
de parenteses `
a esquerda e `a direita sao iguais e se todo parenteses aberto e
devidamente seguido por um fechamento de parenteses.
EC 8: Escreva um algoritmo, utilizando pilha, para determinar se uma string de
caracteres de entrada e da forma xCy, onde x e uma string consistindo das letras
A e B e y e o inverso de x. Um exemplo de string valida e AAABACABAAA.
EC 9: Duas pilhas podem ser implementadas em um u
nico vetor da seguinte
forma: A primeira cresce a partir do incio do vetor para a direita e a segunda
crece a partir do final do vetor para a esquerda. Ou seja, uma cresce em direcao
a outra. Existe algum problema neste tipo de implementacao? Qual seria e como
podemos resolve-lo?
EC 10: O que e e o que faz um algoritmo de busca? escreva um algoritmo para
implementac
ao do algoritmo de busca sequencial.
EC 11: O que e um algoritmo de ordenacao? O que e um algoritmo de ordenacao
est
avel?
EC 12: Descreva a ideia principal do algoritmo Bubble Sort.
EC 13: Faca um esquema ou arvore apresentando o funcionamento do algoritmo
Quick Sort.
EC 14: Qual a diferenca entre algoritmo e programa (no contexto computacional)?
EC 15: O que e um Tipo Abstrato de Dados?
EC 16: Por que a implementacao de Filas em vetor e, em geral, circular?
EC 17: Defina a estrutura de dados definida como dicionario, escreva um
algoritimo utilizando esta estrutura.

References
1.
2.
3.
4.

MARTINS, Luiz Gustavo Almeida: Apostila de introduca


o a algoritmos. UFU, 2012.
CORMEN, T. H: Algoritmos: teoria e pr
atica. 2002.
WIRTH, N.: Algoritmos e estruturas de dados. 1989.
SZWARCFITER, J. L.: Estrutura de dados e seus algoritmos. 1994.

S-ar putea să vă placă și