olá pessoal...Quem poderá me salvar...sou leigo em programação em c ainda e estou com esse problema...Até então fiz este código que está funcionando bem...o problema é que preciso fazer com que os valores digitados na "fila" passem para a "pilha" e depois os mesmos valores voltem para a fila formando assim uma fila invertida daquela que existia no começo...resumindo, quando for excluído da fila este valor deve ir para a pilha, e depois que a pilha estiver com todos os valores que estavam na fila, quando excluir da pilha este valor deve voltar para a fila... será que alguém consegue resolver isso? Fico grato com a ajuda desde já.
# include <stdio.h>
#include <stdlib.h>
#include <locale.h>
//Constantes
# define tamanho 5
#define ta 5
//Estrutura da Fila
struct tfila {
int dados[tamanho];
int ini;
int fim;
};
//Estrutura da Pilha
struct tpilha {
int dado[ta];
int inicio;
int final;
};
//Variáveis globais
struct tfila fila;
struct tpilha pilha;
int op;
//Protipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
void pilha_entrar();
void pilha_sair();
void pilha_mostrar();
void men_mostrar();
//Função principal
int main(){
setlocale(LC_ALL, "Portuguese");
op = 1;
fila.ini = 0;
fila.fim = 0;
pilha.inicio = 0;
pilha.final = 0;
while (op != 0) {
system("cls");
fila_mostrar();
menu_mostrar();
pilha_mostrar();
men_mostrar();
scanf("%d", &op);
switch (op) {
case 1:
fila_entrar();
break;
case 2:
fila_sair();
break;
case 3:
pilha_entrar();
break;
case 4:
pilha_sair();
break;
}
}
return(0);
}
//Adicionar um elemento no final da Fila
void fila_entrar(){
if (fila.fim == tamanho) {
printf("\nA fila está cheia, impossível adicionar um novo valor!\n\n");
system("pause");
}
else {
printf("\nDigite o valor a ser inserido: ");
scanf("%d", &fila.dados[fila.fim]);
fila.fim++;
}
}
//Adicionar um elemento no final da Pilha
void pilha_entrar(){
if (pilha.final == ta) {
printf("\nA pilha está cheia, impossível empilhar um novo elemento!\n\n");
system("pause");
}
else {
printf("\nDigite o valor a ser empilhado: ");
scanf("%d", &pilha.dado[pilha.final]);
pilha.final++;
}
}
//Retirar o primeiro elemento da Fila
void fila_sair() {
if (fila.ini == fila.fim) {
printf("\nA fila está vazia, não há nada para remover!\n\n");
system("pause");
}
else {
int i;
for (i = 0; i < tamanho; i++) {
fila.dados = fila.dados[i+1];
}
fila.dados[fila.fim] = 0;
fila.fim--;
}
}
//Retirar o último elemento da Pilha
void pilha_sair() {
if (pilha.inicio == pilha.final) {
printf("\nA pilha está vazia, não há nada para desempilhar!\n\n");
system("pause");
}
else {
pilha.dado[pilha.final-1] = 0;
pilha.final--;
}
}
//Mostrar o conteúdo da Fila
void fila_mostrar() {
int i;
printf("[ ");
for (i = 0; i < tamanho; i++) {
printf("%d ", fila.dados);
}
printf("]\n\n");
}
//Mostrar o conteúdo da Pilha
void pilha_mostrar() {
int j;
printf("[ ");
for (j = 0; j < ta; j++) {
printf("%d ", pilha.dado[j]);
}
printf("]\n\n");
}
//Mostrar o menu de opções
void menu_mostrar() {
printf("\nEscolha uma opção:\n");
printf("1 - Incluir na Fila\n");
printf("2 - Excluir da Fila\n");
printf("0 - Sair\n\n");
}
//Mostrar o menu de opções
void men_mostrar() {
printf("\nEscolha uma opção:\n");
printf("3 - Empilhar\n");
printf("4 - Desempilhar\n");
printf("0 - Sair\n\n");
}