Código para remoção em fila usando regras de pilha
Bom dia,
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?
Estou com um exercício que tem o seguinte enunciado:
Crie um programa em Linguagem C, que remova (ou copie) os valores de uma fila, usando as regras de saída de uma pilha e os adicione em uma nova estrutura.
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
Curtidas 1
Melhor post
Renan Di
25/05/2016
Olá carinha que programa logo ali!
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:
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!
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!
GOSTEI 1
Mais Respostas
Gleiciane
24/05/2016
Como seria a resposta com todo o código?
GOSTEI 0
Aline Malta
24/05/2016
Olá Renan pq preciso usar um ponteiro???
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);
}
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
Aline Malta
24/05/2016
Consegui resolver sem ponteiro !!! Obrigada :D
GOSTEI 0
Wanderson Félix
24/05/2016
valew
GOSTEI 0