-
-
Save marcialwushu/8e3c2362b7aa561391db996efa30bf4c to your computer and use it in GitHub Desktop.
Implementacao de Fila e Pilha com uso de Array
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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