SlideShare uma empresa Scribd logo
1 de 21
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).
A
Ação:
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
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 pilhan");
for(int i=p->n-1;i>=0;i--)
printf("%0.fn",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 pilhan");
printf("4. Fimn");
}
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 = %.0fn",pilha_pop(pi));
break;
case 3 : //mostra
mostra_pilha(pi);
break;
} //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 filan");
int i;
for(i=f->ini;i<f->n;i++)
printf("%0.fn",f->vet[i]);
printf("n");
}
void menu(){
system("cls");
printf("Escolha uma das opcoes do menu: n");
printf("1. Enfileran");
printf("2. Retira n");
printf("3. Mostra a filan");
printf("4. Fimn");
}
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 = %.0fn",fila_retira(fi));
break;
case 3 : //mostra
mostra_fila(fi); break;
}//switch
printf("n"); system("pause");
} while(opmenu!=4);
}
 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).
Listas X Pilhas e Filas
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
1. Forbellone,A.L; Eberspacher,H.F. Lógica de
programação – A construção de algoritmos e
estrutura de dados. Makron Books.
2. Schildt,H. C Completo e Total. Makron Books.
3. 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).
4. Feofillof, P. Projeto de algoritmos.
http://www.ime.usp.br/~pf/algoritmos/

Mais conteúdo relacionado

Mais procurados

Tugas mandiri struktur data
Tugas mandiri struktur dataTugas mandiri struktur data
Tugas mandiri struktur dataAsep Jaenudin
 
Doubly linked list
Doubly linked listDoubly linked list
Doubly linked listchauhankapil
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Escore z x percentil
Escore z x percentilEscore z x percentil
Escore z x percentilBru Terra
 
Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15doudomblogspot
 
Stack using Linked List
Stack using Linked ListStack using Linked List
Stack using Linked ListSayantan Sur
 
Pertemuan 5 Perulangan (Looping)
Pertemuan 5 Perulangan (Looping)Pertemuan 5 Perulangan (Looping)
Pertemuan 5 Perulangan (Looping)Endang Retnoningsih
 
Stacks in DATA STRUCTURE
Stacks in DATA STRUCTUREStacks in DATA STRUCTURE
Stacks in DATA STRUCTUREMandeep Singh
 
Data Structures with C Linked List
Data Structures with C Linked ListData Structures with C Linked List
Data Structures with C Linked ListReazul Islam
 
Data Structures & Recursion-Introduction.pdf
Data Structures & Recursion-Introduction.pdfData Structures & Recursion-Introduction.pdf
Data Structures & Recursion-Introduction.pdfMaryJacob24
 
linked lists in data structures
linked lists in data structureslinked lists in data structures
linked lists in data structuresDurgaDeviCbit
 
Stacks overview with its applications
Stacks overview with its applicationsStacks overview with its applications
Stacks overview with its applicationsSaqib Saeed
 
Stack & Queue using Linked List in Data Structure
Stack & Queue using Linked List in Data StructureStack & Queue using Linked List in Data Structure
Stack & Queue using Linked List in Data StructureMeghaj Mallick
 

Mais procurados (20)

Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Tugas mandiri struktur data
Tugas mandiri struktur dataTugas mandiri struktur data
Tugas mandiri struktur data
 
Lista circulares doblemente enlazadas
Lista circulares doblemente enlazadasLista circulares doblemente enlazadas
Lista circulares doblemente enlazadas
 
Doubly linked list
Doubly linked listDoubly linked list
Doubly linked list
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Escore z x percentil
Escore z x percentilEscore z x percentil
Escore z x percentil
 
Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15
 
Stack using Linked List
Stack using Linked ListStack using Linked List
Stack using Linked List
 
Pertemuan 5 Perulangan (Looping)
Pertemuan 5 Perulangan (Looping)Pertemuan 5 Perulangan (Looping)
Pertemuan 5 Perulangan (Looping)
 
Queues
QueuesQueues
Queues
 
Stacks in DATA STRUCTURE
Stacks in DATA STRUCTUREStacks in DATA STRUCTURE
Stacks in DATA STRUCTURE
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Data Structures with C Linked List
Data Structures with C Linked ListData Structures with C Linked List
Data Structures with C Linked List
 
Fungsi Rekursif
Fungsi RekursifFungsi Rekursif
Fungsi Rekursif
 
Lista simple
Lista simpleLista simple
Lista simple
 
Data Structures & Recursion-Introduction.pdf
Data Structures & Recursion-Introduction.pdfData Structures & Recursion-Introduction.pdf
Data Structures & Recursion-Introduction.pdf
 
linked lists in data structures
linked lists in data structureslinked lists in data structures
linked lists in data structures
 
Stacks overview with its applications
Stacks overview with its applicationsStacks overview with its applications
Stacks overview with its applications
 
Stack & Queue using Linked List in Data Structure
Stack & Queue using Linked List in Data StructureStack & Queue using Linked List in Data Structure
Stack & Queue using Linked List in Data Structure
 
Flip Flops Parte 1
Flip Flops Parte 1Flip Flops Parte 1
Flip Flops Parte 1
 

Semelhante a Pilhas e Filas.ppt

Semelhante a Pilhas e Filas.ppt (20)

7 alocacao sequencial - filas
7   alocacao sequencial - filas7   alocacao sequencial - filas
7 alocacao sequencial - filas
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Exercício de estrutura de dados 01
Exercício de estrutura de dados 01Exercício de estrutura de dados 01
Exercício de estrutura de dados 01
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Aula 13
Aula 13Aula 13
Aula 13
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOSLIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Pged 06
Pged 06Pged 06
Pged 06
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 

Mais de JoberthSilva

AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptJoberthSilva
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdfJoberthSilva
 
A função scanf na programção para dispositivos embarcados
A função scanf na programção para dispositivos embarcadosA função scanf na programção para dispositivos embarcados
A função scanf na programção para dispositivos embarcadosJoberthSilva
 
A CRIAÇÃO DO UNIVERSO.ppt
A CRIAÇÃO DO UNIVERSO.pptA CRIAÇÃO DO UNIVERSO.ppt
A CRIAÇÃO DO UNIVERSO.pptJoberthSilva
 
Apocalipse - Cartas as Igrejas.pptx
Apocalipse - Cartas as Igrejas.pptxApocalipse - Cartas as Igrejas.pptx
Apocalipse - Cartas as Igrejas.pptxJoberthSilva
 
5 - Resistores.ppt
5 - Resistores.ppt5 - Resistores.ppt
5 - Resistores.pptJoberthSilva
 
Problemas de Carater.pptx
Problemas de Carater.pptxProblemas de Carater.pptx
Problemas de Carater.pptxJoberthSilva
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptJoberthSilva
 
Herança e Polimorfismo.ppt
Herança e Polimorfismo.pptHerança e Polimorfismo.ppt
Herança e Polimorfismo.pptJoberthSilva
 
Materiais Semicondutores
Materiais SemicondutoresMateriais Semicondutores
Materiais SemicondutoresJoberthSilva
 
Algoritmos - Modificado.ppt
Algoritmos - Modificado.pptAlgoritmos - Modificado.ppt
Algoritmos - Modificado.pptJoberthSilva
 
actividade1-140709100755-phpapp02.pdf
actividade1-140709100755-phpapp02.pdfactividade1-140709100755-phpapp02.pdf
actividade1-140709100755-phpapp02.pdfJoberthSilva
 
Rede sem fio 2.ppt
Rede sem fio 2.pptRede sem fio 2.ppt
Rede sem fio 2.pptJoberthSilva
 

Mais de JoberthSilva (20)

AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.ppt
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf
8 - ATIVIDADE DE OPERADORES TERNÁRIOS E IF.pdf
 
A função scanf na programção para dispositivos embarcados
A função scanf na programção para dispositivos embarcadosA função scanf na programção para dispositivos embarcados
A função scanf na programção para dispositivos embarcados
 
A CRIAÇÃO DO UNIVERSO.ppt
A CRIAÇÃO DO UNIVERSO.pptA CRIAÇÃO DO UNIVERSO.ppt
A CRIAÇÃO DO UNIVERSO.ppt
 
Apocalipse - Cartas as Igrejas.pptx
Apocalipse - Cartas as Igrejas.pptxApocalipse - Cartas as Igrejas.pptx
Apocalipse - Cartas as Igrejas.pptx
 
PHP.ppt
PHP.pptPHP.ppt
PHP.ppt
 
Aula_1.pptx
Aula_1.pptxAula_1.pptx
Aula_1.pptx
 
5 - Resistores.ppt
5 - Resistores.ppt5 - Resistores.ppt
5 - Resistores.ppt
 
Problemas de Carater.pptx
Problemas de Carater.pptxProblemas de Carater.pptx
Problemas de Carater.pptx
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.ppt
 
capacitores1.ppt
capacitores1.pptcapacitores1.ppt
capacitores1.ppt
 
Herança e Polimorfismo.ppt
Herança e Polimorfismo.pptHerança e Polimorfismo.ppt
Herança e Polimorfismo.ppt
 
Materiais Semicondutores
Materiais SemicondutoresMateriais Semicondutores
Materiais Semicondutores
 
Algoritmos - Modificado.ppt
Algoritmos - Modificado.pptAlgoritmos - Modificado.ppt
Algoritmos - Modificado.ppt
 
Fibra Óptica
Fibra ÓpticaFibra Óptica
Fibra Óptica
 
actividade1-140709100755-phpapp02.pdf
actividade1-140709100755-phpapp02.pdfactividade1-140709100755-phpapp02.pdf
actividade1-140709100755-phpapp02.pdf
 
50524(1).ppt
50524(1).ppt50524(1).ppt
50524(1).ppt
 
Rede sem fio 2.ppt
Rede sem fio 2.pptRede sem fio 2.ppt
Rede sem fio 2.ppt
 
bom-1.pdf
bom-1.pdfbom-1.pdf
bom-1.pdf
 

Pilhas e Filas.ppt

  • 1. Algoritmos de manipulação de estruturas elementares de dados Pilhas e Filas Prof. Rosana Palazon
  • 2. 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.
  • 3. 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.
  • 4. 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)..
  • 5. Pilha – Representação Gráfica (2). A Ação: 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 B A C B A B A D B A B A A 1. 2. 3. 4. 5. 6. 7. 8.
  • 6. 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(*)
  • 7. 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); }
  • 8. 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; }
  • 9. Pilha – Implementação em C usando vetor (cont) void pilha_libera(Pilha *p){ free(p); } void mostra_pilha(Pilha *p) { printf("Conteúdo da pilhan"); for(int i=p->n-1;i>=0;i--) printf("%0.fn",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 pilhan"); printf("4. Fimn"); }
  • 10. 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 = %.0fn",pilha_pop(pi)); break; case 3 : //mostra mostra_pilha(pi); break; } //switch printf("n"); system("pause"); } while(opmenu!=4); }
  • 11. 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.
  • 12. 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 (*)
  • 13. 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); }
  • 14. 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; }
  • 15. Fila – Implementação em C usando vetor void fila_libera(Fila *f){ free(f); } void mostra_fila(Fila *f){ printf("Conteúdo da filan"); int i; for(i=f->ini;i<f->n;i++) printf("%0.fn",f->vet[i]); printf("n"); } void menu(){ system("cls"); printf("Escolha uma das opcoes do menu: n"); printf("1. Enfileran"); printf("2. Retira n"); printf("3. Mostra a filan"); printf("4. Fimn"); }
  • 16. 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 = %.0fn",fila_retira(fi)); break; case 3 : //mostra mostra_fila(fi); break; }//switch printf("n"); system("pause"); } while(opmenu!=4); }
  • 17.  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). Listas X Pilhas e Filas
  • 18. 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;
  • 19. 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;
  • 20. 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 (*)
  • 21. Referências Bibliográficas 1. Forbellone,A.L; Eberspacher,H.F. Lógica de programação – A construção de algoritmos e estrutura de dados. Makron Books. 2. Schildt,H. C Completo e Total. Makron Books. 3. 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). 4. Feofillof, P. Projeto de algoritmos. http://www.ime.usp.br/~pf/algoritmos/