Skip to content

Instantly share code, notes, and snippets.

@antonio-abrantes
Last active November 15, 2016 16:34
Show Gist options
  • Save antonio-abrantes/4cc48f4f44de8353022d1a90ba981df7 to your computer and use it in GitHub Desktop.
Save antonio-abrantes/4cc48f4f44de8353022d1a90ba981df7 to your computer and use it in GitHub Desktop.
Implementacao de Fila e Pilha com uso de Array
// Arquivo teste.h
#define TAMANHO 5
/* Com as variaveis inicio e fim definidas no arquivo de cabeçalho
fora da struct, ficará mais claro e manipulavel o controle da fila*/
/* Variaveis globais "inicio" e "fim", declaradas aqui, são por padrão iniciadas com 0,
dispensando a necessidade de serem iniciadas em alguma outra parte do programa. */
extern int inicio, fim;
typedef struct filme{
char valor[20];
}Filme;
Filme filmes[TAMANHO];
/* Todo o vetor é referenciado por um unico ponteiro,
desta forma, as modificacoes não vão precisar de retorno. */
void zerar(Filme *f, int idx);
void menu();
void adicionar(Filme *f);
void retirarFila(Filme *f);
void retirarPilha(Filme *f);
void imprimir(Filme *f);
//==================================================================================================================================
// Arquivo teste.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "teste.h"
//função apenas para garantis que o vetor inicie sem lixo
void zerar(Filme *f, int idx){
int i;
for(i = idx; i < TAMANHO; i++){
strcpy(f[i].valor, "");
}
}
void menu(){
system("cls");
printf("1 - adicionar\n");
printf("2 - retirar\n");
printf("3 - imprimir\n");
printf("4 - sair\n");
printf("Digite a opcao: ");
}
void adicionar(Filme *f){
if(fim == TAMANHO){ //Verifica se a fila já esta cheia, caso sim, impede de adicionar novos elementos
printf("Fila Cheia\n");
system("PAUSE");
return;
}else{
printf("Digite a string: ");
char filme[20];
getchar();
scanf("%[^\n]", filme);
strcpy(f[fim].valor, filme);
fim++;
}
}
void retirarFila(Filme *f){ //Implemtação para fila
if(fim == 0){
printf("Fila vazia\n");
zerar(f, 0); //Garantir a limpeza do vetor
}else{
int i;
printf("Retirada a string %s da fila\n", f[inicio].valor);
for(i = inicio; i < fim -1; i++){ //Ajustar o vetor para não ficar com espaços vazios
f[i] = f[i + 1];
}
fim--;
zerar(f, fim);
imprimir(f);
}
}
void retirarPilha(Filme *f){ //Implementação para pilha, muda apenas a chamada para essa função
if(fim <= 0){
printf("Fila vazia\n");
zerar(f, 0); //Garantir a limpeza do vetor
}else{
printf("Retirada a string %s da pilha\n", f[fim-1].valor);
strcpy(f[fim-1].valor, "");
fim--;
imprimir(f);
}
}
void imprimir(Filme *f){
if(fim == 0){
printf("Fila Vazia\n");
}else{
int i;
for(i = inicio; i < fim; i++ ){
printf("%s\n", f[i].valor);
}
}
}
//=====================================================================================================================================
//Arquivo main
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "teste.h"
int inicio, fim;
int main(){
zerar(filmes, 0);
int opcao = 0;
while(opcao != 4){
system("cls");
menu();
scanf("%d", &opcao);
switch(opcao){
case 1:
adicionar(filmes);
break;
case 2:
retirarFila(filmes);
system("PAUSE");
break;
case 3:
imprimir(filmes);
system("PAUSE");
break;
case 4:
printf("Encerrando o sistema\n");
break;
default:
printf("Opcao invalida!\n");
getch();
break;
}
}
system("PAUSE");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment