Você está na página 1de 4

Aspectos Preliminares • defun cria funções novas.

• O estudo de linguagens de programação é • cond faz com que condições executem ações.
valioso por diversas razões:
– Aumenta nossa capacidade de usar • eq testa se são o mesmo objeto
diferentes construções ao escrever • eql testa se são eq, se são números do
programas mesmo tipo ou se são caracteres
– Permite que escolhamos linguagens para os representando o mesmo objeto
projetos de forma mais • equal testa se são estruturalmente idênticos
inteligente (mesma árvore)
– Torna mais fácil o aprendizado de novas • equalp testa números de tipos diferentes e
linguagens caracteres diferentes.
• Critérios mais importantes para a avaliação
de linguagens:
– Legibilidade, facilidade de escrita,
confiabilidade e custo geral
• As principais influências no projeto de
linguagens são a arquitetura de
máquina e as metodologias de projeto de
software
• Os principais métodos de implementar
linguagens de programação são
a compilação, a interpretação pura e a
implementação híbrida.

Turtle LOGO
• Comandos (Tartaruga com um lápis):
• Andar x – FORWARD(x), BACK(x) onde x
são os passos
• Girar y – LEFT(a), RIGHT(a) onde a ângulos
em graus.
• Levantar ou abaixar lápis – PEN UP, PEN
DOWN
• Repetição – REPEAT {number of
times}[{command}]
• COLOR [color|#RGB]

LISP
• Comando Básicos:
• Aspas Simples ‘ é para ignorar a lista.
• list constrói a lista.
• length te entrega o tamanho da lista
• nth te entrega a posição do número a partir
de 0.
• char encontra um carácter.
• cdr te entrega o final da lista, car te entrega o
inicio. (OBS: Pode ser feito tudo junto, cxxr)
• cons adiciona um elemento em uma lista
• append junta listas.
• setq atribui qualquer variável.
• psetq atribuição em paralelo.
Lista Linear Sequencial Lista Ligada Dinâmica
• Uma lista linear possui armazenamento • Estática - se utiliza um arranjo para
sequencial, tanto física quanto lógica. armazenar
• O arranjo terá um tamanho fixo controlado os registros, se define um tamanho fixo (MAX)
por uma variável. • Dinâmica - utiliza alocação e deslocação da
• Buscar por um elemento memória dos elementos sob demanda
– Recebe o valor do elemento a buscar • Vantagens: melhor uso da memória e não é
– Retorna a posição em que o elemento preciso ter uma lista de elementos disponíveis
encontra-se na lista
– Se não encontra o elemento retorna -1 Buscar um elemento da estrutura.
• Recebe uma chave do usuário.
• Inserir um elemento numa posição • Retorna ao endereço onde está o elemento .
indicada pelo usuário • Retorna NULL caso não exista um registro
Procedimento: com essa chave.
1. Comprovar se posso inserir o elemento. • Tem que ser uma busca seqüencial
1. Se a lista está cheia não posso
inserir. Inserir elementos da estrutura.
2. Se o índice passado pelo usuário • O usuário passa como parâmetro um registro
não é válido, está fora, não poderá a ser inserido na lista.
inseri-lo. • Realizar inserção ordenada por a chave sim
2. Deslocar todos os elementos posteriores à permitir elementos repetidos.
posição indicada pelo usuário para a direita. • É preciso identificar entre quais elementos o
3. Inserir o elemento na posição desejada. novo elemento será inserido.
4. Somar um ao número de elementos. • Alocar memória para o novo elemento.
• Saber quem é o predecessor do elemento.
• Excluir um elemento pela posição
Procedimento: Função auxiliar
1. O usuário passa a posição do elemento que • Descobrir o predecessor
ele que deseja ser excluído. • Função para retornar, dada uma chave:
2. Desloca todos os elementos posteriores – o endereço do elemento.
uma posição para a esquerda. – o endereço do predecessor (exista o
3. Diminuir em um o número de elementos. não na lista)
• Retornar dois endereços
• Excluir um elemento pelo valor – Utilizar parâmetros por referência.
Procedimento:
1. O usuário passa o valor do elemento que Excluir um elemento
ele quer excluir. • Se houver um elemento com a chave na lista
1. Buscar o elemento se houver excluir o elemento da lista.
2. Desloca todos os elementos posteriores • Saber quem é o predecessor dele.
uma posição para a esquerda. • Acertar os ponteiros envolvidos, liberar a
3. Diminuir em um o número de elementos. memória dele e retorna true
• Caso contrário retorna false.
Lista Ligada Estática
• Ordem lógica e física diferente. Reinicializar a estrutura
• A lógica prossegue com o número abaixo. • Excluir todos os seus elementos e liberar a
• Para inserir o número você precisa organizar memória utilizada.
a posição em um espaço aberto e organizar
suas sequências.
• Para retirar, você precisa retirar o número e
reorganizar os elementos sequências.
• Sempre começa do 0.
Filas, Pilhas e Deque
Fila - FIFO Fila - FIFO
• Só podemos acessar o primeiro e o último Inicializar.
elemento da estrutura Excluir um elemento (pop)
• Os itens são consumidos por ordem de Inserir um elemento (push)
chegada Acessar um elemento (first)
• FIFO (first input, first output)

Pilha - LIFO Pilha - LIFO


• Todas as operações de inserção e remoção Inicializar.
são realizadas pela mesma extremidade Excluir um elemento (pop)
chamada topo. Inserir um elemento (push)
• Os elementos são removidos na ordem do Acessar a um elemento (top)
programa inversa daquela em que foram
inseridos de modo que o último elemento que
entra é sempre o primeiro ser executado
• LIFO (Last In - First Out)

Deque - Double Ended Queue


Deque - Double Ended Queue
Inserir um elemento no início (push)
• Generaliza uma fila, para a qual os
Inserir um elemento no fim (push)
elementos podem ser adicionados ou
Excluir um elemento do inicio (pop)
removidos da frente (cabeça) ou de trás
Excluir um elemento do fim (pop)
(cauda).
Acessar ao elemento do início.
• As deques são filas duplamente ligadas.
Acessar ao elemento do fim.

Algoritmos de Busca
• Busca sequencial: forma mais simples de
buscar um elemento em um arranjo de dados:
procurando-o ao longo de todos os seus
elementos – no caso de um vetor, verificando
todas as suas posições.
• Busca binária: Se os elementos do vetor não
estiverem ordenados, não teremos outro
método de busca, a não ser o sequencial.
Mas, se os elementos do vetor estiverem
ordenados,existem métodos mais eficientes
do que a busca sequencial.
Elementos da estrutura de dados
estiverem ordenados
Ideia de “dividir para conquistar”
– A divisão acontece sempre
comparando o valor que se busca
com o elemento localizado no meio do
vetor. • Se o vetor não está ordenado, tem
(1) O valor desse elemento central é igual à algoritmos de ordenação:
chave de busca; – Algoritmo de ordenação por troca;
(2) O valor é menor do que a chave de busca; – Algoritmo de ordenação por inserção;
(3) O valor é maior do que a chave de busca; – Algoritmo de ordenação por seleção;
– Algoritmo de ordenação por intercalação;
Algoritmos de Ordenação I Árvore
Inserção – A árvore é construída pegando o centro de
• Algoritmo eficiente para ordenar um número cada separação.
pequeno de elementos.
• Funciona da maneira como muitas pessoas
ordenam as cartas em um
jogo de bridge ou pôquer.
– Inicia com a mão esquerda vazia e
as cartas viradas com a face para
baixo na mesa.
– Remover uma carta de cada vez da
mesa, inserindo-a na posição correta
na mão esquerda.
– Para encontrar a posição correta de
uma carta, compara-se a cada uma
das cartas que já estão na mão, da
direita para a esquerda
Seleção - (selection_sort)
• Ordenar de n números
– Localizando primeiro o menor elemento do
vetor,
– Permutar esse elemento como o elemento
contido na primeira posição do vetor.
– Em seguida encontrar o segundo menor
elemento do vetor e trocar por o elemento
na segunda posição.
– Continuar para os primeiros n-1 elementos
Flutuação - (bubble_sort)
• Organizar através de pares.
– Pegue um par no inicio e vá trocando de
lugar até encontrar um número maior,
prossiga até o final e repita até estar tudo
organizado.

Algoritmos de Ordenação II
Merge - (merge_sort)
– Separe em duas pilhas e comece pela
menor, vá separando até poder organizar na
ordem correta.
Quicksort - (quick_sort)
– Número pode trocar apenas com o lado
enquanto o que está sendo trocado pode
trocar mais longe.
Heap - (heap_sort)
– Segue a ideia de uma árvore da esquerda
pra direita da lista.

Você também pode gostar