Código para remoção em fila usando regras de pilha

24/05/2016

0

Bom dia,

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

Gustavo Oliveira

Responder

Post mais votado

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:

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

Renan Di
Responder

Mais Posts

01/06/2016

Gleiciane

Como seria a resposta com todo o código?
Responder

03/06/2016

Aline Malta

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);
}
Responder

05/06/2016

Aline Malta

Consegui resolver sem ponteiro !!! Obrigada :D
Responder

07/06/2016

Wanderson Félix

valew
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar