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

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
Recursividade Função recursiva é aquela que chama a si própria.
Linguagem de Programação VI Tipos de Dados Compostos - structs
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
ESTRUTURAS DO TIPO FILA
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Aula T11 – BCC202 Pilhas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Aula T12 – BCC202 Listas Túlio Toffolo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
AED – Algoritmos e Estruturas de Dados
Armazenamento de Dados em Arquivos
Slides: Prof. João Fabro UTFPR - Curitiba
Matrizes clássicas e vectores em C++
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Listas Encadeadas.
ALGORITMOS E ESTRUTURAS DE DADOS
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
Revisão /*======================================================*/
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
Filas - Definição Uma fila possui o comportamento: O primeiro que chega é o primeiro que sai. O único elemento que pode ser removido da fila é o primeiro.
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Programação II Estruturas de Dados Aula 02 - continuação
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 9: Listas (parte 1)
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
Tipos de dados inteiro caracter real logico
Lista Linear Base para outras estruturas
1Unidade – Estrutura Condicional CASE Algoritmos e Linguagens de Programação Estrutura Condicional CASE Faculdade INED – Abril 2007 Prof. Edwar.
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
UNIVERSIDADE FEDERAL DO AMAZONAS- UFAM INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA- ICET SISTEMAS DE INFORMAÇÃO ALGORITMOS E ESTRUTURAS DE DADOS II PILHAS.
Estrutura de Dados Prof. André Cypriano M. Costa
Transcrição da apresentação:

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

Linguagem de Programação C/C++ Delphi Pascal .Net C# Java Fortran e etc. Para que elas existem? Para resolver problemas!

Problemas… Que tipo de problemas podemos resolver com linguagens de programação? Rotinas Podemos resolver qualquer tipo de rotina? Exemplos…

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.

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.

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. Figura Lista de Compras – Fonte: <http://www.andafter.org/images/album/design-de-produto/Eu%20Compraria/todotattoo648.jpg> Acesso em: 08 jul. 2009

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.

Lista Fonte: Ziviani (1996:37)

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.

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;

Algoritmo de Lista void 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++;

Algoritmo de Lista void 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) { Lista.Item[P].Codigo = Item.Codigo; strcpy (Lista.Item[P].Nome, Item.Nome);

Algoritmo de Lista void 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);

Algoritmo de Lista int 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;

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 */ cout << "Alterar Item"; cout << "\nDigite a posição a ser alterada: "; cout << "\n\n"; ConsultaItem (Lista, Aux, Posicao); cout << "Valores atuais"; cout << "\n==============\n\n"; cout << "Código: " << Aux.Codigo; cout << "\nNome : " << Aux.Nome << "\n";

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;

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.

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

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

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.

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);

Algoritmo de Pilha void 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; Item = Pilha.Item [Pilha.Topo]; Pilha.Topo--; int TamanhoPilha (TipoPilha &Pilha) { return (Pilha.Topo + 1);

Algoritmo de Pilha int 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);

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 */ cout << "Excluir Item"; 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; }

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); } Opcao = Menu (); system("PAUSE"); return EXIT_SUCCESS;

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.

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?

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

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.

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.

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);

Algoritmo de Fila void 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);

Algoritmo de Fila int 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();

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;

Algoritmo Fila fflush(stdin); getchar(); } Opcao = Menu (); system("PAUSE"); return EXIT_SUCCESS;

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.