Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Slides: Prof. João Fabro UTFPR - Curitiba
Computação 2 Linguagem C “Pilhas e Filas com Alocação Dinâmica”. Slides: Prof. João Fabro UTFPR - Curitiba
2
O que são “Pilhas” e “Filas”
Pilhas e Filas são estruturas de dados com alocação dinâmica: são Listas Encadeadas! Ao implementar mecanismos de inserção e remoção de elementos da Lista Encadeada, pode-se definir se a Lista comporta-se como uma Fila ou uma Pilha!
3
O que são “Pilhas” e “Filas”
Fila: A inserção ocorre na última posição, e a remoção ocorre na primeira posição - o primeiro a entrar na fila é também o primeiro a sair! Pilha: Neste caso, tanto a inserção quanto a remoção de elementos ocorre sempre na primeira posição - o último a entrar na pilha é também o primeiro a sair! (Imagine de uma pilha de livros sobre a mesa, por exemplo!)
4
O que são “Pilhas” e “Filas”
As duas estruturas de dados são implementadas com base na estrutura de Lista Encadeada apresentada na aula passada. A seguir é apresentado um exemplo de uma Pilha.
5
#include <stdio.h>
#include <stdlib.h> struct Elemento { char nome [100]; struct Elemento* prox; }; struct Elemento* primeiro;//Ponteiro para o “topo” // da Pilha char menu (); void insere (); void mostra_todos(); void remove (); int main() { char escolha; primeiro = NULL; //Inicia a Pilha Vazia! for ( ; ; ) escolha = menu (); switch ( escolha ) case ‘i' : case ‘I' : { insere(); } break; case 'm' : case 'M' : { mostra_todos(); } break; case ‘r' : case ‘R' : { remove(); } break; case ‘t' : case ‘T' : { exit ( 0 ); } break; default : { printf ( "Opcao invalida. \n" ); } } printf ( "\n \n \n" ); system ( "Pause" ); return 0;
6
void insere () { system ( "cls" ); printf ( "\n \n \n" ); struct Elemento* novo; novo = malloc ( 1 * sizeof (struct Elemento) ); novo->proximo = primeiro; printf ( “Digite o Nome a inserir na Pilha: \n" ); fflush ( stdin ); gets ( novo->nome ); primeiro = novo; } void remove () { system ( "cls" ); printf ( "\n \n \n" ); struct Elemento *aux; if(primeiro != NULL) aux = primeiro; // aux aponta para o primeiro! primeiro = primeiro ->proximo; //primeiro aponta //para o “segundo” printf(“ Nome removido da Pilha: %s\n”, aux->nome); free(aux); //Libera a área de memória onde o nome estava } else printf(“Pilha Vazia!!!\n”);
7
void mostra_todos () { system ( "cls" ); printf ( "\n \n \n" ); struct Elemento *aux; aux = primeiro; while ( aux != NULL ) printf ("%s \n", aux->nome ); aux = aux->proximo; } char menu () { printf ("\n \n \n"); char opcao; printf ( "(I)nserir novo nome na pilha. \n" ); printf ( "(M)ostrar todos \n" ); printf ( "(R)emover um nome da pilha. \n" ); printf ( "(T)erminar. \n" ); fflush ( stdin ); scanf ( "%c", &opcao ); return opcao; }
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.