Fórum Código para remoção em fila usando regras de pilha #554381
24/05/2016
0
Estou com um exercício que tem o seguinte enunciado:
Eu escrevi o código abaixo, mas no momento de inserir os dados em uma nova estrutura, eles simplesmente não são inseridos. O que pode estar errado?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
//Constantes
#define tamanho 5
//Estrutura da Fila
struct estrutura {
int dados [tamanho];
int ini;
int fim;
};
//Variáveis Globais
struct estrutura fila;
struct estrutura pilha;
int op;
//Prototipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
void pilha_mostrar();
void pilha_mover();
//Função Principal
int main(){
setlocale(LC_ALL, "Portuguese");
op=1;
fila.ini=0;
fila.fim=0;
pilha.ini=0;
pilha.fim=0;
while(op!=0){
system("cls");
fila_mostrar();
pilha_mostrar();
menu_mostrar();
scanf("%d", &op);
switch(op){
case 1:
fila_entrar();
break;
case 2:
fila_sair();
break;
case 3:
pilha_mover();
break;
}
}
return(0);
}
//Adicionar um elemento no final da fila
void fila_entrar(){
if (fila.fim==tamanho){
printf("\nA fila está cheia, remova algum valor!\n\n");
system("Pause");
}else{
printf("\nDigite o valor a ser inserido: ");
scanf("%d", &fila.dados[fila.fim]);
fila.fim++;
}
}
//Retirar o primeiro elemento da Fila
void fila_sair(){
if(fila.ini==fila.fim){
printf("\nA fila esta vazia, adicione algum valor primeiro!\n");
system("pause");
}else{
int i;
for(i=0;i<tamanho;i++){
fila.dados[i]=fila.dados[i+1];
}
fila.dados[fila.fim]=0;
fila.fim--;
}
}
//Mostrar o conteúdo da fila
void fila_mostrar(){
int i;
printf("[ ");
for(i=0;i<tamanho;i++){
printf(" %d", fila.dados[i]);
}
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("3- Mover para a pilha\n");
printf("0- Sair\n\n");
}
//Mostrar o conteudo da pilha
void pilha_mostrar(){
int i;
printf("[ ");
for(i=0;i<tamanho;i++){
printf(" %d", pilha.dados[i]);
}
printf(" ]\n\n");
}
//Mover para a pilha
void pilha_mover(){
if(fila.ini==fila.fim){
printf("\nA fila esta vazia, adicione algum valor primeiro!\n");
system("pause");
}else{
pilha.dados[pilha.fim]=fila.dados[fila.fim];
pilha.fim++;
fila.dados[fila.fim-1]=0;
fila.fim--;
}
}
Gustavo Oliveira
Curtir tópico
+ 1Post mais votado
25/05/2016
No início do seu código falta uma coisinha imprescindível pra que todo o resto funcione o * que indica que a variável vai guardar uma referência para um valor e não o valor em si dessa forma a declaração da sua struct ficaria assim:
struct estrutura {
int dados [tamanho];
*int ini;
*int fim;
};
E em todos os métodos onde você precisar apontar para o próximo ou o anterior eles também deverão receber ponteiros *, fora isso o resto deve funcionar corretamente!
Renan Di
Gostei + 1
Mais Posts
01/06/2016
Gleiciane
Gostei + 0
03/06/2016
Aline Malta
Eu quero justamento o valor da posição e não do endereço.
Meu código está mais ou menos igual, mas dentro da função pilha mover eu utilizei um do/while para que ele coloque todos os dados de uma vez.. Meu problema está onde está a seta, quando tento armazenar o valor de fila.fim em pilha.fim a função não funciona. Se eu deixo sem esta linha ele modifica o valor de fila.fim ai se o usuario quiser adiconar ou tirar itens da fila não consegue pq a fila já estará zerada.
void fila_inverter () {
pilha.fim = fila.fim; (nesta linha) <===
do {
if (fila.ini == fila.fim) {
printf ("\nNada foi adicionado a fila para ser invertido!!!\n\n");
system("pause");
break;
}
else {
pilha.dados[pilha.ini] = fila.dados[pilha.fim];
pilha.fim--;
pilha.ini++;
}
} while (pilha.fim == 0);
}
Gostei + 0
05/06/2016
Aline Malta
Gostei + 0
07/06/2016
Wanderson Félix
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)