Algoritmos de manipulação de estruturas elementares de dados

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Listas Prof. Rodrigo Rocha
Advertisements

Estruturas de Dados Pilha Prof. Rodrigo Rocha
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Estruturas de Dados Árvores Binárias
Recursividade Prof. Rosana Palazon.
Conceitos e algoritmos
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Aula T11 – BCC202 Pilhas Túlio Toffolo
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
Aula T12 – BCC202 Listas Túlio Toffolo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Estrutura de dados Busca
Slides: Prof. João Fabro UTFPR - Curitiba
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
ALGORITMOS E ESTRUTURAS DE DADOS
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Listas Lineares Estrutura de Dados.
Algoritmos e Estruturas de Dados
Denise Guliato Faculdade de Computação – UFU
Aula 11 LISTAS LIGADAS.
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
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.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
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
Denise Guliato Faculdade de Computação – UFU
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estruturas de Dados Aula 9: Listas (parte 1)
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
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.
Estruturas de Dados Aula 17: Estruturas Genéricas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
Prof. Alessandro Gonçalves
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Transcrição da apresentação:

Algoritmos de manipulação de estruturas elementares de dados Pilhas e Filas Prof. Rosana Palazon

INTRODUÇÃO O objetivo desta aula é o de conceituar as estruturas de dados: Pilhas e Filas abordando suas diferentes implementações e seus mecanismos de manipulação.

Pilha e Fila – Conceitos Uma pilha, assim como uma fila, é simplesmente uma lista linear de informações (2). Tanto a pilha como a fila podem ser implementadas por meio de uma lista encadeada ou de um vetor. O que difere uma pilha de uma fila é o mecanismo responsável pelo armazenamento e recuperação dos seus elementos (2).  Enquanto a fila obedece ao princípio FIFO (First In First Out), uma pilha (ou stack) é manipulada pelo mecanismo LIFO (Last In First Out). (1) A analogia mais próxima que se faz de uma pilha é compará-la a uma pilha de pratos (2), e a mais próxima de uma fila é a própria fila única de um banco ou supermercado.

Pilha - Conceitos O conceito de pilha é usado em muitos softwares de sistemas incluindo compiladores e interpretadores. (A maioria dos compiladores C usa pilha quando passa argumentos para funções) (2).. As duas operações básicas – armazenar e recuperar – são implementadas por funções tradicionalmente chamadas de push e pop, respectivamente (2).. A função push() coloca um item na pilha e a função pop() recupera um item da pilha. A região de memória a ser utilizada como pilha pode ser um vetor, ou uma área alocada dinamicamente (2)..

Pilha – Representação Gráfica (2). 1. push (A) 2. push (B) 3. push (C) 4. pop ( ) – recupera C 5. push (D) 6. pop ( ) – recupera D 7. pop ( ) – recupera B 8. pop ( ) – recupera A A B A C B A B A D B A B A A 1. 2. 3. 4. 5. 6. 7. 8.

Interface do tipo Pilha Operações básicas: criar uma pilha vazia inserir um elemento (push) retirar um elemento (pop) verificar se a pilha está vazia liberar a estrutura pilha mostrar a pilha(*)

Pilha – Implementação em C usando vetor. #include <stdio.h> #include <stdlib.h> #define N 50 typedef struct pilha{ int n; float vet[N]; }Pilha; Pilha *pilha_cria(){ Pilha *p=(Pilha*)malloc(sizeof(Pilha)); p->n=0; return p; } int pilha_vazia(Pilha *p){ return(p->n==0);

Pilha – Implementação em C usando vetor (cont) void pilha_push(Pilha *p, float v) { if(p->n==N){ printf("Capacidade da pilha esgotada.\n"); exit (1); //aborta o programa } //insere novo elemento p->vet[p->n]=v; p->n++; } float pilha_pop(Pilha *p){ float v; if(pilha_vazia(p)){ printf("Pilha vazia.\n"); exit (1); } //retira o elemento da pilha v=p->vet[p->n-1]; p->n--; return v;

Pilha – Implementação em C usando vetor (cont) void pilha_libera(Pilha *p){ free(p); } void mostra_pilha(Pilha *p) { printf("Conteúdo da pilha\n"); for(int i=p->n-1;i>=0;i--) printf("%0.f\n",p->vet[i]); printf("\n"); void menu(){ system("cls"); printf("Escolha uma das opcoes do menu: \n"); printf("1. Empilha (push)\n"); printf("2. Retira (pop)\n"); printf("3. Mostra a pilha\n"); printf("4. Fim\n");

Pilha – Implementação em C usando vetor (cont) main(){ Pilha *pi=pilha_cria(); int opmenu; float item; do{ menu(); scanf("%d", &opmenu); switch (opmenu) { case 1 : //insere printf("Digite o valor a ser empilhado: "); scanf("%f", &item); pilha_push(pi,item); break; case 2 : //retira printf("Elemento retirado = %.0f\n",pilha_pop(pi)); case 3 : //mostra mostra_pilha(pi); } //switch printf("\n"); system("pause"); } while(opmenu!=4); }

Filas - Conceitos A estrutura de fila é análoga ao conceito que temos de filas em geral. O primeiro a chegar é sempre o primeiro a sair, e a entrada de novos elementos sempre se dá no fim da fila. Em computação vemos este conceito sendo implementado em filas de impressão(3). Assim como as pilhas, uma fila também pode ser implementada por meio de um vetor ou de uma lista encadeada.

Interface do tipo Fila Operações básicas: criar uma fila vazia inserir um elemento no fim retirar um elemento do início verificar se a fila está vazia liberar a estrutura fila mostrar a fila (*)

Fila – Implementação em C usando vetor. #include <stdio.h> #include <stdlib.h> #define N 5 typedef struct fila{ int n; int ini; float vet[N]; }Fila; Fila *fila_cria(){ Fila *f=(Fila*)malloc(sizeof(Fila)); f->n=0; f->ini=0; return f; } int fila_vazia(Fila *f){ return(f->ini==5||f->n==0);

Fila – Implementação em C usando vetor void fila_insere (Fila *f, float v) { if(f->n==N){ //fila cheia printf("Capacidade da fila esgotada.\n"); return; //retorna ao programa } //insere novo elemento f->vet[f->n]=v; f->n++; } float fila_retira(Fila *f){ float v; if(fila_vazia(f)){ printf("fila vazia.\n"); return -1; } //retira o elemento da fila v=f->vet[f->ini]; f->ini++; return v;

Fila – Implementação em C usando vetor void fila_libera(Fila *f){ free(f); } void mostra_fila(Fila *f){ printf("Conteúdo da fila\n"); int i; for(i=f->ini;i<f->n;i++) printf("%0.f\n",f->vet[i]); printf("\n"); void menu(){ system("cls"); printf("Escolha uma das opcoes do menu: \n"); printf("1. Enfilera\n"); printf("2. Retira \n"); printf("3. Mostra a fila\n"); printf("4. Fim\n");

Fila – Implementação em C usando vetor main(){ Fila *fi=fila_cria(); int opmenu; float item; do{ menu(); scanf("%d", &opmenu); switch (opmenu){ case 1 : //insere printf("Digite o valor a ser enfileirado: "); scanf("%f", &item); fila_insere(fi,item); break; case 2 : //retira printf("Elemento retirado = %.0f\n",fila_retira(fi)); break; case 3 : //mostra mostra_fila(fi); break; }//switch printf("\n"); system("pause"); } while(opmenu!=4); }

Listas X Pilhas e Filas Filas e pilhas têm regras bastante rigorosas para acessar dados, e as operações de recuperação têm caráter destrutivo (3). Pilhas e filas implementadas em vetores usam regiões contíguas de memória, listas não necessariamente(2). Listas encadeadas podem ser acessadas randômica(quando se tem o endereço do item), mas normalmente são acessadas sequencialmente, pois cada item de uma lista contem além da informação um elo de ligação ao próximo item da cadeia, o que torna sua estrutura um pouco mais complexa(4) . Além disso, a recuperação de um item da lista encadeada não causa a sua destruição. (É preciso uma operação de exclusão específica para esta finalidade) (2).

Atividades 1. Implementar a interface pilha usando lista, como se segue: typedef struct lista { float valor; struct lista *prox; }Lista; typedef struct { Lista *li; }Pilha;

Atividades (cont) 2. Implementar a interface fila usando lista, como se segue: typedef struct lista { float valor; struct lista *prox; }Lista; typedef struct { Lista *ini; Lista *fim; }Fila;

Atividades (cont) Operações básicas: criar uma pilha/fila vazia inserir um elemento no fim retirar um elemento verificar se a pilha/fila está vazia liberar a estrutura pilha/fila mostrar a pilha/fila (*)

Referências Bibliográficas Forbellone,A.L; Eberspacher,H.F. Lógica de programação – A construção de algoritmos e estrutura de dados. Makron Books. Schildt,H. C Completo e Total. Makron Books. Celes, W.; Cerqueira,R.;Rangel, J. L. Introdução a estrutura de dados – uma introdução com técnicas de programação em C. Campus/Sociedade Brasileira de Computação (SBC). Feofillof, P. Projeto de algoritmos. http://www.ime.usp.br/~pf/algoritmos/