1
I need to stop queuing when the user enters a negative number (-1), check if the queue is empty so that when typing the negative number does not give any error and the main one, I need the user to indicate which value in specific he wants to unmrow.
#include <iostream>
using namespace std;
// Define a Estrutura Nó
struct No {
int valor; // Valor armazenado
No * prox; // Ponteiro para próximo elemento da lista
};
// Define a Fila
struct Fila {
No * ini; // Início da fila
No * fim; // Fim da fila
};
// Insere valor da lista
int inserir(Fila &f, int valor);
// Remove elemento da lista
int remover(Fila &f, int &valor);
int main(void) {
// Declara e inicializa fila
Fila fila;
fila.ini = fila.fim = NULL;
// Variável para armazenar dado digitado
int dado;
int n;
cout << "Quantos valores deseja enfileirar? ";
cin >> n;
cout << endl;
while (n>0) {
cout << "Digite um numero inteiro: ";
cin >> dado;
inserir(fila, dado);
n--;
}
cout << endl;
cout << "==== Imprimir todos os dados ====" << endl;
// Agora mostra o reultado...
while (remover(fila, dado) == 0) {
cout << dado << endl;
};
cout << endl;
cout << "===== Remover um unico valor ====" << endl;
cout << endl;
cout << "Qual valor deseja desenfileirar? " << endl;
};
// Insere um valor na fila
int inserir(Fila &f, int valor) {
No * tmp; // Ponteiro para armazenar endereço de nó temporariamente
// Cria nó
tmp = new No;
// Configura nó...
tmp->valor = valor; // Valor do nó
tmp->prox = NULL; // Sempre insere no fim da fila
// Se lista vazia, insere primeiro elemento
if (f.ini == NULL) {
f.ini = f.fim = tmp; // O primeiro elemento é o primeiro e o último
}
// Se lista não está vazia, atualiza lista...
else {
f.fim->prox = tmp; // Pendura novo elemento no antigo fim
f.fim = tmp; // Indica que novo elemento é o novo fim
}
// Retorna que inserção ocorreu com sucesso
return 0;
}
// Remove um valor da fila
int remover(Fila &f, int &valor) {
No * tmp; // Ponteiro temporário
// Se a lista está vazia, vai embora
if (f.ini == NULL) return 1;
// Armazena valor do elemento sendo removido
valor = f.ini->valor;
// Armazena endereço de elemento a ser removido
tmp = f.ini;
// Aponta inicio da lista para segundo elemento (novo primeiro!)
f.ini = f.ini->prox;
// Remove o primeiro elemento da lista
delete tmp;
// Boa prática... se a lista ficou vazia, atualiza último ponteiro
if (f.ini == NULL) f.fim = NULL;
// Retorna novo início da lista
return 0;
}
Is your problem in the queue or in the logic of typing the values? If you should stop when you type a negative why ask
"Quantos valores deseja enfileirar? "
?– Maniero
@Bigown always you in saving with this C++... My problem is with the logic to treat the empty queue, the typing of the value to be removed and the interruption of the queuing of the values by typing a negative number.
– Paulo Roberto
@bigown the user needs to have the possibility to give up entering the values he himself chose... Do you think it best to take the question with the quantity limitation?
– Paulo Roberto
It is not easy to solve something so wide. It would be better to isolate the problems, solved one at a time, if possible a question by problem. If you try to do this you may even notice some mistakes. Your
main()
doesn’t make any sense to me. The rest also seems to have problems, I don’t know if serious, I didn’t read it carefully. Unless I don’t understand the question, it’s hard to answer it the way it is. Regarding the end of typing I prefer to always adopt only a strategy and in case would have a value that ends and not the time count.– Maniero
@bigown thanks, I’ll review the code and post my doubts again.
– Paulo Roberto