conhecimento semana do introdução a estruturas de dados avançadas utilizando linguagem c...

36
Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar Saliba Júnior 08 a 14 de Julho de 2009 1

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

1

Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C

Implementação de Fila, Lista e Pilha através de Arranjos

Edwar Saliba Júnior08 a 14 de Julho de 2009

Page 2: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

2

Linguagem de Programação• Linguagem:– C/C++– Delphi– Pascal– .Net– C#– Java– Fortran e etc.

• Para que elas existem?– Para resolver problemas!

Page 3: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

3

Problemas…• Que tipo de problemas podemos resolver

com linguagens de programação?– Rotinas

• Podemos resolver qualquer tipo de rotina?

• Exemplos…

Page 4: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

4

Exemplos de Problemas• Cálculo de impostos a pagar. (30% do valor

do salário);• Conversão de moedas. (US$ para R$ ou R$

para US$);• Somar 10 números quaisquer;• Entrar com as notas de 5 alunos, para 3

etapas. Ao final imprimir o total de cada aluno.

Page 5: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

5

Outros Problemas – Como resolvê-los?

• Criar um programa que simule uma lista de supermercado;

• Criar um programa para verificar se a quantidade de “(“, “[“ e “{“, abrindo e fechando, estão corretas em uma expressão matemática;

• Criar um programa para controlar a fila de um banco.

Page 6: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

6

Exemplo de Problema de Lista• Preciso fazer um programa que simule uma lista de compras;

• Como criar um programa (uma estrutrura) para resolver este problema? Utilizando um vetor.

Page 7: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

7

Lista - Considerações• Os elementos são sempre introduzidos na

cauda;• Tem ordem de entrada, mas não tem

ordem de saída dos elementos;• A lista tem um tamanho máximo.

Page 8: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

8

Lista

Fonte: Ziviani (1996:37)

Page 9: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

9

Quais operações se aplicam sobre uma Lista?

• FazListaVazia (Lista) – Faz uma lista ficar vazia;

• InsereNaLista (X, Lista) – Insere o item X após o último item da Lista;

• RetiraDaLista (P, Lista, X) – Retorna o item X que está na posição P da Lista, retirando-o da lista

e deslocando os itens a partir da posição P + 1 para as posições anteriores;

• ListaVazia (Lista) – Retorna VERDADEIRO se Lista estiver vazia e FALSO caso contrário;

• ImprimeLista (Lista) – Imprime os itens da lista na ordem de ocorrência.

Page 10: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

10

Algoritmo de Lista#include <cstdlib>#include <iostream>#include <conio.h> #define InicioArranjo 0#define MaxTam 100 using namespace std; typedef int Apontador; typedef struct TipoItem { int Codigo; char Nome[10];}; typedef struct TipoLista { TipoItem Item [MaxTam]; Apontador Primeiro; Apontador Ultimo;}; 

Page 11: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

11

Algoritmo de Listavoid FazListaVazia (TipoLista &Lista) { Lista.Primeiro = InicioArranjo; Lista.Ultimo = InicioArranjo;} void ConsultaItem (TipoLista &Lista, TipoItem &Item, Apontador P) { Item.Codigo = Lista.Item [P].Codigo; strcpy (Item.Nome, Lista.Item [P].Nome);} int ListaVazia (TipoLista &Lista) { return (Lista.Primeiro == Lista.Ultimo);} void InserirNaLista (TipoItem X, TipoLista &Lista) { if (Lista.Ultimo > MaxTam) { cout << "Lista cheia!"; } else { Lista.Item [Lista.Ultimo] = X; Lista.Ultimo++; }}

 

Page 12: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

12

Algoritmo de Listavoid RetiraDaLista (Apontador P, TipoLista &Lista, TipoItem &Item) { if (ListaVazia (Lista) || (P >= Lista.Ultimo)) { cout << "Erro: Posição não existe!"; } else { Item = Lista.Item [P]; Lista.Ultimo--; for (int Aux = P; Aux < Lista.Ultimo; Aux++) Lista.Item [Aux] = Lista.Item [Aux + 1]; }} void InserirListaPosicao (Apontador P, TipoLista &Lista, TipoItem &Item) { if (ListaVazia (Lista) || (P >= Lista.Ultimo)) { cout << "Erro: Posição não existe!"; } else { Lista.Item[P].Codigo = Item.Codigo; strcpy (Lista.Item[P].Nome, Item.Nome); }} 

 

Page 13: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

13

Algoritmo de Listavoid ImprimeLista (TipoLista &Lista) { for (int Aux = Lista.Primeiro; Aux < Lista.Ultimo; Aux++) { cout << "\nCódigo: " << Lista.Item [Aux].Codigo; cout << "\nNome : " << Lista.Item [Aux].Nome << "\n"; }}

int Menu () { int Opcao = 5; do { system ("CLS"); cout << "Escolha uma opção\n"; cout << "=================\n"; cout << "\n 1 - Inserir "; cout << "\n 2 - Excluir "; cout << "\n 3 - Alterar "; cout << "\n 4 - Imprimir "; cout << "\n 0 - Sair\n"; cout << "\nOpção: "; cin >> Opcao; } while ((Opcao < 0) || (Opcao > 4)); return (Opcao);}

 

Page 14: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

14

Algoritmo de Listaint main(int argc, char *argv[]){ TipoLista Lista; /* Cria uma lista. */ TipoItem Aux; /* Auxiliar para entrada de dados. */ int Opcao, Posicao; /* Faz a lista ficar vazia. */ FazListaVazia (Lista); Opcao = Menu (); while (Opcao != 0) { switch (Opcao) { case 1: /* Inserir */ system ("CLS"); cout << "Inserir Item"; cout << "\n============\n\n"; cout << "\nDigite um Código: "; cin >> Aux.Codigo; cout << "\nDigite um Nome: "; cin >> Aux.Nome; InserirNaLista (Aux, Lista); break; 

 

Page 15: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

15

Algoritmo de Lista case 2: /* Excluir */ system ("CLS"); cout << "Excluir Item"; cout << "\n============\n\n"; cout << "\nDigite a posição a ser removida: "; cin >> Posicao;  RetiraDaLista (Posicao, Lista, Aux); cout << "\nO item a seguir foi removido da lista:\n\n"; cout << "\nCódigo: " << Aux.Codigo; cout << "\nNome : " << Aux.Nome; break;  case 3: /* Alterar */ system ("CLS"); cout << "Alterar Item"; cout << "\n============\n\n"; cout << "\nDigite a posição a ser alterada: "; cin >> Posicao; cout << "\n\n"; ConsultaItem (Lista, Aux, Posicao); cout << "Valores atuais"; cout << "\n==============\n\n"; cout << "Código: " << Aux.Codigo; cout << "\nNome : " << Aux.Nome << "\n";

Page 16: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

16

Algoritmo de Lista cout << "\nDigite o novo Código: "; cin >> Aux.Codigo; cout << "\nDigite o novo Nome : "; cin >> Aux.Nome; InserirListaPosicao (Posicao, Lista, Aux); break;  case 4: /* Imprimir */ system ("CLS"); cout << "Itens da Lista"; cout << "\n==============\n\n"; ImprimeLista (Lista); fflush(stdin); getchar(); } Opcao = Menu (); }  system("PAUSE"); return EXIT_SUCCESS;}

Page 17: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

17

Exemplo de Problema Utilizando Pilha• Criar um programa para verificar se a quantidade de “(“, “[“

e “{“, abrindo e fechando, estão corretas em uma expressão matemática;

• Como criar um programa (uma estrutrura) para resolver este problema? Utilizando vetores.

35779184571427423181245

31879874231912145

751919231846877

*15

Page 18: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

18

Pilha - Considerações• FILO – First In, Last Out;• Os elementos são introduzidos um sobre o outro;• Pode-se fazer analogia a uma pilha de pratos.

Fig. Pilha de Pratos - Fonte: <http://www.caloni.com.br/blog/archives/basico-do-basico-assembly> Acesso em: 07 jul. 2009

Page 19: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

19

Pilha

Fonte: <http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=975> Acesso em: 26 nov. 2007

Page 20: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

20

Quais operações se aplicam sobre uma FILO?

• FazPilhaVazia (Pilha)– Faz uma Pilha ficar vazia;

• PilhaVazia (Pilha)– Retorna VERDADEIRO se Pilha estiver vazia e FALSO caso

contrário;• Empilhar (X, Pilha)

– Insere o item X no topo da Pilha;• Desempilhar (Pilha, X)

– Retorna o item X que está no topo da Pilha, removendo-o da Pilha;

• TamanhoPilha (Pilha)– Retorna quantos itens existem armazenados na Pilha.

Page 21: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

21

Algoritmo de Pilha#include <cstdlib>#include <iostream>#include <conio.h> #define MaxTam 100 using namespace std; typedef int Apontador; typedef struct TipoItem { int Codigo; char Nome[10];}; typedef struct TipoPilha { TipoItem Item [MaxTam]; Apontador Topo;}; void FazPilhaVazia (TipoPilha &Pilha) { Pilha.Topo = -1;}

int PilhaVazia (TipoPilha &Pilha) { return (Pilha.Topo == -1);}

Page 22: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

22

Algoritmo de Pilhavoid Empilhar (TipoItem X, TipoPilha &Pilha) { if (Pilha.Topo == MaxTam) { cout << "Pilha cheia!"; } else { Pilha.Topo++; Pilha.Item [Pilha.Topo] = X; }} void Desempilhar (TipoPilha &Pilha, TipoItem &Item) { system("CLS"); if (PilhaVazia (Pilha)) { cout << "Erro: Pilha está vazia!"; Item.Codigo = -1; } else { Item = Pilha.Item [Pilha.Topo]; Pilha.Topo--; }} int TamanhoPilha (TipoPilha &Pilha) { return (Pilha.Topo + 1);}

Page 23: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

23

Algoritmo de Pilhaint Menu () { int Opcao = 5; do { system ("CLS"); cout << "Escolha uma opção\n"; cout << "=================\n"; cout << "\n 1 - Empilhar "; cout << "\n 2 - Desempilhar "; cout << "\n 3 - Verificar Tamanho da Pilha"; cout << "\n 0 - Sair\n"; cout << "\nOpção: "; cin >> Opcao; } while ((Opcao < 0) || (Opcao > 3)); return (Opcao);} int main(int argc, char *argv[]){ TipoPilha Pilha; /* Cria uma Pilha. */ TipoItem Aux; /* Auxiliar para entrada de dados. */ int Opcao; /* Faz a Pilha ficar vazia. */ FazPilhaVazia (Pilha);

Page 24: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

24

Algoritmo de Pilha Opcao = Menu (); while (Opcao != 0) { switch (Opcao) { case 1: /* Inserir */ system ("CLS"); cout << "Inserir Item"; cout << "\n============\n\n"; cout << "\nDigite um Código: "; cin >> Aux.Codigo; fflush(stdin); cout << "\nDigite um Nome: "; gets (Aux.Nome); Empilhar (Aux, Pilha); break;  case 2: /* Excluir */ system ("CLS"); cout << "Excluir Item"; cout << "\n============\n\n";  Desempilhar (Pilha, Aux);  if (Aux.Codigo > 0) { cout << "\nO item a seguir foi removido da Pilha:\n\n"; cout << "\nCódigo: " << Aux.Codigo; cout << "\nNome : " << Aux.Nome; }

Page 25: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

25

Algoritmo de Pilha fflush(stdin); getchar(); break; case 3: /* Tamanho da Pilha */ system ("CLS"); cout << "Pilha"; cout << "\n=====\n\n"; cout << "Quantidade de itens na Pilha: " << TamanhoPilha (Pilha); fflush(stdin); getchar(); } Opcao = Menu (); }  system("PAUSE"); return EXIT_SUCCESS;}

Page 26: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

26

Exemplo de Problema de Fila• Controlar a fila de um de um banco;

• Como criar um programa (uma estrutrura) para resolver este problema? Utilizando um vetor.

Page 27: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

27

Fila - Considerações• FIFO – First In, First Out;• Os elementos são introduzidos na cauda e

retirados pela frente;• A fila não pode “ter fim”, ou seja, sempre

podemos inserir e retirar elementos;• Vetores têm um tamanho fixo;• O que fazer então?

Page 28: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

28

Fila Estática Circular

Fonte: <http://sicesumar.wikispaces.com/Fila+est%C3%A1tica+circular?f=print> Acesso em: 07 jul. 2009

Page 29: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

29

Quais operações se aplicam sobre uma FIFO?

• FazFilaVazia (Fila)– Torna uma fila (pré-existente) vazia;

• FilaVazia (Fila)– Retorna VERDADEIRO se a fila estiver vazia e FALSO se

a fila possuir ao menos um elemento;• InserirNaFila (X, Fila)– Insere o item X na fila;

• RetirarDaFila (Fila, X)– Retorna o item X que está no início da fila. Retirando-o

desta.

Page 30: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

30

Pulo do Gato• Por ser implementada em forma circular, de acordo

com Ziviani (1996:56), existe um pequeno problema: – Não há uma forma de distinguir uma fila cheia de uma

vazia, pois nos dois casos os apontadores Frente e Trás apontam para a mesma posição do círculo;

• Solução:– Não utilizar todo o espaço da fila, deixando uma posição

vazia;– Assim sendo, a fila estará cheia quando o apontador Trás

+ 1 for igual ao apontador Frente. Isto significa que existirá uma célula vazia entre o fim e o início da fila.

Page 31: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

31

Algoritmo de Fila#include <cstdlib>#include <iostream>#include <conio.h> #define MaxTam 5 using namespace std;

typedef int Apontador;

typedef struct TipoItem { int Codigo; char Nome[10];};

typedef struct TipoFila { TipoItem Item [MaxTam]; Apontador Frente; Apontador Tras;};

void FazFilaVazia (TipoFila &Fila) { Fila.Tras = Fila.Frente = 1;}

int FilaVazia (TipoFila &Fila) { return (Fila.Frente == Fila.Tras);}

void InserirNaFila (TipoItem X, TipoFila &Fila) { Fila.Item [Fila.Tras - 1] = X; Fila.Tras = (Fila.Tras % MaxTam + 1);}

Page 32: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

32

Algoritmo de Filavoid RetiraDaFila (TipoFila &Fila, TipoItem &Item) { if (FilaVazia (Fila)) { cout << "\n\nFila vazia!"; getchar(); } else { Item = Fila.Item [Fila.Frente - 1]; Fila.Frente = (Fila.Frente % MaxTam + 1); }}

int Menu () { int Opcao = 5; do { system ("CLS"); cout << "Escolha uma opção\n"; cout << "=================\n"; cout << "\n 1 - Inserir "; cout << "\n 2 - Excluir "; cout << "\n 0 - Sair\n"; cout << "\nOpção: "; cin >> Opcao; } while ((Opcao < 0) || (Opcao > 2)); return (Opcao);}

Page 33: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

33

Algoritmo de Filaint main(int argc, char *argv[]){ TipoFila Fila; /* Cria uma Fila. */ TipoItem Aux; /* Auxiliar para entrada de dados. */ int Opcao; for (int I = 0; I < MaxTam; I++) { Fila.Item [I].Codigo = 0; strcpy (Fila.Item [I].Nome, ""); } /* Faz a Fila ficar vazia. */ FazFilaVazia (Fila);

Opcao = Menu (); while (Opcao != 0) { switch (Opcao) { case 1: /* Inserir */ system ("CLS");

if ((Fila.Tras % MaxTam + 1) == Fila.Frente) { cout << "\n\nFila cheia!";

fflush(stdin); getchar(); }

Page 34: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

34

Algoritmo de Fila else {

cout << "Inserir Item"; cout << "\n======\n\n"; cout << "\nDigite um Código: "; cin >> Aux.Codigo; cout << "\nDigite um Nome: "; cin >> Aux.Nome; InserirNaFila (Aux, Fila); } break; case 2: /* Excluir */ system ("CLS"); cout << "Excluir Item"; cout << "\n============\n\n";

RetiraDaFila (Fila, Aux); if (Aux.Codigo != -1) { cout << "\nO item a seguir foi removido da Fila:\n\n"; cout << "\nCódigo: " << Aux.Codigo; cout << "\nNome : " << Aux.Nome; } Aux.Codigo = -1;

Page 35: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

35

Algoritmo Fila fflush(stdin); getchar(); } Opcao = Menu (); }

system("PAUSE"); return EXIT_SUCCESS;}

Page 36: Conhecimento Semana do Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C Implementação de Fila, Lista e Pilha através de Arranjos Edwar

ConhecimentoSe

man

a do

36

Referência Bibliográfica• FILA.GIF, Cucamonga – Blog Rafael Cruz, Disponível em: <http://www.cucamongabr.com/?tag=filas> Acesso

em: 06 jul. 2009.

• FILACIRCULAR.GIF, Sistemas de Informação, Disponível em: < http://sicesumar.wikispaces.com/Fila+est%C3%A1tica+circular?f=print> Acesso em: 07 jul. 2009.

• PRATOS.JPG, Caloni.com.br, Disponível em: < http://www.caloni.com.br/blog/archives/basico-do-basico-assembly> Acesso em: 07 jul. 2009.

• PILHA_1.JPG, Linha de Código, Disponível em: < http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=975> Acesso em: 26 nov. 2007.

• SALIBA JÚNIOR, Edwar. Estruturas de Dados. Disponível em: < http://www.esj.eti.br/Apostilas/EstruturaDeDados.pdf> Acesso em: 07 jul. 2009.

• TODOTATTOO648.JPG, AndAfter.org, Disponível em: <http://www.andafter.org/images/album/design-de-produto/Eu%20Compraria/todotattoo648.jpg> Acesso em: 08 jul. 2009.

• ZIVIANI, Nivio. Projeto de Algoritmos : com implementações em Pascal e C. 3ª ed., São Paulo: Pioneira, 1996.